算例6:对于微分方程解:
function z=f2(x,y) z=x^2-y;
为衡量数值解的精度,我们求出该方程的解析解为y??e?x?x2?2x?2.在此也以文件的形式表示如下: function y=solvef2(x) y=-exp(-x)+x^2-2*x+2;
令f=@f2; a=0; b=1; N=10; ya=1; 运行:E=MendEuler(f,a,b,N,ya); y=solvef2(a:(b-a)/N:b); m=[E,y’]
其中m内的y’表示准确解.
3.2 四阶Runge-Kutta方法
用四阶Runge-Kutta方法求解常微分方程. MATLAB文件:(文件名:RungKutta4.m) function R=RungKutta4(f,a,b,N,ya) %f是微分方程右端函数句柄
%a,b是自变量的取值区间[a,b]的端点 %N是区间等分的个数 %ya表初值y(a)
%R=[x’,y’]是自变量X和解Y所组成的矩阵 h=(b-a)/N;
x=zeros(1,N+1); y=zeros(1,N+1); x=a:h:b; y(1)=ya; for i=1:N
k1=feval(f,x(i),y(i));
k2=feval(f,x(i)+h/2,y(i)+(h/2)*k1); k3=feval(f,x(i)+h/2,y(i)+(h/2)*k2); k4=feval(f,x(i)+h,y(i)+h*k3);
y(i+1)=y(i)+(h/6)*(k1