求解线性微分方程程

 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
5-matlab求解微分方程
下载积分:800
内容提示:
文档格式:PPT|
浏览次数:1|
上传日期: 09:03:49|
文档星级:
该用户还上传了这些文档
下载文档:5-matlab求解微分方程.PPT
官方公共微信扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
求解微分方程
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口查看: 39345|回复: 100|关注: 0
matlab求解微分方程——个人总结
关注者: 1
其实不算是总结了,而是自己的初学笔记。这里是数值解法,不涉及解析解。
& && & 资料:help
建议:可以先看二楼例子。我刚开始看这一节,也是晕晕乎乎莫名其妙:D 。看的时候,至少也要把代码运行一下,亲自看看结果的结构
ODE部分--------ODE---&ordinary differential equations
先总述一下:D
1、ode的求解器ode
& && & ODE的求解器有很多,在help里可以查到。列出了每一种求解器的适应范围(stiff或者nonstiff)以及它采用的数学原理,比如Runge-Kutta,Adams,NDFs之类。(这个在数值分析课中会学到,可惜偶当时觉得很无聊,后悔中)。
& && &大家有时间多去了解了解,懂了来给大家分享分享:D 。
& && &如果不懂那么多理论,优先采用ode45,如果你发现它计算的效率特别低下或者是计算根本出不来,则考虑换ode15s。
& &&&sol是任意名字。对于怎么把要求解的方程写为function,2楼例子。所以你告诉求解器这三样东西(输入参数),它就可以为你求解出y。
& && && && && && && &&&sol = ode45(@yourfun,[tmin,tmax],[y0,y0'])
& && && && && && && && && && && && && && &你的公式& & 积分范围& & 初值
& && && && && && & sol=ode45(@vdp1,[0,20],[2,0]);
& && &把以上代码命令行里直接执行,这是matlab自带的一个例子。在workspace里你会看到多了一个变量叫sol.没错这就是求解器的返回值。它是一个1*1的结构体。双击它,你会看到它的内部组织,各个field以及它们的“形状”。每一个你都可以双击它,继续深入看它的结构。我现在关心的只有X,Y
================================================================================
2、求解计算完毕后,我们可以做什么
& && &首先,当然是得到结果。
& && &deval(sol,x,1)
& && & sol如上,写在求解等号左边的变量名字,是返回来的handles。x是一组向量,是你期望求值的点。数字1就表示你要y第一行的值(这个是在求解微分方程组的情况。不明白什么叫第一行,就去双击sol,再双击y),如果去掉1,则返回矩阵,也就是所有y的值。在matlab命令行运行以下代码:
& &&&sol=ode45(@vdp1,[0,20],[2,0]);
x=linspace(0,20,100);
y=deval(sol,x,1);
plot(x,y);
& && &此外,我们还可以扩展,matlab叫做odextend。扩展什么?
& && && &odextend(sol,odefun,tfinal)
& && & 看到最后一个变量名了吧,t_final 这样明显一点。也就是,我之前算过的微分方程组,原来算到t1,我现在要接着继续计算到新的t_final。默认以上次计算的y终值,作为此次计算的初值。
& && && &odextend(sol,odefun,tfinal,yinit)
& && &当然,如果你想重新给它赋初值,也可以加入参数yinit。(友情提示:获取上次计算的Y的终值:y=sol.y(:,end))
& && &sol=odextend(sol,@vdp1,20);
plot(sol.x,sol.y(1,:))
=====================================================================================& && &
3、求解器的参数设置& &也 就是option这个东西,既然是选项,则也可以不设置它,采用默认值。
& && &&&要设置的话,可以用odeset这个命令。怎么用?
& && & option=odeset('name1',value1,'name2',value2......) (matlab所有参数设置基本上都是这种形式)
& && && && && && &&&name自然就是属性名字。value就是你赋予它的值。求解器可以设置哪些参数,而设置了这些参数有什么影响,而这些参数应该则么设置。在命令行里输入 help odeset:D 。看到的绝对比我讲得详细。所以我不多说了。(友情提醒,如果使用ode15什么来着,可以为它设置Jacobian这个参数,以更快更准更好的求解。如何设置,不懂的话,偶过后会贴。)
& && &&&O=odeget(option,'name')
& && &&&编过GUI的话这两个命令再熟悉不过了:D
先吃饭去了,饿死了。
回来贴个例子
关注者: 1
一般问题求解nonstiff
& & &&用ode系列可以求解Y的微分方程,数值解法,得到y的数值解。可以涉及多阶微分。
& && &1、函数形式:y‘=f(t,y)& &这种我叫它显性函数
& && && && && && && && & f(t,y,y')=0&&隐函数,这种用ode15i求解
& && && && &求解器可以求解线性和隐性
& && &2、对于求解微分问题都要为其指定初值
& && && && && && & 得到:&&y'=f(t,y)
& && && && && && && && && && && & y(t0)=y0
& && && && && & 所以告诉求解器如上的f(t,y),t0,y0,就可以解出y了。
& && &3、ode只能直接求解一阶微分,那我有多级微分怎么办呢?学过现代控制理论就知道怎么处理了:D
& && && && &不学也不影响,基本上就是把 一个N阶微分方程转化为N个一阶微分方程组。
& && && && && && && && &&&比如y'''=f(t,y,y',y'')
& && && && &将y ,y' ,y''设为y1,y2,y3,那么如上的三阶就可以表示为y3的一阶方程了。
& && && && &则原来的一个三阶方程变为如下的三个一阶方程组。
& && && && && && && && &&&y1'=y2
& && && && && && && && &&&y2'=y3
& && && && && && && && &&&y3'=f(t,y1,y2,y3)
基本例子Examples: Solving Explicit ODE Problems
附:如下的二阶微分方程。
38953.jpg (2.33 KB, 下载次数: 16)
17:25 上传
& && && &&&mu=1
& &&&1,转化为一阶阵,y,y' 分别设为y1 y2
& && && && &
46453.jpg (2.48 KB, 下载次数: 21)
17:25 上传
& &&&2,写它的function&&
& &(dydt,dvp1都是随便取的代号。y1,y2则为待解y向量的元素,下面写做y(1),y(2)&&)
& && && && &&&
36718.jpg (5.9 KB, 下载次数: 21)
17:25 上传
& && && && & 附:内容如此,形式可以多样
& && && && &&&比如dydt=zeros(2,1);
& && && && && && && & dydt(1)=…… %第一个
& && && && && && && & dydt(2)=…… %第二个
& && & 3,应用求解
& && && && && && &&&
14359.jpg (3.86 KB, 下载次数: 5)
17:25 上传
& && && && & 参数解释过了。@是告诉求解器要求解谁。[0.20]是积分范围。[2;0]是Y的初始值。
& && && && && && && && && && && && &(附:func2str, str2func真是个好东西)
& && && && & 返回:
& && && && && && && &&&t是返回的一系列积分点的横坐标。
& && && && && && && &&&y是返回的一系列积分点的结果,只不过这里是列向量的形式
& && && && && && & 附:左边也可以写为 suibian 一个符号。看返回什么,你可以只敲上面这一行在matlab命令行里运行。在workspace里双击你设置的变量。查看结果。
& && &&&另外,查看结果
& && && && && && &&&这里引用结果 y(:,1) & &注意与sol.y的引用区别& &&&
& && && && && && &&&
56500.jpg (34.71 KB, 下载次数: 27)
17:46 上传
& && && & 看到它怎么打mu这个字母了吧?help里有关于这种特殊的字符或者样式的表。忘记在哪里了,我以后找找。:L
本例完& &隐式的以后再说:D
[ 本帖最后由 柚籽 于
19:39 编辑 ]
关注者: 1
& && &简单的说就是你用ode45求解发现速度很慢或者解不出来的时候。有些书上把它翻译成刚性。我的理解是,梯度会发生剧变。
例2& & 以上的例子是将mu设置为1,用ode45求解顺顺当当,然后你再把mu改为1000,同样的步骤求解,试试看?
& && && &我是试过了,半天没反应(也可能是我电脑配置不够)。
& && &&&matlab称,ode45适用于求解一些nonstiff的问题。当用这类专求解nonstiff的求解器来求stiff问题时,就会非常低效。此时,则采用ode15s求解器。一下代码可以直接运行,vdp1000内置。可以试试把ode15s改为ode45[t,y] = ode15s(@vdp0],[2; 0]);
plot(t,y(:,1),'-');
title('Solution of van der Pol Equation, \mu = 1000');
xlabel('time t');
ylabel('solution y_1');复制代码附vdp1000的函数function dydt = vdp1000(t,y)
dydt = [y(2); 1000*(1-y(1)^2)*y(2)-y(1)];复制代码
可以对比这个例子和上一个例子的图形。====================================================================================
例三&&参数化方程
& && & 如果我的mu是作为一组变化的参数,要求解这一系列的微分方程,怎么办呢?一个方便的方法就是建一个function,将mu作为输入的参数,而ode求解器作为内置函数。so,
& && && &&&
19828.jpg (26.25 KB, 下载次数: 16)
19:40 上传
& && & 查看指定点的结果比如:
& && && && & x=1:5
& && && & deval(sol,x)&&(这个sol同上上上,要是ode函数的返回handles)
附:关于为ode15s &&的Jacobian 参数的设置
& && & 为了更块更好更准的求解,可以设置option的 Jacobian项。示例如下:
& && && && && && &option=odeset('Jacobian',@J);& &%生成option选项,J是你的雅可比式
& && && && && &&&[t,y]=ode15s(@f,tspan,yo,option);%向求解去输入option。别的参数同上上上
------------------------
& && && && && & function dfdy=J(t,y)
& && && && && && && && && &dfdy=[........
以上内容,命令行里输入edit vdpode复制代码总述完毕
[ 本帖最后由 柚籽 于
20:00 编辑 ]
关注者: 1
关于隐式微分方程的解法
& &&&形式如
& && && && && && && && && && && && && && && && && && && && && && && & f(t,y,y')=0
& & 使用ode15i求解器
& && && && && && && && && && && && && && && && & [t,y]=ode15i(yourfun,tspan,y0,yp0,options)
& &&&yourfun-----&@你的函数名& &&&tspan-----&积分上下限,形式:[t0,tf]
& &&&y0-----&y的初值& && && && && && && & yp0---------&y'的初值& && && && && &option& &同上上,一些求解参数设置
& &&&附:输入的初始值,要能满足方程f(t0,y0,yt0)=0.
& && &但是这种有条件的初值怎么设呢?例子
41250.jpg (3.32 KB, 下载次数: 3)
17:41 上传
它的function:
& && && && && &function res = weissinger(t,y,yp)
& && && && && &res = t*y^2 * yp^3 - y^3 * yp^2 + t*(t^2 + 1)*yp - t^2 *
求初始条件:
41296.jpg (3.32 KB, 下载次数: 5)
17:41 上传
%先合理假设初值y0,yp0
55734.jpg (4.5 KB, 下载次数: 7)
17:41 上传
然后用这个公式,求出符合条件的y0,p0.
53093.jpg (4.71 KB, 下载次数: 2)
17:41 上传
呵呵,这么多,真长见识了,我平时只用到求解线性微分方程,也不用求图形解,一个dsolve函数就可以了,不知道釉籽有没尝试过,还是很简单的
关注者: 1
:loveliness: 有时候要解的方程蛮复杂,符号解不出来,就只好用数值解法了。我也是要用才刚学它。
看过很有启发
你好看过了你的方法很有启发。不过不知道可以不可以请教个问题就是解个2阶微分方程~~如果可以请加QQ: 谢谢谢谢~~~:handshake :handshake :handshake
非常感谢!!!
很多不懂的东西都得到解决了!!:victory:
很实用,收到很大的启发,谢谢
然后慢慢看:victory:
Powered by求解微分方程dy/dx = -(y/x) (2x^3 - y^3)/(2y^3 - x^3)_百度作业帮
求解微分方程dy/dx = -(y/x) (2x^3 - y^3)/(2y^3 - x^3)
接:设y=xt,则dy/dx=t+xdt/dx代入原方程,得t+xdt/dx=-t(2-t³)/(2t³-1)==>xdt/dx=t(t³+1)/(1-2t³)==>(1-2t³)dt/[t(t³+1)]=dx/x==>[1/t-1/(t+1)-(2t-1)/(t²-t+1)]dt=dx/x==>∫dt/t-∫d(t+1)/(t+1)-∫d(t²-t+1)/(t²-t+1)=∫dx/x==>ln│t│-ln│t+1│-ln│t²-t+1│=ln│x│+ln│C│ (C是积分常数)==>ln│t/[(t+1)(t²-t+1)]│=ln│Cx│==>t/[(t+1)(t²-t+1)=Cx==>(y/x)/[(y/x+1)(y²/x²-y/x+1)]=Cx==>x²y/[(y+x)(y²-xy+x²)]=Cx==>xy/(x³+y³)=C==>xy=C(x³+y³)故原方程的通解是xy=C(x³+y³) (C是积分常数).
令z=y/x换元解出z(x)
谢谢。我有这么尝试,不过还是没能成功。如何解出z呢?
换元后成为x*dz/dx=f(z) 的形式就可以分离变量了吧}

我要回帖

更多关于 线性微分方程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信