解全微分方程的通解公式程

3338人阅读
数学软件(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网站的观点或立场
访问:1756447次
积分:19681
积分:19681
排名:第363名
原创:366篇
转载:17篇
译文:15篇
评论:633条
文章:22篇
阅读:30419
文章:32篇
阅读:57898
文章:11篇
阅读:77840
文章:26篇
阅读:138559
文章:31篇
阅读:134262
(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)文档分类:
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,
下载前请先预览,预览内容跟原文是一样的,在线预览图片经过高度压缩,下载原文更清晰。
您的浏览器不支持进度条
下载文档到电脑,查找使用更方便
还剩?页未读,继续阅读
播放器加载中,请稍候...
该用户其他文档
下载所得到的文件列表Matlab解微分方程(ODE+PDE).pdf
文档介绍:
常微分方程:1 ODE解算器简介(ode**)2 微分方程转换3 刚性/非刚性问题(Stiff/Nonstiff)4 隐式微分方程(IDE) 5 微分代数方程(DAE)6 延迟微分方程(DDE)7 边值问题(BVP)偏微分方程(PDEs)Matlab解法偏微分方程:1 一般偏微分方程组(PDEs)的命令行求解2特殊偏微分方程(PDEs)的PDEtool求解3陆君安《偏微分方程的MATLAB解法先来认识下常微分方程(ODE)初值问题解算器(solver)[T,Y,TE,YE,IE] = odesolver(odefun,tspan,y0,options)sxint = deval(sol,xint)Matlab中提供了以下解算器:输入参数:odefun:微分方程的Matlab语言描述函数,必须是函数句柄或者字符串,必须写成Matlab规范格式(也就是一阶显示微分方程组),这个具体在后面讲解tspan=[t0 tf]或者[t0,t1,…tf]:微分变量的范围,两者都是根据t0和tf的值自动选择步长,只是前者返回所有计算点的微分值,而后者只返回指定的点的微分值,一定要注意对于后者tspan必须严格单调,还有就是两者数据存储时使用的内存不同(明显前者多),其它没有任何本质的区别y0=[y(0),y’(0),y’’(0)…]:微分方程初值,依次输入所有状态变量的初值,什么是状态变量在后面有介绍options:微分优化参数,是一个结构体,使用odeset可以设置具体参数,详细内容查看帮助输出参数:T:时间列向量,也就是ode**计算微分方程的值的点Y:二维数组,第i列表示第i个状态变量的值,行数与T一致在求解ODE时,我们还会用到deval()函数,deval的作用就是通过结构体solution计算t对应x值,和polyval之类的很相似!参数格式如下:sol:就是上次调用ode**函数得道的结构体解xint:需要计算的点,可以是标量或者向量,但是必须在tspan范围内该函数的好处就是如果我想知道t=t0时的y值,不需要重新使用ode计算,而直接使用上次计算的得道solution就可以[教程]微分方程转换为一阶显示微分方程组方法好,上面我们把Matlab中的常微分方程(ODE)的解算器讲解的差不多了,下面我们就具体开始介绍如何使用上面的知识吧!现实总是残酷的,要得到就必须先付出,不可能所有的ODE一拿来就可以直接使用,因此,在使用ODE解算器之前,我们需要做的第一步,也是最重要的一步,借助状态变量将微分方程组化成Matlab可接受的标准形式(一阶显示常微分方程)!如果ODEs由一个或多个高阶微分方程给出,则我们应先将其变换成一阶显式常微分方程组!下面我们以两个高阶微分方程构成的ODEs为例介绍如何将之变换成一个一阶显式常微分方程组。step1.将微分方程的最高阶变量移到等式的左边,其他移到右边,并按阶次从低到高排列,假如说两个高阶微分方程最后能够显式的表达成如下所示:我们说过现实总是残酷的,有时方程偏偏是隐式的,没法写成上面的样子,不用担心Matlab早就为我们想到了,这个留在后面的隐式微分方程数值求解中再详细讲解!step2.为每一阶微分式选择状态变量,最高阶除外从上面的变换,我们注意到,ODEs中所有因变量的最高阶次之和就是需要的状态变量的个数,最高阶的微分式(比如上面的x(m)和y(n))不需要给它一个状态变量step3.根据上面选用的状态变量,写出所有状态变量的一阶微分的表达式注意到,最高阶次的微分式的表达式直接就是step1中的微分方程好,到此为止,一阶显式常微分方程组,变化顺利结束,接下来就是Matlab编程了。请记住上面的变化很重要,Matla中所有微分方程的求解都需要上面的变换。下面通过一个实例演示ODEs的转换和求解【解】真是万幸,该ODEs已经帮我们完成了step1,我们只需要完成step2和step3了(1)选择一组状态变量(2)写出所有状态变量的一阶微分表达式(4)有了数学模型描述,则可以立即写出相应的Matlab代码了(这里我们优先选择ode45) 1.x0=[1.2;0;0;-1.];%x0(i)对应与xi的初值2.options=odeset('reltol',1e-8);%该命令的另一种写法是options=options.reltol=1e-8;3.tic4.[t,y]=ode45(@appollo,[0,20],x0,options);%t是时间点,y的第i列对应xi的值,t和y的行数相同5.toc6.plot(y(:,1),y(:,3))%绘制x1和x3,也就是x和y的图形7.title('Appollo卫星运动轨迹')8.xlabel('X')9.ylabel('Y')10.11.function dx=appollo(t,x)12.mu=1/82.45;13.mustar=1-14.r1=sqrt((x(1)+mu)^2+x(3)^2);15.r2=sqrt((x(1)-mustar)^2+x(3)^2);16.dx=[x(2)17.2*x(4)+x(1)-mustar*(x(1)+mu)/r1^3-mu*(x(1)-mustar)/r2^318.x(4)19.-2*x(2)+x(3)-mustar*x(3)/r1^3-mu*x(3)/r2^3];[教程]刚性/非刚性问题(Stiff/Nonstiff)的Matlab解法在工程实践中,我们经常遇到一些ODEs,其中某些解变换缓慢,另一些变化很快,且相差悬殊的微分方程,这就是所谓的刚性问题(Stiff),对于所有解的变化相当我们则称为非刚性问题(Nonstiff)。对于刚性问题一般不适合使用ode45这类函数求解。由于非刚性问题我们使用的多比较多,我们就不多说,下面主要讲解下Stiff看一个例子,考虑下面的微分方程【解】题目中已经帮我们完成了方程组转换,下面我们就直接编程了(1)编写微分方程函数1.odefun=@(t,x)[0.04*(1-x(1))-(1-x(2))*x(1)+0.0001*(1-x(2))^22.-1e4*x(1)+3000*(1-x(2))^2];3.x0=[0 1];4.tspan=[0 100];5.options=odeset('reltol',1e-6,'abstol',1e-8);(2)对于这个刚性问题,我们先使用ode45函数试试(反正我们是没有信心等待它,太慢了) 1.[t,y]=ode45(odefun,tspan,x0,options);toc2.disp(['ode45计算的点数' num2str(length(t))])(3)换用ode15s函数试试看看1.[t2,y2]=ode15s(odefun,tspan,x0,options);toc2.disp(['ode15s计算的点数' num2str(length(t2))])(4)绘图看看结果1.figure('numbertitl1
内容来自淘豆网转载请标明出处.
浏览:56次(1)一阶微分方程的通解里含有一个任意常数,这个“任意常数”是指他的范围在(-∞,+∞)还是指他仅仅表示一部分或某个未确定的数呢?
(2)上一道题是这样的:(题目不写了)他解到了这一步:lny=(+/-)C1x=cx 然后得出了y=e^cx 而没有写成y=cx,c&0 这样是不是表示c的范围在(-∞,+∞),如果加上了c&0的范围就不表示任意常数从而不满足通解的定义了?
(3)图中的题:答案中貌似C&0?是否满足任意常数呢?
(1)微分方程通解中的“任意常数”并不是一定可以取遍实数的,也不要求它一定要取遍实数。例如通解是:y=√(Cx),当x≥0时,C只能取非负实数,当x≤0时,C只能取非正实数,这个C仍然是我们所谓的“任意常数”。需要注意的是,当C取遍它可以取的数,一定是得到了微分方程的全部解,不可以少掉一个或几个解的!
(2)问题你没有描述清楚,我只讲后半段,通解:y=(e^C)x是不可以写成y=Cx(C为任意正数)的,没有这种写法的!你写通解y=Cx,人家当然认为C&0时,y=Cx也是方程的解。
(3)图片中方程的通解10^x+10^(-y)=C是正确的,不必去注明C&0的,因为当C≤0时,方程10^x+10^(-y)=C没有解,不确定任何函数,只要C的取值使10^x+10^(-y)=C确定函数,这个函数一定是原来微分方程的解就可以了。
其他答案(共1个回答)
辅导书上更多);
(3)C的确是正数,如前所述只要任意就行。
常数的微分=0,对dC=C′*dx=0*dx=0
这个题目和根的性质有关,请看附件
A:(x^2)*y`+x*y^2=0 —— 一阶线性非齐次微分方程;
B:y`+(tany)/(x-siny)=0 ==& dx/dy+x*coty=cosy...
解:方程两边同除以X,得到一个齐次方程
y'+y/x=2√y/x
dy/dx=u+xdu/则可以...
大家还关注
确定举报此问题
举报原因(必选):
广告或垃圾信息
激进时政或意识形态话题
不雅词句或人身攻击
侵犯他人隐私
其它违法和不良信息
报告,这不是个问题
报告原因(必选):
这不是个问题
这个问题分类似乎错了
这个不是我熟悉的地区

我要回帖

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

 

随机推荐