第一范文网 - 专业文章范例文档资料分享平台

Matlab解微分方程(ODE+PDE)

来源:用户分享 时间:2025/7/16 5:00:36 本文由闂佸搫顦壕顓㈠礉閿燂拷 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

常微分方程:

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. 2. 3. 4. 5. 6. 7. 8. 9.

x0=[1.2;0;0;-1.04935751];%x0(i)对应与xi的初值

options=odeset('reltol',1e-8);%该命令的另一种写法是options=odeset;options.reltol=1e-8; tic

[t,y]=ode45(@appollo,[0,20],x0,options);%t是时间点,y的第i列对应xi的值,t和y的行数相同 toc

plot(y(:,1),y(:,3))%绘制x1和x3,也就是x和y的图形 title('Appollo卫星运动轨迹') xlabel('X') ylabel('Y')

10.

11. function dx=appollo(t,x) 12. mu=1/82.45; 13. mustar=1-mu;

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^3 18. x(4)

19. -2*x(2)+x(3)-mustar*x(3)/r1^3-mu*x(3)/r2^3];

搜索更多关于: Matlab解微分方程(ODE+PDE) 的文档
Matlab解微分方程(ODE+PDE).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c4lwr70m3a26k2tg1y0um_1.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top