文档帮助中心文档
求解非刚性微分方程-低阶法
[t,y]=ode23(odefun,tspan,y0)
[t、y] = ode23 (odefun tspan, y0,选项)
[t y te,你们()= ode23 (odefun tspan, y0,选项)
索尔= ode23 (___)
例子
[t,y) = ode23 (odefun,tspan,y0),在那里[font =宋体],积分微分方程组 y ' = f ( t , y ) 从t0到tf与初始条件y0.每行the solution arrayy对应于列向量中返回的值t.
[t,y) = ode23 (odefun,tspan,y0)
t
y
odefun
tspan
y0
[font =宋体]
t0
tf
所有MATLAB®ODE求解器可以求解这种形式的方程组 y ' = f ( t , y ) ,或涉及质量矩阵的问题, 米 ( t , y ) y ' = f ( t , y ) .解算器都使用类似的语法ode23s求解器只能在质量矩阵是常数的情况下求解质量矩阵问题。ode15s和ode23t可以用奇异的质量矩阵来解决问题,称为微分代数方程(DAEs)。指定质量矩阵使用质量选择奥德塞特.
ode23s
ode15s
ode23t
质量
奥德塞特
[t,y) = ode23 (odefun,tspan,y0,选项)还使用定义的集成设置选项,这是使用奥德塞特函数。例如,使用theAbsTol和RelTol用于指定绝对和相对误差公差的选项,或质量提供质量矩阵的选项。
[t,y) = ode23 (odefun,tspan,y0,选项)
选项
AbsTol
RelTol
[t,y,te,叶,即) = ode23 (odefun,tspan,y0,选项)另外查找函数的位置(t,y),被调用的事件函数为零。在输出中,te是事件发生的时间,叶解决方案是在事件发生的时候吗即是已触发事件的索引。
[t,y,te,叶,即) = ode23 (odefun,tspan,y0,选项)
te
叶
即
对于每个事件函数,指定积分是否在零处终止,以及过零的方向是否重要“事件”属性设置为函数,例如myEventFcn或@myEventFcn,并创建相应的函数:[价值,isterminal,方向] =myEventFcn(t,y)。有关详细信息,请参阅ODE事件位置.
“事件”
myEventFcn
@myEventFcn
价值
isterminal
方向
溶胶= ode23 (___)返回可用于的结构德瓦尔求区间上任意一点的解[t0 tf].您可以在前面的语法中使用任何输入参数组合。
溶胶= ode23 (___)
溶胶
德瓦尔
[t0 tf]
全部折叠
具有单个解决方案组件的简单ode可以在对求解器的调用中指定为匿名函数。匿名函数必须接受两个输入(t, y)即使其中一个输入未使用。
(t, y)
解赋
y ” = 2 t .
使用的时间间隔[0,5]以及初始条件y0 = 0.
[0,5]
y0 = 0
Tspan = [0 5];y0 = 0;[t,y] = ode23(@(t,y) 2*t, tspan, y0);
绘制解决方案。
情节(t y“o”)
范德波尔方程是一个二阶微分方程
哪里为标量参数。将这个方程写成一阶ode的方程组,用代换法.得到的一阶ode系统为
函数文件vdp1.m表示范德波尔方程.的变量和这些是参赛作品吗y (1)和y(2)对于二元向量,dydt.
vdp1.m
y (1)
y(2)
dydt
作用dydt = vdp1 (t, y)%VDP1评估mu=1的范德极%%参见ODE113, ODE23, ODE45。亚采克·基尔赞卡和劳伦斯·f·沙宾版权所有1984-2014 The MathWorks, Inc.dydt = [y (2);(1 y (1) ^ 2) * y (2) - y (1)];
使用ode23命令用于设置时间间隔20 [0]与初始值[2 0].结果输出是时间点的列向量t还有一个解数组y.每行y对应于在列表的相应行中返回的时间t.第一列y对应于,第二列为.
ode23
20 [0]
[2 0]
[t,y] = ode23(@vdp1,[0 20],[2;0]);
画出万博 尤文图斯和对t.
图(t,y(:,1),“o”,t,y(:,2),“o”)标题(用ODE23求解van der Pol方程(\mu = 1));包含(“时间到了”);伊莱贝尔(“解决方案y”);传奇(“YU 1”,“YU 2”)
ode23仅适用于使用两个输入参数的函数,t和y.但是,您可以通过在函数外部定义参数并在指定函数句柄时传入参数来传递额外的参数。
把方程写成一阶方程组
odefcn.m将此方程组表示为接受四个输入参数的函数:t,y,一个和B.
odefcn.m
一个
B
作用dydt=odefcn(t,y,A,B)dydt=0(2,1);dydt(1)=y(2);dydt(2)=(A/B)*t*y(1);
使用ode23.指定函数句柄,以便它传入的预定义值一个和B到odefcn.
odefcn
A=1;B=2;tspan=[05];y0=[0.01];[t,y]=ode23(@(t,y)odefcn(t,y,A,B),tspan,y0);
绘制结果。
图(t,y(:,1),“o”,t,y(:,2),“-”。)
相比ode45,ode23解决者更擅长用粗略的误差公差来解决问题。
ode45
比较…的性能ode45和ode23通过求解中等刚度的常微分方程
y ” = - λ y
为 λ = 1 0 0 0 . 这是一个测试方程,随着时间的推移变得越来越僵硬 λ 增加。使用奥德塞特打开求解器统计信息的显示。
opts=odeset(“统计数据”,“上”);Tspan = [0 2];y0 = 1;λ= 1 e3;Subplot (1,2,1) tic, ode45(@(t,y) -lambda*y, tspan, y0, opts), toc
615个成功的步骤35个失败的尝试3901函数评估运行时间为1.931205秒。
标题(“数值”)子图(1,2,2)tic, ode23(@(t,y) -lambda*y, tspan, y0, opts), toc
822成功的步骤2失败的尝试2473功能评估运行时间为0.855432秒。
标题(“ode23”)
对于这个中等僵硬的问题,ode23执行速度略快于ode45而且失败的步骤也更少。所采用的步长ode45和ode23因为这个问题受到方程稳定性要求的限制,而不是精度的限制ode23比…便宜ode45,ode23求解器执行更快,即使它需要更多的步骤。
要解决的函数,指定为函数句柄,该句柄定义要集成的函数。
功能dydt = odefun (t, y),对于标量t还有一个列向量y,必须返回列向量dydt的数据类型仅有一个的或双这相当于 f ( t , y ) .odefun必须接受两个输入参数,t和y,即使函数中未使用其中一个参数。
dydt = odefun (t, y)
仅有一个的
双
例如,解决 y ' = 5 y − 3. ,使用功能:
函数dydt = odefun(t,y) dydt = 5*y-3;
对于方程组,的输出odefun是一个向量。向量中的每个元素都是一个方程的解。例如
y ' 1 = y 1 + 2 y 2 y ' 2 = 3. y 1 + 2 y 2
使用功能:
函数dydt = odefun(t,y) dydt = 0,1;dydt (1) = (1) + 2 * y (2);dydt (2) = 3 * y (1) + 2 * y (2);
有关如何为函数提供附加参数的信息,请参见odefun,请参阅参数化功能.
例子:@myFcn
@myFcn
数据类型:function_handle
function_handle
积分区间,指定为向量。至少,tspan必须是两元素向量[t0 tf]指定初始和最终时间。在特定的时间内得到溶万博 尤文图斯液t0和tf,使用较长的形式向量(t0, t1, t2,…,tf).中的元素tspan要么都在增加,要么都在减少。
(t0, t1, t2,…,tf)
解算器施加以下给定的初始条件:y0在最初的时候tspan (1),然后从tspan (1)到tspan(结束):
tspan (1)
tspan(结束)
如果tspan有两个元素,[t0 tf],则求解器返回该区间内每个内部积分步骤计算的解。
如果tspan有两个以上的元素(t0, t1, t2,…,tf),然后解算器返回在给定点处计算的解。但是,解算器不会精确步进到中指定的每个点tspan.相反,求解器使用它自己的内部步骤来计算解,然后在请求的点上计算解tspan.在指定的万博 尤文图斯点上产生的解与在每个内部步骤上计算的解具有相同的精度顺序。
指定几个中间点对计算效率几乎没有影响,但对于大型系统来说,它会影响内存管理。
的值tspan是由求解器用来计算合适的值InitialStep和MaxStep:
InitialStep
MaxStep
如果tspan包含几个中间点(t0, t1, t2,…,tf),则指定的点表示问题的规模,这可能会影响InitialStep由求解器使用。因此,求解器获得的解可能会因您是否指定而不同tspan作为两元素向量或具有中间点的向量。
中的初始值和最终值tspan用于计算最大步长MaxStep. 因此,更改中的初始值或最终值tspan可能导致解算器使用不同的步骤序列,这可能会更改解决方案。
例子:10 [1]
10 [1]
例子:[1 3 5 7 9 10]
[1 3 5 7 9 10]
数据类型:仅有一个的|双
初始条件,指定为向量。y0必须与的向量输出长度相同odefun因此y0中定义的每个方程的初始条件odefun.
选项结构,指定为结构数组。使用奥德塞特函数创建或修改选项结构。看到ODE选项摘要获取与每个求解器兼容的选项列表。
例子:选项= odeset (e-5 RelTol, 1,“统计”,“对”,“OutputFcn”,@odeplot)的相对容错1 e-5,打开解算器统计信息的显示,并指定输出函数@odeplot在计算时绘制解决方案。
选项= odeset (e-5 RelTol, 1,“统计”,“对”,“OutputFcn”,@odeplot)
1 e-5
@odeplot
数据类型:结构体
结构体
计算点,作为列向量返回。
如果tspan包含两个元素,[t0 tf],然后t包含用于执行集成的内部评估点。
如果tspan包含两个以上的元素t是一样的tspan.
万博 尤文图斯解决方案,作为数组返回。在每一行y的对应行中返回值处的解决方案t.
事件的时间,作为列向量返回。事件的时间te对应于中返回的解决方案万博 尤文图斯叶和即指定发生的事件。
事件发生时的解决方案,作为数组返回。中的事件时间te对应于中返回的解决方案万博 尤文图斯叶和即指定发生的事件。
触发事件函数的索引,作为列向量返回。事件的时间te对应于中返回的解决方案万博 尤文图斯叶和即指定发生的事件。
用于求值的结构,作为结构数组返回。将此结构与德瓦尔函数,用于在时间间隔内的任意点评估解决方案[t0 tf].的溶胶结构数组总是包含以下字段:
sol.x
解算器选择的步骤的行向量。
sol.y
万博 尤文图斯解决。每列sol.y(:,我)包含当时的解决方案sol.x(我).
sol.y(:,我)
sol.x(我)
sol.solver
解算器的名字。
此外,如果指定事件然后检测选项和事件溶胶还包括以下字段:
事件
sol.xe
事件发生的时间点。sol.xe(结束)包含终端事件的确切点(如果有的话)。
sol.xe(结束)
索尔·叶
万博 尤文图斯中的事件对应的解决方案sol.xe.
sol.ie
索引到中指定的函数返回的向量中事件选择。这些值指示求解器检测到的事件。
ode23是一个显式龙格-库塔(2,3)对Bogacki和Shampine的实现。它可能比ode45在粗公差和中等刚度存在时。ode23是单步求解器吗[1],[2].
[1] Bogacki, P.和L. F. Shampine,《3(2)对龙格-库塔公式》达成。数学。信,第2卷,1989年,第321-325页。
[2] Shampine, l.f.和M. W. Reichelt, "MATLAB ODE套件”,SIAM科学计算杂志,第18卷,1997年,第1-22页。
使用注意事项及限制:
全部的奥德塞特选项参数必须是常量。
在选项结构中,代码生成不支持常数质量矩阵。万博1manbetx提供一个质量矩阵作为函数。
您必须提供至少两个输出参数T和Y.
T
Y
输入类型必须是同质的,全部为双输入或全部为单输入。
必须启用可变大小支持。万博1manbetx代码生成需要动态内存分配tspan有两个元素,或者使用事件函数。
德瓦尔|ode45|odeget|奥德塞特|奥德克森德
odeget
奥德克森德
您有这个示例的修改版本。您想打开这个示例与您的编辑吗?
你点击一个链接对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。万博1manbetx
选择一个网站以获取可用的翻译内容,并查看本地活动和优惠。根据您的位置,我们建议您选择:.
您还可以从以下列表中选择网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。
与当地办事处联系