资源描述:
《数学建模实验.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、数学建模课程实验报告专题实验7班级数财系1班学号2011040123姓名李丛文实验题目常微分方程数值解实验目的1.掌握用MATLAB求微分方程初值问题数值解的方法;2.通过实例学习微分方程模型解决简化的实际问题;3.了解欧拉方法和龙格库塔方法的基本思想。实验内容(包括分析过程、方法、和代码,结果)1.用欧拉方法和龙格库塔方法求下列微分方程初值问题的数值解,画出解的图形,对结果进行分析比较解;M文件functionf=f(x,y)f=y+2*x;程序;clc;clear;a=0;b=1;%求解区间[x1,y_r]=ode45('f',[ab],1);%调用龙格库塔求解函数求解
2、数值解;%%以下利用Euler方法求解y(1)=1;N=100;h=(b-a)/N;x=a:h:b;fori=1:Ny(i+1)=y(i)+h*f(x(i),y(i));endfigure(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('
3、龙格库塔方法的误差')xlabel('x');ylabel('Error');figure(3)plot(x,abs(y-(3*exp(x)-2*x-2)),'r-')%Euler方法的误差title('Euler方法的误差')xlabel('x');ylabel('Error');4.单摆运动是一个我们熟悉的物理模型,可以看作工程技术中一些振动问题的简化,图8中一根长l的(无弹性的)细线,一端固定,另一端悬挂一质量为m的小球,在重力作用下小球处于竖直的平衡位置,使小球偏离平衡位置一根小的角度,然后让它无初速度的放开,小球就会沿圆弧摆动,在不考虑空气阻力的情况下建立关于时间
4、t的微分方程,设l=25cm,在等于和两种情况下求方程的数值解,并与近似解比较。解;实验原理与数学模型:在小球摆动过程中的任一位置θ,小球所受重力沿运动轨迹方向的分力为-mgsinθ(负号表示力的方向与θ的正方向相反),利用牛顿第二定律即得微分方程描述单摆运动规律的微分方程(1)是2阶微分方程,无解析解,但可用Matlab或其它软件编程求其数值解,但都需要先将它化成方程组的形式。令则微分方程(1)化为初始条件转化为在前面的两式中,g=9.8,l=0.25,x10为10o=0.1745(弧度)及30o=0.5236(弧度)两种情况.周期根据上原理,可以建立模型,用matlab
5、编程求解,过程如下,程序以单摆的两个周期来计算作图。M文件;functiondx=danbai(t,x)g=9.8;l=0.25;dx=[x(2);-g/l*sin(x(1))];程序;一.当时ts=0:0.05:2;a0=0.1745;x0=[a0,0];[t,x]=ode23(@danbai,ts,x0);y=a0*cos(sqrt(40).*t);[t,x(:,1),y]subplot(1,2,2),plot(t,x(:,1),'-k*'),title('摆角10度数值解')subplot(1,2,1),plot(t,y,'b*'),plot(t,y,'-r*'),t
6、itle('摆角10度近似解')ans=00.17450.17450.05000.16610.16580.10000.14150.14070.15000.10330.10170.20000.05500.05250.25000.0015-0.00180.3000-0.0522-0.05600.3500-0.1009-0.10460.4000-0.1397-0.14290.4500-0.1649-0.16690.5000-0.1742-0.17450.5500-0.1667-0.16470.6000-0.1430-0.13860.6500-0.1054-0.09870.7000
7、-0.0577-0.04910.7500-0.00440.00540.80000.04940.05940.85000.09830.10750.90000.13770.14490.95000.16370.16791.00000.17380.1744二.当时,ts=0:0.05:2;a0=0.5236;x0=[a0,0];[t,x]=ode23(@danbai,ts,x0);y=a0*cos(sqrt(40).*t);[t,x(:,1),y]subplot(1,2,2),plot(t,x(:,1),'-k*'),tit