MATLAB实验报告_常微分方程数值解

专业 序号 姓名 日期

实验3 常微分方程数值解

【实验目的】

1.掌握用MATLAB求微分方程初值问题数值解的方法; 2.通过实例学习微分方程模型解决简化的实际问题; 3.了解欧拉方法和龙格库塔方法的基本思想。

【实验内容】

用欧拉方法和龙格库塔方法求下列微分方程初值问题的数值解,画出解的图形,对结果进行分析比较

?y'?y?2x,(1)?(0?x?1),精确解y?3ex?2x?2;?y(0)?1

22?y'?x?y,(2)?(0?x?10).?y(0)?0或y(0)?1

【解】:手工分析怎样求解

【计算机求解】:怎样设计程序?流程图?变量说明?能否将某算法设计成具有形式参数的函数

形式?

【程序如下】:

function f=f(x,y) f=y+2*x;

clc;clear;

a=0;b=1; %求解区间

[x1,y_r]=ode45('f',[a b],1); %调用龙格库塔求解函数求解数值解; %% 以下利用Euler方法求解 y(1)=1;N=100;h=(b-a)/N; x=a:h:b; for i=1:N

y(i+1)=y(i)+h*f(x(i),y(i)); end

figure(1)

plot(x1,y_r,'r*',x,y,'b+',x,3*exp(x)-2*x-2,'k-');%数值解与真解图 title('数值解与真解图');

legend('RK4','Euler','真解'); xlabel('x');ylabel('y'); figure(2)

plot(x1,abs(y_r-(3*exp(x1)-2*x1-2)),'k-');%龙格库塔方法的误差 title('龙格库塔方法的误差') xlabel('x');ylabel('Error'); figure(3)

plot(x,abs(y-(3*exp(x)-2*x-2)),'r-')%Euler方法的误差 title('Euler方法的误差') xlabel('x');ylabel('Error');

【运行结果如下】:

欢迎下载 —

2

【结果分析】:龙格库塔方法和Euler方法求解常微分方程都能获得比较好的数值解,相比较而言龙格库塔方法的数值解的精度远远要比Euler方法的数值解的精度高。

欢迎下载 3

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4