今天说一说MATLAB中ode23函数的原理,在网上看了好多,但是不知道是怎么计算的,就知道是那么用的,但是最后结果咋回事不知道,今天来讲一讲是怎么计算的。

首先来个程序:

function f=eg6fun(t,y)
f=-y^3-2;
end

上面是我定义的一个函数,看着挺简单的哈!不多说了。

[t,y]=ode23(@eg6fun,[0,30],1);

这句话是我用ode23调用的语句,先说一下,这里eg6fun是我上面函数的名称,也就是ode23主要计算的就是这个函数的微分。[0,30]为t的范围,这里t没有什么太大的作用,只是为了计算步长用的,之后我把运行后的t和y数据粘在这里,我们发现,在MATLAB中步长并不是固定的。这里应该是用一个什么函数求得,我没查,感兴趣的自己查一下。1为y的初值,也就是我们常常说的y0。

先粘上实验结果,我们在分析怎么来的:

下面的是t的值,这里MATLAB将t在[0,30]区间分成了67份,我这里只粘了一部分:

0
0.0266666666666667
0.0974376132058027
0.178185989598692
0.270160382755732
下面是y的结果,y最后也是一个[1,67]的矩阵:

1
0.922959859735161
0.740501273051361
0.556672216994644
0.363414446549133

下面我们来说是怎么计算的吧!看下面的图,这个是我在数值分析书上照的,其实ode23就是龙格库塔函数的应用,而龙格库塔函数就是根据欧拉法得来的,看下图:

上面图片中有三个公式,第一个公式h后面括号中的内容就是要求积分的函数,就是我们程序中的eg6fun。那么就好办了,把图中公式中的括号中的内容换成我们的公式也就是

-y^3-2

然后计算就好了。这里h为步长,也就是我们程序中t的步长,我们可以看到第一次t为0.0266666666666667,而下一次的步长为0.0974376132058027-0.0266666666666667,只要这么一步一步计算就好了。

(这里看图中黑色笔手写的公式)

这里计算一步来表示计算的大概过程:

例如: (1)计算Yp=y1+h * (-y1^3 - 2) = 1 - 0.027*3 = 0.919

(2)       Yc=y1+h * (-Yp^3 - 2) = 1 - 0.027*(0.919^3 - 2) = 0.925

(3)        Y(n+1) = 1/2 * (Yp + Yc) = 1/2 * (0.919 + 0.925) = 0.922

因为这里我们保留精度为3位小数,可能计算的有些误差。还有一点需要注意,龙格库塔函数是对欧拉方法进行的改进,其实龙格库塔函数的精度要比欧拉方法更高。因此这里计算有些许误差。但是大概的过程就是这样的。

上面的内容是之前写的,讲解的是欧拉算法计算微分的过程,其实龙格-库塔方法后来在书中看到,下面介绍一下龙格库塔方法:

MATLAB中的ode23就是用的二阶的龙格库塔方法,就是图中3.6的三个公式,这里h为步长,上面给出的t,c1和c2是系数,这个系数取值不是固定的,MATLAB中是啥我也不是确定,但是书中最后给的是c1=0,c2=1,λ2和μ21取值1/2。这样一来,计算一波:y1=1;求y2,将y1带入公式中的yn,这里没有x,所以有x的项可以忽略

k1=-3;

k2=f(1-(1/2)*0.0267*3)=f(0.96)=-2.88

y2=1-0.0267*2.88=0.923

y2求出,其余的过程都是这样求得。ode45是四阶龙格库塔函数,下图为4阶求法,这里不再做介绍:

到此MATLAB中ode23的计算方法已经讲解完了,当然,ode45跟这个应该类似,就是ode45比ode23更精确一点,在MATLAB中,如果我们用ode45会发现,t在[0,30]间分成了167份,很明显精度提高了。其实MATLAB中有好多的函数都是用到了数值分析中的内容,而数值分析就是用我们的笨方法来计算数值的一种工具,这是我自己定义的哈,通过减少误差来使计算出来的数据更准确。

