求解求解二阶微分方程程

您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
第8章_常微分方程数值解.ppt 37页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
需要金币:100 &&
你可能关注的文档:
··········
········
*结束8.4.2高阶常微分方程以两阶常微方程为例:则可令z=y′,化为一阶方程组求解:然后套用前面的各解法即可解决.微分方程的求解问题一、常微分方程(组)的符号解:dsolve[y1,y2,…]=dsolve('eqn1',‘eqn2',…,'var1','var2',…,'inition','disp_var1','disp_var2'…)参数说明:'eqn1','eqn2',…:包含微分方程(组)在内的字符串,可以是函数名或是微分方程(组)的表达式;每个'eqn_i'可以包含一个或多个微分方程。'var1','var2',…:指定方程组中独立的变量(若方程组中有多个符号,要指定某个符号为未知变量符号);'inition':微分方程的初始条件(组),或者是初始条件的表达式。如:‘y(a)=b’表示,‘D3y(c)=d’表示例求通解(1)y''+3y'+2y=0(2)解:&&equ_1='D2y+3*Dy+2*y=0'&&equ_41='Dx=y+x'&&equ_42='Dy=y-x+1'&&y1=dsolve(equ_1,'x')&&[x,y]=dsolve(equ_41,equ_42,'x(0)=0,y(0)=0')二、常微分方程(组)的数值解:odeXX[t,y]=odeXX('F',tspan,y0)参数说明:XX可为45或者为23,F是函数名。tspan为自变量t的积分范围,y0为方程的初始状态值。例:把高阶(3阶)方程转化为同解的一阶导数方程组,写成函数文件,并在时间段[0,120]内求解。解:设则原方程等价于方程组:令y(1)=,y(2)=y(3)=,1.写成函数文件为:functiony=my_fun(t,y)y=[y(2);y(3);-2*y(3)-3*y(2)-4*y(1)]2.保存于文件:my_fun.m3.调用函数odeXX求解。y0=[10;9;8];%定解条件[t,y]=ode23('my_fun',[0,120],y0);plot(t,y(:,1))%y的第一列为方程的解xlabel('time')ylabel('y=y(t)')计算方法课件*结束第8章常微分方程的数值解科学研究和工程技术中的问题往往归结为求某个常微分方程的定解问题。很多常微分方程的定解虽然存在,但可能十分复杂难于计算,也可能不能用简单的初等函数表示,因此常求其能满足精度要求的近似解。常微分方程的数值解法常用来求近似解,它提供的算法能通过计算机便捷地实现。*结束本章主要讨论一阶常微方程的初值问题:其中f(x,y)是已知函数,(2)是定解条件。常微分方程的数值解:求y(x)在求解区间[a,b]上剖分点列x1,x2,…,xn的数值解y1,y2,…,yn,将其作为y(xi)的近似值。*结束§8.1欧拉(Euler)公式对问题最简单而直观的方法是欧拉方法。欧拉方法在精度要求不高时,仍不失为一实用方法。8.1.1基于差商的Euler公式把区间[a,b]分为n个小区间,取步长h=(b-a)/n,节点xi=x0+ih,i=0,1,2,…,n,其中x0=a,又设y(x)为上述问题的解。向前差商:1.用向前差商近似又得设y(x1)的近似值y1,则Euler向前公式:*Euler显式公式如图,过点(x0,y0)的曲线是解y(x)。欧拉方法是在(x0,y0)作y(x)的切线,它与直线x=x1交于(x1,y1),过(x1,y1)作过此点的积分曲线的切线,又与x=x2交于(x2,y2),…如此下去,得到一条折线,欧拉方法就是用这条折线近似地代替曲线y(x),故欧拉方法有时也称欧拉折线法.2.Euler方法的几何意义*向后差商:3.用向后差商近似又得设y(x1)的近似值y1,则Euler向前公式:*Euler隐式公式*例:假定某公司的净资产因资产本身产生了利息而以4%的年利率增长,同时,该公司以每年100万的数额支付职工工资。净资产的微分方程为:(t以年为单位)用Euler公式预测公司24年后的净资产趋势。分别以初始值解:Euler向前公式,取步长h=1,分别取w0=00代入即可。Euler向后公式,取步长h=1,分别取w0=00代入即可。Euler向后公式的迭代算法退出条件:*中心差商:4.用中心差商近似又得设y(x2)的近似值y2,则Euler中心差商公式:*8.1.2Euler公式的收敛性1.局部截断误差对y(xn+1)在xn作Taylor展开则Euler向前公式的截断误差为:2.整体截断误差(略)**8.1.3基于数值积分的近似公式1.用矩形近似积分公式计算左矩形:右矩形:分别得到Euler向前和向后公式。2.用梯形近似积分公式计算梯形积分:得
正在加载中,请稍后...【图片】用数值方法求解微分方程组【matlab吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:165,475贴子:
用数值方法求解微分方程组收藏
一楼留空——
免费下载官方MATLAB中文试用版,让工程师和科学家更高效地进行科学计算.
本楼主要讲解简单的Matlab解初值问题的方法,利用odesolver来进行求解。
在区间[x(n),x(n+1)]内预测r个点处的斜率然后将它们加权平均作为平均斜率的近似值,即构造出更高精度的计算公式。这就是龙格—库塔法的基本思想。
如果在一个过程中的快变量过程与慢变量过程的变化速度相差非常大,在数学上称这种过程具有刚性(个人理解是对参数变化的敏感程度)。描述这宗过程的微分方程组称为刚性方程组。也称为病态方程组或坏条件方程组。否则称之为非刚性方程组。对于一阶常系数线性微分方程组若其雅克比矩阵A的特征值相差十分悬殊,称此微分方程组是刚性的。
odesolver 简要介绍odeij 问题类型 精度 适用对象 ode45 非刚性 中度 多数情况优先适用,但不能用来解决刚性问题 ode113 非刚性 低到高 不能解决刚性问题,当误差容限要求严格时,效果较ode45好 ode23 非刚性 较低 用来解决刚性问题,或允许误差范围较宽的问题。 ode15s 刚性 低到高 可用来解决刚性问题,当采用ode45失败或效果很差时,可考虑采用。 ode23s 刚性 低 可用来解决刚性问题,误差容限较宽时效果较ode15s好。 ode23tb 刚性 低 可用来解决刚性问题,误差容限较宽时效果较ode15s好。 ode23t 适度刚性 低 可用来解决刚性问题,但要求无数值衰减 ode23,ode45等库函数主要采用自适应龙格库塔方法。其中ode23系列采用二阶、三阶龙格库塔方法,ode45系列采用四阶、五阶龙格库塔方法。一般ode45积分段少,运算速度更快
格式调用:1.
[T, Y] = odeij ( @odefun,tspan, y0)2.
[T, Y] = odeij ( @odefun,tspan, y0, options )3.
[T, Y] = odeij ( @odefun,tspan, y0, options, P1, P2, … )输入量:
odefun是待解的微分方程组中函数f( t, y )写成m函数的文件名。
tspan = [t0 tfinal]是积分区间。其中t0、tfinal分别为自变量的初值与终值。如果要求输出在指定点t=t0, t1, t2, …的微分方程数值解y=y0, y1, y2, …则输入tspan = [ t0 t1 t2 … ];等步长用t=t0 : k : tfinal。
t的步长由系统自动选取
options是用来设置可选参数的。一般设置:RelTol相对误差(default = 1e-3)与AbsTol绝对误差(default = 1e-6)options =odeset()…P1, P2, …的作用是将附加参数P1、P2…传递给ode文件(如odefun( t,y,P1, P2…))和在options中的所有函数。如果没有options参数设置,则用options=[]代替,以便正确传递函数。如果tspan或y0没有定义,则odeij函数调用ode文件,令[tspan, y0, options] = ODEFUN ( [], [],’init’ )来获得参数,甚至调用参数列表中末尾的没有的参数。
举一个最简单的例子
精确解:y=dsolve('Dy-f(x,y)=0','y(x0)=y0','x')数值解:1. 编写文件funfcn.mfunction f = funfcn( x, y )f = f( x, y )2. 保存,并运行options = odeset( ‘Reltol’, …, ‘AbsTol’, … )或options= options.RelTol=…; options.AbsTol=…;[ t, y ] = ode23( @funfcn, [a,
b], y0,options )
对于多阶微分方程精确解[y,z]=dsolve('Dy-f(x,y,z)=0','Dz-g(x,y,z)=0','y(x0)=y0','z(x0)=z0',x)
数值解:1. 编写文件funfcn.mfunction f = funfcn( x, y )f(1) = f( x, y ,z)f(2) = g(x,y,z)2. 保存,并运行options = odeset( ‘Reltol’, …, ‘AbsTol’, … )或options= options.RelTol=…; options.AbsTol=…;[ t, y ] = ode23( @funfcn, [a, b], [y0,z0],options )
股票行情查询一览,高效率选股,盘前预测,盘中提示买卖点,今日涨停板,跟着炒股大师,抓准买卖时机!
ode函数在控制领域中应用广泛,主要是一些微分方程难以求解,同时工程上,数值的意义远大于表达式的意义。
简要介绍一下ode函数调用自定义函数,自定义函数建立的方法。
例如 function dx = fun(t,x)dx表示x的导数,它被表示在等式左侧再建立dx表达式。例如针对第一个微分方程为可以建立dx(1)=4*x(1)-2*x(1)*x(2)第二个可以建立dx(2)=x(1)*x(2)-3*x(2)这里可以看到,x(1)即为x,dx(1)为dx,x(2)即为y,dx(2)即为dy。也可以直接建立dx = [4*x(1)-2*x(1)*x(2);x(1)*x(2)-3*x(2)];
在Command window中就可以使用[t,x]=ode45('fun',[0,tfinal],x0)%取tfinal=100,x0=[2,3]对于两个变量x和y,还可以绘出相平面曲线plot(x(:,1),x(:,2))
换一个复杂一点的其中含有参量Param。
这个时候就需要第三个调用格式来传递参数了。建立function x_dot=fun(t,x,flag,alpha,beta,lambda,a,b)x_dot=[alpha*(x(2)-x(1)-(b*x(1)+(a-b)/2*(abs(x(1)+1)-abs(x(1)-1))));
x(1)-x(2)+x(3);
-beta*x(2)-lambda*x(3)];
或fun=inline(['[alpha*(x(2)-x(1)-(b*x(1)+(a-b)/2*(abs(x(1)+1)-abs(x(1)-1))));',...
'x(1)-x(2)+x(3);-beta*x(2)-lambda*x(3)]'],'t','x','flag','alpha','beta','lambda','a','b');t_final=0.15;x0=[-2...881090];alpha=15;beta=20;lambda=0.5;a=-120/7;b=-75/7 其中inline函数也可以建立自定义函数,语法类似,这里不再讲述。输入[t,x]=ode45('fun',[t0,tfinal],x0,[],alpha,beta,lambda,a,b) 绘出图像:plot(t,x);axis([0,.15,-1e5,1e5]) 绘出相空间曲线 plot3(x(:,1),x(:,2),x(:,3));
以上可以看出,当微分方程形式为时,建立function函数x_dot,参数包括t:自变量x:因变量flag:用于占位,可能可以省略吧,忘了PARAM 1,PARAM 2,PARAM 3,… :方程组中的附加参数,可以方便的在不改变m文件的情况下,调整各个参数值。 建立的列矩阵x_dot每行为对应单个方程右端的式子,其中变量由向量替换 同样,function的m文件也可由inline函数创建,规则如例中所示。
高阶微分方程组的求解学过差分方程的都知道,高阶微分方程可以转换为微分方程组的形式。
对于问题是一个高阶常微分方程,解法如下: 微分方程
隐式微分方程可以用ode15i来求解。具体看帮助文件。找个时间举一个具体的例子
楼主,你太好了,我用你的方法终于解决了我的作业,顺便说一句,那个flag是不能省略的
楼主申请当吧主吧~~~
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或【图文】求解微分方程_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
求解微分方程
上传于|0|0|文档简介
&&求解微分方程的常用方法
大小:876.50KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢

我要回帖

更多关于 求微分方程的通解例题 的文章

 

随机推荐