常微分方程初值问题的数值解法

2020-08-23 22:31

贵州师范大学数学与计算机科学学院学生实验报告

课程名称: 数值分析 班级: 实验日期: 年 月 日 学 号: 姓名: 指导教师: 实验成绩: 一、实验名称

实验六: 常微分方程初值问题数值解法 二、实验目的及要求

1. 让学生掌握用Euler法, Runge-Kutta法求解常微分方程初值问题. 2. 培养Matlab编程与上机调试能力. 三、实验环境

每人一台计算机,要求安装Windows XP操作系统,Microsoft office2003、MATLAB6.5(或7.0). 四、实验内容

1. 取步长h=0.1,0.05,0.01, ? ,用Euler法及经典4阶Runge-Kutta 法求解初值

问题

?y'??2y?2t2?2t(0?t?1) ??y(0)?1要求:

1) 画出准确解(准确解y?e?2t?t2)的曲线,近似解折线;

2) 把节点0.1和0.5上的精确解与近似解比较,观察误差变化情况.

2. 用 Euler法,隐式Euler法和经典4阶R-K法取不同步长解初值问题

?y'??50y,x?[0,1],? ?1?y(0)?2?并画出曲线观察稳定性. 注:题1必须写实验报告

五、算法描述及实验步骤

Euler法:

输入 f(x,y),a,b,h,x0(x0?a),y0 输出 Euler解y 步1 m?b?a;xn?a?n?h(n?1,2,?,m) h步2 对n?0,1,2,?,m?1执行yn?1?yn?h?f(xn,yn)

步3 输出y?(y1,y2,?,ym)T 经典4阶R-K法:

输入 f(x,y),a,b,h,x0(x0?a),y0 输出 4阶R-K解y 步1 m?b?a;xn?a?n?h(n?1,2,?,m) h步2 对n?0,1,2,?,m?1执行K1?f(xn,yn),K2?f(xn?0.5,yn?0.5hK1), K3?f(xn?0.5,yn?0.5hK2),K4?f(xn?1,yn?hK3) yn?1?yn?步3 输出y?(y1,y2,?,ym)T

h(K1?2K2?2K3?K4) 6

六、调试过程及实验结果

>> shiyan6 Y1 =

0.8000 0.6620 0.5776 0.5401 0.5441 0.5853 0.6602 0.7662 0.9009 1.0627 Y2 =

0.8287 0.7103 0.6388 0.6093 0.6179 0.6612 0.7366 0.8419 0.9753 1.1353

e1 = 0.0287 e2 =

4.2469e-006

e1 = 0.0738 e2 =

1.1609e-005

注:至于h=0.05、0.01的情况将程序中的h值作相应的改动即可得。

七、总结

在1阶的Euler法解初值问题时,若步长过大的话,误差将会较大,其解不可靠,只有

控制步长,在一定误差范围内才可用。

就精度阶而言经典4阶Runge-Kutta法最可取,但并不是阶高的方法就一定可用,还必须考虑初值问题的性态、数值方法的计算量稳定性等因素。因此在实际计算中,应根据问题的具体情况来选择合适的方法。

八、附录(源程序清单)

图像、计算、误差比较程序:

x=0:0.001:1; y=exp(-2*x)+x.^2; plot(x,y,'r') axis([0,1,0.5,1.2]) hold on

a=0;b=1;y0=1;h=0.1;d=y0; Y1=Euler('fun',a,b,y0,h) u1=0:0.001:h; v1=Y1(1)+0*u1; plot(u1,v1,'g--') hold on

u2=0:0.001:5*h; v2=Y1(5)+0*u2; plot(u2,v2,'g--') hold on Y1=[d,Y1]; t=0:h:1;

scatter(t,Y1,'r') hold on plot(t,Y1) hold on

Y2=RK('fun',a,b,y0,h) u3=0:0.001:h; v3=Y2(1)+0*u3; plot(u3,v3,'y--') hold on

u4=0:0.001:5*h;

v4=Y2(5)+0*u4; plot(u4,v4,'y--') hold on

v5=0:0.001:Y2(1); u5=h+0*v5;

plot(u5,v5,'k--') hold on

v6=0:0.001:Y2(5); u6=5*h+0*v6; plot(u6,v6,'k--') hold on Y2=[d,Y2];

scatter(t,Y2,'r') hold on plot(t,Y2)

title('??è·?a?ú??ó??ü???a????','fontsize',10,'fontweight','bold')

text(0.735,0.7,'\\leftarrowy=Euler·¨?ü???a????','fontsize',8)

text(0.15,0.775,'\\leftarrowy=?-μ?4?×Runge-Kutta·¨?ü???a????','fontsize',8) x=[0.1,0.5]; y=exp(-2*x)+x.^2; e1=abs(y(1)-Y1(2)) e2=abs(y(1)-Y2(2)) e1=abs(y(2)-Y1(6)) e2=abs(y(2)-Y2(6))

Euler法程序:

function Y=Euler(f,a,b,y0,h) m=(b-a)/h;Y=zeros(1,m);x=a;d=y0; for n=1:m

K=feval(f,x,y0); x=x+h; y0=y0+h*K; Y(n)=y0; end

定义函数:

function z=fun(t,y) z=-2*y+2*t^2+2*t;

经典4阶Runge—Kutta法程序:

function Y=RK(f,a,b,y0,h) m=(b-a)/h;Y=zeros(1,m);x=a;d=y0; for n=1:m

K1=feval(f,x,y0); x=x+0.5*h;y1=y0+0.5*h*K1; K2=feval(f,x,y1); y2=y0+0.5*h*K2; K3=feval(f,x,y2); x=x+0.5*h;y3=y0+h*K3; K4=feval(f,x,y3);

y0=y0+h*(K1+2*K2+2*K3+K4)/6; Y(n)=y0; end


常微分方程初值问题的数值解法.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:法理学张文显第三版笔记 - 讲义整理 - 超全

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: