跪求线性多步法求解微分方程数值解的C语言程序(Adams外插)

跪求线性多步法求解微分方程数值解的C语言程序(Adams外插),第1张

c=getchar()!=EOF语饥老做句的执行顺序是 1、temp=(getchar()!=EOF); 2、c=temp; 所以,当你的含拿输入不为EOF时,c始终为1。 这里的EOF为文件结束符,对于它的宏定义位于stdio.h头文件中,烂衡如果你去看的话会发现 #define EOF -1

目录 一.设计目的·····································3二.设计思想·····································3三.设计步骤·····································3四.心得体会·····································10 一.设计目的1、学会用Matlab求简单微分方程的解析解. 2、学会用Matlab求微分方程的数值解. 二.设计思想用Matlab软件求常微分方程的数值解,完成导d追踪问题,慢跑者与狗,地中海鲨鱼问题的求解。 三.设计步骤1. 微分方程的解析解 求微分方程(组)的解析解命令:dsolve(‘方程1’, ‘方程2’,…‘方程n’, ‘初始条件’, ‘自变量’)记号: 在表达微分方程时,用字母D表示求微分,D2、D3等表示求高阶微分.任何D后所跟的字母为因变量,自变量可以指定或由系统规则选定为确省. 2. 微分方程的数值解(一)常微分方程数值解的定义在生产和科研中所处理的微分方程往往很复杂且大多得不出一般解。而在实际上对初值问题,一般是要求得到解在伍指若干个点上满足规定精确度的近似值,或者得到一个满足精确度要求的便于计算的表腔尘配达式。因此,研究常微分方程的数值解法是十分必要的。

(二)建立数值解法的一些途径

1、用差商代替导数 若步长h较小,则有 故有公式 此即欧拉法2、使用数值积分对方程y’=f(x,y), 两边由xi到xi+1积分,并利用梯形公式,有 故有公式: 实际应用时,与欧拉公式结合使用: 此即改进的欧拉法。 3、使用泰勒公式以此方法为基础,有龙格-库塔法、线性多步法等方法 4、数值公式的精度当一个数值公式的截断误差可表示为O(hk+1)时(k为正整数,h为步长),称它是一个k阶公式。k越大,则数值公式的精度越高。�6�1 欧拉法是一阶公式,改进的欧拉法是二阶公式。�6�1 龙格-库塔法有二阶公式和四阶公式。�6�1 线性多步法有四阶阿达姆斯外插公式和内插公式 (三)用Matlab软件求常微分方程的数值解 [t,x]=solver(’f’,ts,x0,options)注意:1、在解n个未知函数的方程组时,x0和x均为n维向量,m-文件中的待解方程组应以x的分量形式写成. 2、使用Matlab软件求数值解时,高阶微分方程必须等价地变换成一阶微分方程组. (四)数学建模实例1. 导d追踪问题设位于坐标原点的甲舰向位于x轴上点A(1, 0)处的乙舰发射导d,导d头始终对准乙舰.如果乙舰以最大的速度v0(是常数)沿平行于y轴的直线行驶,导d的速度是5v0,求导d运行的曲线方程.又乙舰行驶多远时,导d将它击中? 解法一(解析法)假设导d在t时刻的位置为P(x(t), y(t)),乙舰位于 . 由于导d头始终对准乙舰,故此时直线PQ就是导d的轨迹曲线弧OP在点P处的切线,即有 即 (1)又根据题意,弧OP的长度为 的5倍,即(2)由(1),(2)消去t整理得模型:

