求解一阶齐次微分方程求解程

君,已阅读到文档的结尾了呢~~
,将代回,得原方程的通解:,即. 例5.求微分方程满足的特解. 解:~~齐次微分方程,代换,,,~~可分离变量的微分...求解某些微分方程时,需要特别注意. 例4.设是微分方程的一个解,求此微分方程满足初始条件的特解. 解:将代入方程,...
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
求微分方程的通解
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口各种类型的微分方程及其相应解法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
各种类型的微分方程及其相应解法
上传于|0|0|暂无简介
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩1页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢3627人阅读
数学软件(34)
本文最初写于
于 sohu 博客,这次博客搬家一起搬到这里来。
版权所有,转载请注明出处。
含带导数符号或带微分符号的未知函数的方程称为微分方程。
如果在微分方程中未知函数是一个变元的函数,这样的微分方程称为常微分方程。
1 一阶、二阶常微分方程的通解
Maxima 可以求解很多种类的常微分方程。
对于可以给出闭式解的一阶和二阶常微分方程,Maxima 会试图求出其精确解。
下面给出三个简单的例子。
eq1:'diff(y,x)+y=x;
sol1:ode2(eq1,y,x);
eq2:'diff(y,x,2)+y=sin(3*x);
sol2:ode2(eq2,y,x);
eq3:'diff(y,x,3)+y=0;
sol3:ode2(eq3,y,x);
上面的例子用了ode2函数来求解常微分方程。
在定义方程时,微分函数diff之前有一个单引号(‘),这表示让Maxima只给出形式上的输出,并不真的进行计算。
这是因为我们这里只要列出方程,并不想让Maxima真的求导。
sol1 中的%c 和 sol2 中的 %k1 %k2 是任意常数。
ode2函数只能求解一阶和二阶常微分方程,第三个例子给出的是一个三阶常微分方程,无法求解,因此输出 false。
2 初值问题
函数ic1 (solution, xval, yval)和ic2 (solution, xval, yval, dval)分别用来解一阶和二阶微分方程的初值问题,其中solution是用ode2解得的通解,xval和yval分别是自变量和因变
量的初值,dval是因变量一阶导数的初值。
ic1(sol1,x=0,y=1);
ic2(sol2,x=0,y=1,'diff(y,x)=-1);
3 边值问题
函数bc2 (solution, xval_1, yval_1, xval_2, yval_2)用来求解二阶微分方程的边值问题,
其中solution是ode2解得的通解,xval_1、yval_1、xval_2和yval_2分别为自变量和因变量在第一点和第二点的取值。
eq4:'diff(y,x,2)+diff(y,x)/2+3*y=0;
sol4:ode2(eq4,y,x);
bc2(sol4,x=0,y=1,x=5,y=-1);
4 利用Laplace变换法求解常微分方程(组)
如果待求解的常微分方程(组)是线性常系数的。则可以利用Laplace变换法来求解。
Maxima 中也提供了相应的求解函数 desolve(),desolve()函数既可以求解ODE 方程,也可以求解ODE方程组。函数的基本形式如下。
desolve (eqn, y)
desolve ([eqn_1, ..., eqn_n], [y_1, ..., y_n])
这里待解函数不能只写变量名(例如y),而需要明确写出对自变量的依赖关系(例如y(x))。
下面是一个简单的例子:
kill(all);
eq5:'diff(y(x),x,3)+y(x)=0;
desolve(eq5,y(x));
如果初值是已知的,可以使用atvalue()命令来提供初值。
如果提供了足够的初值条件,再用的desolve()函数求解时积分常数自然就可以确定了。
atvalue(y(x),x=0,1);
desolve(eq5,y(x));
atvalue('diff(y(x),x),x=0,-1);
desolve(eq5,y(x));
atvalue('diff(y(x),x,2),x=0,0);
desolve(eq5,y(x));
下面给出一个常微分方程组求解的例子。
kill(all);
eq6:'diff(f(x),x,2)+'diff(g(x),x)+3*f(x)=15*exp(-x);
eq7:'diff(g(x),x,2)-4*'diff(f(x),x)+3*g(x)=16*sin(x);
ode_syst:[eq6,eq7];
atvalue(f(x),x=0,35);
atvalue('diff(f(x),x),x=0,-48);
atvalue(g(x),x=0,27);
atvalue('diff(g(x),x),x=0,-55);
desolve(ode_syst,[f(x),g(x)]);
下面是试验部分。
kill(all);
eq1:'diff(y(x),x)+y(x)=x;
sol1:desolve(eq1,y(x));
atvalue(y(x),x=1,1);
desolve(eq1,y(x));
ic1(y=(%c+1)*exp(-x)+x-1,x=1,y(x)=1);
说明 desolve 函数提供的初值必须是x=0 处的。
ic1 不能用来直接求解 desolve 函数的结果。必须要人为的处理一下结果的形式。这一点上确实不方便。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1975156次
积分:21190
积分:21190
排名:第335名
原创:379篇
转载:17篇
译文:15篇
评论:672条
文章:22篇
阅读:34410
文章:32篇
阅读:62078
文章:11篇
阅读:95626
文章:29篇
阅读:165068
文章:31篇
阅读:146034
(4)(5)(1)(5)(8)(5)(4)(7)(2)(7)(7)(9)(15)(9)(22)(21)(5)(7)(4)(6)(3)(5)(4)(5)(6)(4)(2)(1)(9)(4)(4)(7)(6)(2)(3)(4)(9)(8)(2)(3)(8)(2)(6)(2)(3)(3)(4)(8)(4)(4)(14)(1)(10)(6)(2)(6)(13)(17)(11)(19)(24)查看: 95294|回复: 113|关注: 0
matlab求解微分方程——个人总结
Simulink 基础讨论版块优秀回答者
关注者: 169
其实不算是总结了,而是自己的初学笔记。这里是数值解法,不涉及解析解。
& && & 资料: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
先吃饭去了,饿死了。
回来贴个例子
单凭文字有歧义,上代码,上截图,上模型
微信: Simulink
Simulink 基础讨论版块优秀回答者
关注者: 169
一般问题求解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, 下载次数: 622)
17:25 上传
& && && &&&mu=1
& &&&1,转化为一阶阵,y,y' 分别设为y1 y2
& && && && &
46453.jpg (2.48 KB, 下载次数: 2686)
17:25 上传
& &&&2,写它的function&&
& &(dydt,dvp1都是随便取的代号。y1,y2则为待解y向量的元素,下面写做y(1),y(2)&&)
& && && && &&&
36718.jpg (5.9 KB, 下载次数: 2759)
17:25 上传
& && && && & 附:内容如此,形式可以多样
& && && && &&&比如dydt=zeros(2,1);
& && && && && && && & dydt(1)=…… %第一个
& && && && && && && & dydt(2)=…… %第二个
& && & 3,应用求解
& && && && && && &&&
14359.jpg (3.86 KB, 下载次数: 31)
17:25 上传
& && && && & 参数解释过了。@是告诉求解器要求解谁。[0.20]是积分范围。[2;0]是Y的初始值。
& && && && && && && && && && && && &(附:func2str, str2func真是个好东西)
& && && && & 返回:
& && && && && && && &&&t是返回的一系列积分点的横坐标。
& && && && && && && &&&y是返回的一系列积分点的结果,只不过这里是列向量的形式
& && && && && && & 附:左边也可以写为 suibian 一个符号。看返回什么,你可以只敲上面这一行在matlab命令行里运行。在workspace里双击你设置的变量。查看结果。
& && &&&另外,查看结果
& && && && && && &&&这里引用结果 y(:,1) & &注意与sol.y的引用区别& &&&
& && && && && && &&&
56500.jpg (34.71 KB, 下载次数: 3171)
17:46 上传
& && && & 看到它怎么打mu这个字母了吧?help里有关于这种特殊的字符或者样式的表。忘记在哪里了,我以后找找。:L
本例完& &隐式的以后再说:D
[ 本帖最后由 柚籽 于
19:39 编辑 ]
单凭文字有歧义,上代码,上截图,上模型
微信: Simulink
Simulink 基础讨论版块优秀回答者
关注者: 169
& && &简单的说就是你用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, 下载次数: 693)
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 编辑 ]
单凭文字有歧义,上代码,上截图,上模型
微信: Simulink
Simulink 基础讨论版块优秀回答者
关注者: 169
关于隐式微分方程的解法
& &&&形式如
& && && && && && && && && && && && && && && && && && && && && && && & 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, 下载次数: 14)
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, 下载次数: 25)
17:41 上传
%先合理假设初值y0,yp0
55734.jpg (4.5 KB, 下载次数: 298)
17:41 上传
然后用这个公式,求出符合条件的y0,p0.
53093.jpg (4.71 KB, 下载次数: 298)
17:41 上传
单凭文字有歧义,上代码,上截图,上模型
微信: Simulink
<h1 style="color:# 麦片财富积分
入门, 积分 52, 距离下一级还需 448 积分
关注者: 18
呵呵,这么多,真长见识了,我平时只用到求解线性微分方程,也不用求图形解,一个dsolve函数就可以了,不知道釉籽有没尝试过,还是很简单的
Simulink 基础讨论版块优秀回答者
关注者: 169
:loveliness: 有时候要解的方程蛮复杂,符号解不出来,就只好用数值解法了。我也是要用才刚学它。
单凭文字有歧义,上代码,上截图,上模型
微信: Simulink
<h1 style="color:# 麦片财富积分
看过很有启发
你好看过了你的方法很有启发。不过不知道可以不可以请教个问题就是解个2阶微分方程~~如果可以请加QQ: 谢谢谢谢~~~:handshake :handshake :handshake
<h1 style="color:# 麦片财富积分
非常感谢!!!
很多不懂的东西都得到解决了!!:victory:
<h1 style="color:# 麦片财富积分
很实用,收到很大的启发,谢谢
<h1 style="color:# 麦片财富积分
然后慢慢看:victory:
站长推荐 /2
利用MATLAB进行传感器数据分析
MATLAB中文论坛是全球最大的 MATLAB & Simulink 中文社区。用户免费注册会员后,即可下载代码,讨论问题,请教资深用户及结识书籍作者。立即注册加入我们吧!
MATLAB官方社交平台
MATLAB中文论坛微社区

我要回帖

更多关于 如何求微分方程的通解 的文章

 

随机推荐