实验目的及要求: 1、熟悉各种初值问题的算法,编出算法程序; 2、明确各种算法的精度寓所选步长有密切关系; 3、熟悉在Matlab平台上直接求解常微分方程初值问题。 | ||||||||
实验内容: 1、编写改进的欧拉公式通用子程序,取 求解初值问题 。 2、编写四阶经典龙格-库塔方法子程序,取 求解初值问题,并计算y(0.4)的近似值,要求小数点后保留4位有效数字。 | ||||||||
实验步骤与程序:
或者
被调用的ou_la_gaijin.m文件 function [x,y]=ou_la_gaijin(x0,y0,h,N,ydot_fun) x=zeros(1,N+1); y=zeros(1,N+1); x(1)=x0; y(1)=y0; for n=1:N x(n+1)=x(n)+h; ybar=y(n)+h*feval(ydot_fun,x(n),y(n)); y(n+1)=y(n)+(h/2)*(feval(ydot_fun,x(n),y(n))+feval(ydot_fun,x(n+1),ybar)); 运行的ou_la_gaijin1.m文件 ydot_fun=inline('1/(1+x^2)-2*y^2'); [x,y]=ou_la_gaijin(0,0,0.1,40,ydot_fun)
被调用的long_ge_ku_ta_4j.m文件 function [x,y]=long_ge_ku_ta_4j(x0,y0,h,N,fun) x=zeros(1,N+1); !生成矩阵 y=zeros(1,N+1); x(1)=x0; y(1)=y0; for n=1:N x(n+1)=x(n)+h; k1=feval(fun,x(n),y(n)); k2=feval(fun,x(n)+h/2,y(n)+(h*k1)/2); k3=feval(fun,x(n)+h/2,y(n)+(h*k2)/2); k4=feval(fun,x(n)+h,y(n)+h*k3) y(n+1)=y(n)+(h*(k1+2*k2+2*k3+k4))/6; end fun=@(x,y)8-3*y; [x,y]=long_ge_ku_ta_4j(0,2,0.2,5,fun) 运行的long_ge_ku_ta_4j_1.m文件 fun=@(x,y)8-3*y; !@()的意思是定义函数 [x,y]=long_ge_ku_ta_4j(0,2,0.2,5,fun) | ||||||||
运行结果: | ||||||||
结果分析与讨论:
|