欢迎来到天天文库
浏览记录
ID:21831425
大小:194.93 KB
页数:6页
时间:2018-10-25
《两点边值问题的差分求解》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、微分方程数值解实验报告姓名丁建伟学号200708020211日期2010.11.25实验项目两点边值问题的差分求解指导教师徐强一、上机实验的问题和要求(需求分析):实验内容:(I)分别在步长h=l/20,1/40,1/80,1/160情形下用屮心差分格式计算齐次两点边值问题-uH=f,u(0)=u(l)=0。其中f(x)=100*exp(-10*x),精确解为u(x)=1-(l~cxp(-10))-exp(~10*x)(II)给出差分解近似精确解在无穷范数和L2范数1的误差阶。目的与要求:掌握屮心差分
2、格式的程序实现掌握分析算法误差的方法二、程序设计的基本思想,原理和算法描述:基本思想及原理:做均匀网格剖分:O=xo3、所以A,.⑻=L/zw(X)-[Lw]z表示用差分算子代替微分算子I产生的误差称之为(局部)截断误差。这里关于&的阶为⑽2)。注意[[W]f(Xi)所以/^⑻=Lhu(x-f(x{)由此知:(局部)截断误差可视为差分格式,将数值解换成相应真解值后,左端减右端,再做Taylor展式获得的(可作为计算公式)。方程的联立形式(中心差分格式)•4、序代码或命令:#include#include#defineMAX200/*预定义数组大小*/voidmain(){intn,i;/*初始化阶数n7floatu[MAX],y[MAX];floath,x;floatF[MAX],f[MAX],m[MAX];/*步长和剖分点*/printff谘输入等分数n值:");scanf(”%dn,&n);/*读入阶数*/h=1/float(n);m[1]=-0.5;/*使用追赶法求解系数矩阵三对称的线性方程组*/for(i=2;i5、<=n-2;i++)m[i]=-1/(2+m[i-1]);for(i=1,x=h;x<1.0;x+=h,i++){F[i】=100*exp(-10*x);f[i]=1-(1-exp(-10))*x-exp(-10*x);}y[1]=F[1]/(2/(h*h));for(i=2;i<=n-1;i++)y[i]=(F[i]+(1/(h*h)*y[i-1]))/(2/(h*h)+(1/(h*h)*m[i-1]));u[n-1]=y[n-1];for(i=n-2;i>=1;i-)u[i]=y[i]-m[i]*6、u[i+1];for(i=1;i7、模式转换,h=l/float(n);这样j是正确的。1.对浮点数求绝对值时,应使用fabs()函数,而不是abs()。2.注意乘除的计算,不能直接写成2x等,必须加上符号,2*x。五、运行输出结果及分析:上述程序在VisualC++6.0环境下加以实现。经过多次测试,程序运行正确。例如:分別输入n值:20,40,运行结果如图所示,图中显示了每一步的值及端点误差。谪输入等分数n值:20教学软中心差分-/Vr-^7TJTJTJ]]]]]]]]]0123456789771234567891111111118、1V等u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[an入浩曲出鹿懂出浩曲出懂懂出曲攻s青看B月置SBSIR主K溝庸青唐青*青«蠢WY200.336405;-0.521176;-0.613978;-0.650998;-0.654183;-0.636848;-0.607065;-0.569734;-0.527823;-0.483135;0.436763;0.389369;0.341355;0.292965;0.244348;0
3、所以A,.⑻=L/zw(X)-[Lw]z表示用差分算子代替微分算子I产生的误差称之为(局部)截断误差。这里关于&的阶为⑽2)。注意[[W]f(Xi)所以/^⑻=Lhu(x-f(x{)由此知:(局部)截断误差可视为差分格式,将数值解换成相应真解值后,左端减右端,再做Taylor展式获得的(可作为计算公式)。方程的联立形式(中心差分格式)•
4、序代码或命令:#include#include#defineMAX200/*预定义数组大小*/voidmain(){intn,i;/*初始化阶数n7floatu[MAX],y[MAX];floath,x;floatF[MAX],f[MAX],m[MAX];/*步长和剖分点*/printff谘输入等分数n值:");scanf(”%dn,&n);/*读入阶数*/h=1/float(n);m[1]=-0.5;/*使用追赶法求解系数矩阵三对称的线性方程组*/for(i=2;i
5、<=n-2;i++)m[i]=-1/(2+m[i-1]);for(i=1,x=h;x<1.0;x+=h,i++){F[i】=100*exp(-10*x);f[i]=1-(1-exp(-10))*x-exp(-10*x);}y[1]=F[1]/(2/(h*h));for(i=2;i<=n-1;i++)y[i]=(F[i]+(1/(h*h)*y[i-1]))/(2/(h*h)+(1/(h*h)*m[i-1]));u[n-1]=y[n-1];for(i=n-2;i>=1;i-)u[i]=y[i]-m[i]*
6、u[i+1];for(i=1;i7、模式转换,h=l/float(n);这样j是正确的。1.对浮点数求绝对值时,应使用fabs()函数,而不是abs()。2.注意乘除的计算,不能直接写成2x等,必须加上符号,2*x。五、运行输出结果及分析:上述程序在VisualC++6.0环境下加以实现。经过多次测试,程序运行正确。例如:分別输入n值:20,40,运行结果如图所示,图中显示了每一步的值及端点误差。谪输入等分数n值:20教学软中心差分-/Vr-^7TJTJTJ]]]]]]]]]0123456789771234567891111111118、1V等u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[an入浩曲出鹿懂出浩曲出懂懂出曲攻s青看B月置SBSIR主K溝庸青唐青*青«蠢WY200.336405;-0.521176;-0.613978;-0.650998;-0.654183;-0.636848;-0.607065;-0.569734;-0.527823;-0.483135;0.436763;0.389369;0.341355;0.292965;0.244348;0
7、模式转换,h=l/float(n);这样j是正确的。1.对浮点数求绝对值时,应使用fabs()函数,而不是abs()。2.注意乘除的计算,不能直接写成2x等,必须加上符号,2*x。五、运行输出结果及分析:上述程序在VisualC++6.0环境下加以实现。经过多次测试,程序运行正确。例如:分別输入n值:20,40,运行结果如图所示,图中显示了每一步的值及端点误差。谪输入等分数n值:20教学软中心差分-/Vr-^7TJTJTJ]]]]]]]]]012345678977123456789111111111
8、1V等u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[u[an入浩曲出鹿懂出浩曲出懂懂出曲攻s青看B月置SBSIR主K溝庸青唐青*青«蠢WY200.336405;-0.521176;-0.613978;-0.650998;-0.654183;-0.636848;-0.607065;-0.569734;-0.527823;-0.483135;0.436763;0.389369;0.341355;0.292965;0.244348;0
此文档下载收益归作者所有