定制网站开发价格,磁力帝,如何制作班级网站,什么是域名 空间 网站源代码今天说一说MATLAB中ode23函数的原理#xff0c;在网上看了好多#xff0c;但是不知道是怎么计算的#xff0c;就知道是那么用的#xff0c;但是最后结果咋回事不知道#xff0c;今天来讲一讲是怎么计算的。首先来个程序#xff1a;function feg6fun(t,y)f-y^3-2;end上面是…今天说一说MATLAB中ode23函数的原理在网上看了好多但是不知道是怎么计算的就知道是那么用的但是最后结果咋回事不知道今天来讲一讲是怎么计算的。首先来个程序function feg6fun(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份我这里只粘了一部分00.02666666666666670.09743761320580270.1781859895986920.270160382755732下面是y的结果y最后也是一个[1,67]的矩阵10.9229598597351610.7405012730513610.5566722169946440.363414446549133下面我们来说是怎么计算的吧看下面的图这个是我在数值分析书上照的其实ode23就是龙格库塔函数的应用而龙格库塔函数就是根据欧拉法得来的看下图上面图片中有三个公式第一个公式h后面括号中的内容就是要求积分的函数就是我们程序中的eg6fun。那么就好办了把图中公式中的括号中的内容换成我们的公式也就是-y^3-2然后计算就好了。这里h为步长也就是我们程序中t的步长我们可以看到第一次t为0.0266666666666667而下一次的步长为0.0974376132058027-0.0266666666666667只要这么一步一步计算就好了。(这里看图中黑色笔手写的公式)这里计算一步来表示计算的大概过程例如 (1)计算Ypy1h * (-y1^3 - 2) 1 - 0.027*3 0.919(2) Ycy1h * (-Yp^3 - 2) 1 - 0.027*(0.919^3 - 2) 0.925(3) Y(n1) 1/2 * (Yp Yc) 1/2 * (0.919 0.925) 0.922因为这里我们保留精度为3位小数可能计算的有些误差。还有一点需要注意龙格库塔函数是对欧拉方法进行的改进其实龙格库塔函数的精度要比欧拉方法更高。因此这里计算有些许误差。但是大概的过程就是这样的。上面的内容是之前写的讲解的是欧拉算法计算微分的过程其实龙格-库塔方法后来在书中看到下面介绍一下龙格库塔方法MATLAB中的ode23就是用的二阶的龙格库塔方法就是图中3.6的三个公式这里h为步长上面给出的tc1和c2是系数这个系数取值不是固定的MATLAB中是啥我也不是确定但是书中最后给的是c10c21λ2和μ21取值1/2。这样一来计算一波y11;求y2将y1带入公式中的yn这里没有x所以有x的项可以忽略k1-3k2f(1-(1/2)*0.0267*3)f(0.96)-2.88y21-0.0267*2.880.923y2求出其余的过程都是这样求得。ode45是四阶龙格库塔函数下图为4阶求法这里不再做介绍到此MATLAB中ode23的计算方法已经讲解完了当然ode45跟这个应该类似就是ode45比ode23更精确一点在MATLAB中如果我们用ode45会发现t在[0,30]间分成了167份很明显精度提高了。其实MATLAB中有好多的函数都是用到了数值分析中的内容而数值分析就是用我们的笨方法来计算数值的一种工具这是我自己定义的哈通过减少误差来使计算出来的数据更准确。