【matlabode45用法新手上路看不懂HELP用通俗的解-查字典问答网
分类选择

来自黄世泽的问题

  【matlabode45用法新手上路看不懂HELP用通俗的解释下如何用】

  matlabode45用法

  新手上路看不懂HELP用通俗的解释下如何用

2回答
2020-05-25 01:05
我要回答
请先登录
李素建

  3.6.2龙格-库塔方法

  改进的欧拉法比欧拉法精度高的原因在于,它在确定平均斜率时,多取了一个点的斜

  率值。这样,如果我们在[Xi,X(i+1)]上多取几个点的斜率值,然后对它们作线性组合得到平均

  斜率,则有可能构造出精度更高的计算方法。这就是龙格-库塔法的基本思想。龙格-库塔

  法可看作是欧拉法思想的提高,属于精度较高的单步法。

  龙格-库塔法是求解常微分方程初值问题的最重要的方法之一。MATLAB中提供了几

  个采用龙格-库塔法来求解常微分方程的函数,即ode23,ode45,ode113,ode23s,ode15s

  等,其中最常用的函数是ode23(二三阶龙格-库塔函数)和ode45(四五阶龙格-库塔函数),

  下面分别对它们进行介绍。

  1.二三阶龙格-库塔函数(ode23)

  函数ode23的调用格式如下:

  (1)[T,Y]=ODE23('F',TSPAN,Y0)输入参数中的'F'是一个字符串,表示微分方程的形

  式,也可以是f(x,y)的M文件。TSPAN=[T0TFINAL]表示积分区间,Y0表示初始条件。

  函数ode23表示在初始条件Y0下从T0到TFINAL对微分方程'(,)yFty=进行积分。函数

  F(T,Y)必须返回一列向量,两个输出参数是列向量T与矩阵Y,其中向量T包含估计响应

  的积分点,而矩阵Y的行数与向量T的长度相等。向量T中的积分点不是等间距的,这是

  为了保持所需的相对精度,而改变了积分算法的步长。为了获得在确定点T0,T1,"的解,

  TSPAN=[T0T1TFINAL]。需要注意的是:TSPAN中的点必须是单调递增或单调递减的。

  (2)[T,Y]=ODE23('F',TSPAN,Y0,OPTIONS)其中,参数options为积分参数,它可由函

  数ODESET来设置。Options参数最常用的是相对误差‘RelTol’(默认值是1e-3)和绝对误差

  ‘AbsTol’(默认值是1e-6),其他参数同上。

  (3)[T,Y]=ODE23('F',TSPAN,Y0,OPTIONS,P1,P2,…)参数P1,P2,…可直接输入到函数

  F中去.如F(T,Y,FLAG,P1,P2,…)。如果参数OPTIONS为空,则输入OPTIONS=[]。也可

  以在ODE文件中(可参阅ODEFILE函数)指明参数TSPAN、Y0和OPTIONS的值。如果参

  数TSPAN或Y0是空,则ODE23函数通过调用ODE文件[TSPAN,Y0,OPTIONS]=

  F([],[],'init')来获得ODE23函数没有被提供的自变量值。如果获得的自变量表示空,则函

  数ODE23会忽略,此时为ODE23('F')。

  (4)[T,Y,TE,YE,IE]=ODE23('F',TSPAN,Y0,OPTIONS)此时要求在参数options中的事

  件属性设为'on',ODE文件必须被标记,以便P(T,Y,'events')能返回合适的信息,详细可参

  阅函数ODEFILE。输出参数中的TE是一个列向量,矩阵YE的行与列向量TE中元素相

  对应,向量IE表示解的索引。

  2.四五阶龙格-库塔函数(ode45)

  函数ode45的调用格式同ode23相同,其差别在于内部算法不同。如果'F'为向量函数,

  则ode23和ode45也可用来解微分方程组。

  【例3.47】分别用二三阶龙格-库塔法和四五阶龙格-库塔法解常微分方程的初值问题:

  先将微分方程写成自定义函数exam2fun.m

  functionf=exam2fun(x,y)

  f=-y-x*y.^2;

  f=f(:);

  然后在命令窗口输入以下语句:

  >>[x1,y1]=ode23('exam2fun',[0:0.1:1],1)

  x1=

  0.1000

  0.2000

  0.3000

  0.4000

  0.5000

  0.6000

  0.7000

  0.8000

  0.9000

  1.0000

  y1=

  1.0000

  0.9006

  0.8046

  0.7144

  0.6314

  0.5563

  0.4892

  0.4296

  0.3772

  0.3312

  0.2910

  >>[x2,y2]=ode45('exam2fun',[0:0.1:1],1)

  x2=

  0.1000

  0.2000

  0.3000

  0.4000

  0.5000

  0.6000

  0.7000

  0.8000

  0.9000

  1.0000

  y2=

  1.0000

  0.9006

  0.8046

  0.7144

  0.6315

  0.5563

  0.4892

  0.4296

  0.3772

  0.3312

  0.2910

2020-05-25 01:07:55
葛传虎

  odefun=@(t,y)2*t+y^2;%定义函数

  tspan=[01.57];%求解区间

  y0=0;%初值

  [t,y]=ode45(odefun,tspan,y0);plot(t,y)%作图

  title('t^2y''=y+3t,y(1)=-2,1

2020-05-25 01:09:07

最新问答

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  •