4.8  微分方程

微分方程是数值计算中常见的问题,MATLAB提供了多种函数来计算微分方程的解。

4.8.1  常微分方程

众所周知,对一些典型的常微分方程,能求解出它们的一般表达式,并用初始条件确定表达式中的任意常数。但实际中存在有这种解析解的常微分方程的范围十分狭窄,往往只局限在线性常系数微分方程(含方程组),以及少数的线性变系数方程。对于更加广泛的、非线性的一般的常微分方程,通常不存在初等函数解析解。由于实际问题求解的需要,求近似的数值解成为了解决问题的主要手段。常见的求数值解的方法有欧拉折线法、阿当姆斯法、龙格-库塔法与吉尔法等。其中由于龙格-库塔法的精度较高,计算量适中,所以使用的较广泛。

数值解的最大优点是不受方程类型的限制,即可以求任何形式常微分方程的特解(在解存在的情况下),但是求出的解只能是数值解。

1.龙格-库塔方法简介

对于一阶常微分方程的初值问题,在求解未知函数时,在点的值是已知的,并且根据高等数学中的中值定理,应有:

一般而言,在任意点,有:

当确定后,根据上述递推公式能算出未知函数在点的一列数值解:

当然在递推的过程中同样存在着一个误差累计的问题,实际计算中的递推公式一般都进行过改造,龙格-库塔公式为:

2.龙格-库塔法的实现

基于龙格-库塔法,MATLAB提供了ode系列函数求常微分方程的数值解。常用的有ode23 和ode45函数,其调用语法如下。

(1)[t,y]=ode23(filename,tspan,y0):采用了二阶、三阶龙格-库塔法进行计算。

(2)[t,y]=ode45(filename,tspan,y0):采用了四阶、五阶龙格-库塔法进行计算。

其中filename是定义f(t,y)的函数文件名,该函数文件必须返回一个列向量。tspan的形式为[t0,tf],表示求解区间。y0是初始状态列向量。t和y分别给出时间向量和相应的状态向量。

这两个函数分别采用了二阶、三阶龙格-库塔法和四阶、五阶龙格-库塔法,并采用自适应变步长的求解方法,即当解的变化较慢时采用较大的步长,从而使得计算的速度很快;当解的变化较快时步长会自动地变小,从而使得计算的精度很高。

【例4-45】  设有初值问题:

试求其数值解,并和精确解相比较,精确解为()。

首先要建立微分方程所对应的函数文件myodefun.m,文件内容如下:

function y=myodefun(t,y)

%  建立函数文件myodefun.m

y=(y^2-t-2)/(4*(t+1));

建立myodefun函数之后,就可以调用ode23函数求解微分方程。

>> t0=0;

>> tf=10;

>> y0=2;

>> [t,y]=ode23 ('myodefun',[t0,tf],y0);       %  求数值解

>> y1=sqrt(t+1)+1;                              %  求精确解

>> plot(t,y,'k.',t,y1,'r')

通过图形比较,数值解用黑色圆点表示,精确解用红色实线表示,如图4-13所示。

【例4-46】  求下面无劲度系统微分方程组的数值解。

为了求解方程,首先要建立方程的m文件。本例中不妨建立名为rigid.m的函数文件,此文件用以描述给出的方程组,文件的内容如下:

function dy = rigid(t,y)

dy = zeros(3,1);                 %  一个列向量

dy(1) = y(2) * y(3);

dy(2) = -y(1) * y(3);

dy(3) = -0.51 * y(1) * y(2);

本例中,我们通过odeset函数对误差进行控制,另外在时间[0 12]进行求解,0时刻初始条件向量为[0 1 1]。

>> options =odeset('RelTol',1e-4,'AbsTol',[1e-4 1e-4 1e-5]);%  误差控制

>> [T,Y] = ode45(@rigid,[0 12],[0 11],options);               %  求数值解

>>plot(T,Y(:,1),'-',T,Y(:,2),'-.',T,Y(:,3),'.')               %  绘制结果图

得到的结果如图4-14所示。

图4-13  常微分方程结果图

图4-14  常微分方程数值