MATLAB中ode23函数,龙格库塔函数相关推荐

  1. matlab中load seamout,matlab中的save与load函数

    matlab中的save与load函数 用save函数,可以将工作空间的变量保存成txt文件或mat文件等. 比如: save peng.mat p j 就是将工作空间中的p和j变量保存在peng.m ...

  2. 邹检验 matlab,科学网—Matlab中一个很有用的函数:regionprops - 邹兴文的博文

    Matlab中一个很有用的函数:regionprops 已有 6712 次阅读 2010-1-30 22:52 |个人分类:开发经验|系统分类:科研笔记| 有用的函数, regionprops Mat ...

  3. 函数调用matlab,Matlab中一个函数调用另外一个函数的操作方法

    这篇文章为各位带来的内容是Matlab中一个函数调用另外一个函数相关的,对此感兴趣的用户可以去下文看看Matlab中一个函数调用另外一个函数的操作教程. Matlab中一个函数调用另外一个函数的操作方 ...

  4. matlab怎么调用主函数,Matlab中一个函数调用另外一个函数的操作步骤

    原创Matlab中一个函数调用另外一个函数的操作步骤 编辑:小安 来源:PC下载网时间:2019-11-18 13:27:35 最近很多伙伴才刚刚安装入手Matlab这款软件,而本节就重点介绍了关于M ...

  5. Matlab中用于数据预测spline()函数的使用

    Matlab中用于数据预测spline()函数的使用 ​ 再matlab中spline函数是利用三次方样条数据插值 语法 s = spline(x,y,xq) pp = spline(x,y) s = ...

  6. Matlab中产生正态分布随机数的函数normrnd-----用来产生高斯随机矩阵

     Matlab中产生正态分布随机数的函数normrnd-----用来产生高斯随机矩阵 功能:生成服从正态分布的随机数 语法: R=normrnd(MU,SIGMA) R=normrnd(MU,SI ...

  7. Matlab中print, fprint, fscanf, disp函数的用法

    最近一直在用python,导致学习的一些函数就有点混淆,趁着这会儿看代码,就再回顾下Matlab中print, fprint, fscanf, disp函数的用法 一.print() 函数可以把函数图 ...

  8. 常见的数值积分方法_欧拉积分/中值积分/龙格-库塔积分

    参考:常见的数值积分方法 (欧拉.中值.龙格-库塔,[常用于IMU中]) 1. 积分基本概念 设F(x)为函数f(x)的一个原函数,我们把函数f(x)的所有原函数F(x)+C(C为任意常数)叫做函数f ...

  9. matlab中nabisect函数,数值分析在MATLAB中的实现(M函数文件)

    学习数值分析过程中编写的各章中涉及的方法的M函数相互交流,如有错误请多指教部分内容如下:(na--numerical analysis)数据建模:nalagr--拉格朗日插值naspline--三阶样 ...

最新文章

  1. Java多线程复习:5(sleep、yield方法和线程优先级)
  2. 读《实战 GUI 产品的自动化测试》之:第二步,构建利于维护的自动化测试系统...
  3. 事物(Jdbc) 例子
  4. 【MyBatis】MyBatis自动生成代码之查询爬坑记
  5. 关于SOA的四个基本观点 from MS
  6. webpack 3 零基础入门教程 #12 - 如何使用模块热替换 HMR 来处理 CSS
  7. 实作 ASP.NET 多笔数据离线编辑
  8. “局域网聊天”开始了
  9. php descryptoserviceprovider,[WPF]C#和php实现DES加密和解密
  10. 分布式架构高可用与高并发那些在工作中常用到的那些变态应用
  11. 简单使用_八角气囊如何使用简单介绍
  12. 自定义控件之圆形的image
  13. 【裂缝识别】基于matlab无人机图像处理公路裂缝检测研究与实现【含Matlab源码 1730期】
  14. 自主招生认可的英语竞赛有哪些
  15. SVN提交时出现remains in conflict错误
  16. PHP乘法表菜鸟教程,第二节 菜鸟教程的实例
  17. 流量都去哪儿了? 流量不清零后“消耗快”
  18. 电子学会2022年6月青少年软件编程(图形化)等级考试试卷(二级)答案解析
  19. 如何将QQ号设置成手机号?
  20. jenkin swindows启动_windows本地安装以及使用Jenkins

热门文章

  1. Git命令可视化展示,代码管理再也不愁了,建议收藏!
  2. Python学习笔记(二)Excel保存数据
  3. 雷达和卫星的气象深度学习应用(SEVIR数据集)
  4. 基于Halcon学习的缺陷检测【五】光伏电池片的指纹以及划痕检测【第二种方法】
  5. C#报错:Could not find any resources appropriate for the specified culture or the neutral culture
  6. 读取txt文本数据,用区域生长方法分割求平面
  7. 堆排序:插入方法建堆和普通方法建堆的比较
  8. 使用C51单片机,89C52RC来读取热电偶温度
  9. 蓝牙音乐芯片N8900-SOP24在跑步机上的应用
  10. ES6---标签模板