解即为导d的运行轨迹: 当 时 ,即当乙舰航行到点 处时被导d击中. 被击中时间为: . 若v0=1, 则在t=0.21处被击中. 结果如图: 解法二 (建立参数方程求数值解)设时刻t乙舰的坐标为(X(t),Y(t)),导d的坐标为(x(t),y(t)). 解导d运动轨迹的参数方程建立m-文件eq2.m如下:function dy=eq2(t,y) dy=zeros(2,1)dy(1)=5*(1-y(1))/sqrt((1-y(1))^2+(t-y(2))^2)dy(2)=5*(t-y(2))/sqrt((1-y(1))^2+(t-y(2))^2) 取兄胡t0=0,tf=2,建立主程序chase2.m如下: [t,y]=ode45('eq2',[0 2],[0 0]) Y=0:0.01:2 plot(1,Y,'-'), hold onplot(y(:,1),y(:,2),'*') 结果见图1 导d大致在(1,0.2)处击中乙舰,与前面的结论一致在chase2.m中,按二分法逐步修改tf,即分别取tf=1,0.5,0.25,…,直到tf=0.21时,得图2 结论:时刻t=0.21时,导d在(1,0.21)处击中乙舰。 2.地中海鲨鱼问题 意大利生物学家Ancona曾致力于鱼类种群相互制约关系的研究,他从第一次世界大战期间,地中海各港口捕获的几种鱼类捕获量百分比的资料中,发现鲨鱼等的比例有明显增加(见下表),而供其捕食的食用鱼的百分比却明显下降.显然战争使捕鱼量下降,食用鱼增加,鲨鱼等也随之增加,但为何鲨鱼的比例大幅增加呢? 他无法解释这个现象,于是求助于著名的意大利数学家V.Volterra,希望建立一个食饵—捕食系统的数学模型,定量地回答这个问题.,建立m-文件shier.m如下:function dx=shier(t,x)dx=zeros(2,1)dx(1)=x(1)*(1-0.1*x(2)) dx(2)=x(2)*(-0.5+0.02*x(1))其次,建立主程序shark.m如下: [t,x]=ode45('shier',[0 15],[25 2]) plot(t,x(:,1),'-',t,x(:,2),'*') plot(x(:,1),x(:,2))求解结果 左图反映了x1(t)与x2(t)的关系。 可以猜测: x1(t)与x2(t)都是周期函数。模型(二) 考虑人工捕获模型求解:1、分别用m-文件shier1.m和shier2.m定义上述两个方程2、建立主程序shark1.m, 求解两个方程,并画出两种情况下鲨鱼数在鱼类总数中所占比例 x2(t)/[x1(t)+x2(t)] 图中实线为战前的鲨鱼比例,“*”线为战争中的鲨鱼比例 结论:战争中鲨鱼的比例比战前高 (五)源程序代码 clearx=0:0.01:1y=-5*(1-x).^(4/5)/8+5*(1-x).^(6/5)/12+5/24plot(x,y,'*') t0=0tf=2[t,y]=ode45('eq2',[t0 tf],[0 0])X=1Y=0:0.01:2plot(X,Y,'-')hold onplot(y(:,1),y(:,2),'*') t0=0tf=3.75[t,y]=ode45('eq3',[t0 tf],[0 0])T=0:0.1:2*piX=10+20*cos(T)Y=20+15*sin(T)plot(X,Y,'-')hold onplot(y(:,1),y(:,2),'*') function dy=eq1(x,y)dy=zeros(2,1) dy(1)=y(2)dy(2)=1/5*sqrt(1+y(1)^2)/(1-x)function dy=eq2(t,y)dy=zeros(2,1)dy(1)=5*(1-y(1))/sqrt((1-y(1))^2+(t-y(2))^2)dy(2)=5*(t-y(2))/sqrt((1-y(1))^2+(t-y(2))^2) dsolve('Du=1+u^2','t') y=dsolve('D2y+4*Dy+29*y=0','y(0)=0,Dy(0)=15','x')[x,y,z]=dsolve('Dx=2*x-3*y+3*z','Dy=4*x-5*y+3*z','Dz=4*x-4*y+2*z','t') x=simple(x)y=simple(y) z=simple(z) [T,Y]=ode15s('vdp1000',[0 3000],[2 0]) plot(T,Y(:,1),'-')[T,Y]=ode45('rigid',[0 12],[0 1 1])plot(T,Y(:,1),'-',T,Y(:,2),'*',T,Y(:,3),'+') x0=0xf=0.99999[x,y]=ode23('eq1',[x0 xf],[0 0])Y=0:0.01:2 plot(1,Y,'g.') hold onplot(x,y(:,1),'b*') function dy=rigid(t,y) dy=zeros(3,1) dy(1)=y(2)*y(3) dy(2)=-y(1)*y(3) dy(3)=-0.51*y(1)*y(2) [t,x]=ode45('shier',[0 15],[25 2]) plot(t,x(:,1),'-',t,x(:,2),'*') figure(2) plot(x(:,1),x(:,2)) [t1,x]=ode45('shier1',[0 15],[25 2]) [t2,y]=ode45('shier2',[0 15],[25 2]) x1=x(:,1)x2=x(:,2)x3=x2./(x1+x2)y1=y(:,1)y2=y(:,2)y3=y2./(y1+y2)plot(t1,x3,'-',t2,y3,'*')function dx=shier(t,x)dx=zeros(2,1)dx(1)=x(1)*(1-0.1*x(2))dx(2)=x(2)*(-0.5+0.02*x(1))function dx=shier1(t,x)dx=zeros(2,1)dx(1)=x(1)*(0.7-0.1*x(2))dx(2)=x(2)*(-0.8+0.02*x(1))function dy=shier2(t,y)dy=zeros(2,1)dy(1)=y(1)*(0.9-0.1*y(2)) dy(2)=y(2)*(-0.6+0.02*y(1))function dy=vdp1000(t,y)dy=zeros(2,1) dy(1)=y(2) dy(2)=1000*(1-y(1)^2)*y(2)-y(1)四.心得体会通过本次Matlab的课程设计,我对Matlab基础知识有了深刻了解,了解了Matlab软件在数学建模中的使用。学会了用Matlab解简单微分方程的数值解和解析解。通过本次课程设计我还认识到了坚持和认真的重要性,虽然在任务的完成过程中遇到了很多的难题,但通过努力查阅书本和网络资料都一一解决了。本次课程设计是我受益良多,为我以后对Matlab的熟练使用打下了良好的基础。非常感谢学校安排这次课程设计。

条件如下:

特征方程式的所有根均为负实根或其实部为负的复根,即特征方程的根均在复平面的左半平面。

即闭环线拿搏性定常系统稳定的充分必要消明祥条槐行件是:系统的闭环极点均在s平面的左半部分。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12562529.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-26
下一篇2025-08-26

发表评论

登录后才能评论

评论列表(0条)

    保存