matlab中常微分方法,MATLAB常微分方程相关推荐

  1. matlab中常微分方法,MATLAB解常微分方程组的解法(好东西要共享)

    1:问题 常微分方程的初值问题的标准数学表述为:y'=f(t,y),a<=t<=b,y(a)=y(0) :我们要求解的任何高阶常微分方程都可以用替换法化为上式所示的一阶形式,其中y为向量, ...

  2. matlab 定义string_[整理]Matlab中函数定义方法

    Matlab中函数定义方法 Matlab自定义函数的六种方法 n1.函数文件+调用函数(命令)文件:需单独定义一个自定义函数的M文件: n2.函数文件+子函数:定义一个具有多个自定义函数的M文件: n ...

  3. matlab中dist的命令,matlab dist函数

    dist--欧式距离加权函数(Euclidean distance weight function) 语法: Z = dist(W,P) df = dist('deriv') D = dist(pos ...

  4. matlab中使用ode方法解范德波尔微分方程的数值解

    微分方程的解析解要求比较严苛,只有在特定的条件下才能写出解析解表达式,而在现实的科研问题当中,绝大多数情况我们会采用数值解(numeric solution)的方法来求解微分方程.这个时候就要用到od ...

  5. MATLAB中的一些方法

    MATLAB中的一些方法 矩阵可视化,空值不显示颜色 时间序列重采样 判断是否为空值 插值 随机生成0-1矩阵 FFT变换转换成矩阵相乘 1 2 3 4 5 图片保存 记录自己常用到的一些功能,方便以 ...

  6. matlab中单独存图_[转载]matlab中保存图片的方法

    matlab中保存图片的方法 一.一种是出来图形窗口后手动保存(这儿又可以分两种): 1 直接从菜单保存,有fig,eps,jpeg,gif,png,bmp等格式. 2 edit------〉copy ...

  7. matlab中并行条件,matlab中的并行方法

    // 文件转载自: http://blog.csdn.net/abcjennifer/article/details/17610705 /// 本文讲一下matlab中的并行方法与技巧,这里我们不涉及 ...

  8. matlab中错误使用fmincon,MATLAB中fmincon 函数问题

    MATLAB中fmincon 函数问题 Matlab的fmincon优化问题 请问: 各位高手帮忙看看我的程序又什么问题?显示错误 Error in ==> Fun at 33 [w,fval] ...

  9. 背景扣除matlab_基于背景减法的目标检测在Matlab中的实现方法

    云 南 大 学 学 报 ( 自 然 科 学 版 ) , 2009, 31 ( S2) : 59 - 61 CN 53 - 1045 /N I SSN 0258 - 7971 Journa l of Y ...

  10. matlab中 三种方法计算 Ax b,在MATLAB中,方程Ax=B的解可以用哪个命令求得? matlab 求助 解方程组...

    matlab中解方程组还是很方便的,例如,对于代数方程组Ax=b(A为系数矩阵,非奇异)的求解,MATLAB中有两种方法: (1)x=inv(A)*b - 采用求逆运算解方程组: (2)x=A\B - ...

最新文章

  1. taro 如何使用dom_taro 事件处理
  2. linux系统开机报错,linux开机报错故障
  3. ARM的批量加载/存储指令
  4. php 换行替换成p,php 换行如何替换
  5. Linux中常见的环境变量笔记
  6. Spark中导入scalax
  7. 编程之美-翻烙饼Java实现
  8. 2013蓝桥杯java试题_2013年第四届蓝桥杯javaB组 试题 答案 解析
  9. 7个设计模式的基本原则
  10. Ambari安装之安装并配置Ambari-server(三)
  11. 2018.11.27 元器件选型(2)- 连接器
  12. excel宏教程_用Excel做个年会抽奖软件,老板惊呆了!
  13. LM2596电源降压调整器(150KHz,3A)020
  14. 【Java】按要求编程输出2018年日历
  15. vivado查看原理图
  16. Python使用OCR识别中英文
  17. C语言实现lagrange theorem拉格朗日定理的算法(附完整源码)
  18. 每天15min-HTML5(10)-表单(上)
  19. 重磅消息:微信支付分最新开通方法!
  20. 一个新手对软件开发的理解(写自第一个项目--Linpop之后)

热门文章

  1. 无人驾驶-控制-阿克曼模型
  2. 面经:两年半经验,面10个公司,经28轮面试,拿9个offer,涨麻了!
  3. [Java] [SurfaceView] 使用EGL
  4. TMI 202106论文汇总(IEEE Transactions on Medical Imaging)
  5. QGIS 导入图层到 PostGIS “导入某些图层失败! 图层“public“.‘xxxx‘载入失败 “
  6. matlab画条状图,使用Matlab画条形图
  7. WPS个人版如何启用VBA(宏)
  8. Ubuntu下如何使用编译使用john-1.9.0源码
  9. 前期易语言编程作品收录|DKP系统|
  10. java 条形码_Java 生成、识别条形码