用MATLAB求解常微分方程实验报告.docxVIP

  • 6
  • 0
  • 约1.89千字
  • 约 4页
  • 2023-07-14 发布于北京
  • 举报
实验五 利用Matlab求解常微分方程(组)的实验报告 学院:数计学院 班级:1003班 姓名:黄晓丹 学号:1051020144 一.实验目的: 熟悉Matlab软件中关于求解常微分方程的各种命令. 掌握利用Matlab软件进行常微分方程的求解。 二.相关知识 在MATLAB中,由函数dsolve()解决常微分方程(组)的求解问题,其具体格式如下: X=dsolve(‘eqn1’,’eqn2’,…) 函数dsolve用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解. 用字符串方程表示,自变量缺省值为t。导数用D表示,2阶导数用D2表示,以此类推。S返回解析解。在方程组情形,s为一个符号结构。 [tout,yout]=ode45(‘yprime’,[t0,tf],y0) 采用变步长四阶Runge-Kutta法和五阶Runge-Kutta-Felhberg法求数值解,yprime是用以表示f(t,y)的M文件名,t0表示自变量的初始值,tf表示自变量的终值,y0表示初始向量值。输出向量tout表示节点(t0,t1, …,tn)T,输出矩阵yout表示数值解,每一列对应y的一个分量。若无输出参数,则自动作出图形. 三.实验内容: 例1? 求下列微分方程的解析解 (1) (2) (3) 方程(1)求解的MATLAB代码为: clear; s=dsolve(Dy=a*y+b) 结果为 s =-b/a+exp(a*t)*C1 方程(2)求解的MATLAB代码为: clear; s=dsolve(D2y=sin(2*x)-y,y(0)=0,Dy(0)=1,x) simplify(s)? %以最简形式显示s 结果为 s =(-1/6*cos(3*x)-1/2*cos(x))*sin(x)+(-1/2*sin(x)+1/6*sin(3*x))*cos(x)+5/3*sin(x) ans =-2/3*sin(x)*cos(x)+5/3*sin(x) 方程(3)求解的MATLAB代码为: clear; s=dsolve(Df=f+g,Dg=g-f,f(0)=1,g(0)=1) simplify(s,f)? %s是一个结构 simplify(s.g) 结果为 ans =exp(t)*cos(t)+exp(t)*sin(t) ans =-exp(t)*sin(t)+exp(t)*cos(t) ??? 例2 求解微分方程 先求解析解,再求数值解,并进行比较。由 clear; s=dsolve(Dy=-y+t+1,y(0)=1,t) simplify(s) 可得解析解为。下面再求其数值解,先编写M文件fun8.m %M函数fun8.m function f=fun8(t,y) f=-y+t+1; 再用命令 clear; close; t=0:0.1:1; y=t+exp(-t); plot(t,y);? %化解析解的图形 hold on;? %保留已经画好的图形,如果下面再画图,两个图形和并在一起 [t,y]=ode45(fun8,[0,1],1); plot(t,y,ro);? %画数值解图形,用红色小圈画 xlabel(t),ylabel(y) 结果见图7.1 ? 图7.1 解析解与数值解 由图16.6.1可见,解析解和数值解吻合得很好。 ??? 例3 求方程 的数值解.不妨取.则上面方程可化为 先看看有没有解析解.运行MATLAB代码 clear; s=dsolve(D2y=9.8*sin(y),y(0)=15,Dy(0)=0,t) simplify(s) 知原方程没有解析解.下面求数值解.令可将原方程化为如下方程组 建立M文件fun9.m如下 %M文件fun9.m function f=fun9(t,y) f=[y(2), 9.8*sin(y(1))];? %f向量必须为一列向量 运行MATLAB代码 clear; close; [t,y]=ode45(fun9,[0,10],[15,0]); plot(t,y(:,1));? %画随时间变化图,y(:2)则表示的值 xlabel(t),ylabel(y1) 结果见图7.2 ? 图7.2 数值解 ????

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档