24.3与Matlab兼容的解算器

Octave还为具有MATLAB-兼容接口。此类方法的参数是使用函数设置的。

当前实现的解算器有:

关于解算器的详细信息见L.F.Shampine和M。W.Reichelt,MATLAB ODE套件,SIAM科学计算杂志,1997年第18卷,第1-22页,DOI:https://doi.org/10.1137/S1064827594276424.

 
: [t, y] = ode45 (fcn, trange, init)
: [t, y] = ode45 (fcn, trange, init, ode_opt)
: [t, y, te, ye, ie] = ode45 (…)
: solution = ode45 (…)
: ode45 (…)

用众所周知的4阶显式Dormand-Prince方法求解一组非刚性常微分方程。

fcn是包含定义ODE的函数名称的函数句柄、内联函数或字符串:y'=f(t,y)。函数必须接受两个输入,其中第一个是时间t第二个是未知数的列向量y.

trange指定对ODE求值的时间间隔。通常,它是一个指定初始和最终时间的双元素向量([tinit,tfinal]). 如果有两个以上的元素,那么也将在这些中间时间实例中评估解决方案。

默认情况下,ode45使用自适应时间步长integrate_adaptive算法。可以使用参数更改时间步长计算的容差RelTolAbsTol.

初始化包含未知数的初始值。如果它是一个行向量,那么解y将是一个矩阵,其中每列都是中相应初始值的解初始化.

可选的第四个参数节点(_O)为ODE解算器指定非默认参数。它是从生成的结构体odeset.

该函数通常返回两个输出。变量t是列向量,包含找到解决方案的时间。输出y是一个矩阵,其中每列指的是问题的差分,每行对应的是t.

输出也可以作为结构体返回解决方案它已经离开了x包含求解时间的行向量和字段y包含溶液矩阵,使得每列对应于x使用字段名(解决方案)以查看返回的其他字段和其他信息。

如果没有指定输出参数,并且没有OutputFcn在中指定节点(_O),然后OutputFcn设置为节点图并且立即绘制解算器的结果。

如果使用事件参数,则可以恢复三个附加输出。te保存Event函数返回零的时间。ye保持解决方案的值te. ie包含一个索引,指示在多个事件函数的情况下触发了哪个事件函数。

示例:求解范德波尔方程

fvdp=@(t,y) [y2.1.y(1)^2) * y2.y1.[t,y]=ode45(fvdp,[0,20],[2,0]);

详见: odeset, odeget, ode23, ode15.

 
: [t, y] = ode23 (fcn, trange, init)
: [t, y] = ode23 (fcn, trange, init, ode_opt)
: [t, y, te, ye, ie] = ode23 (…)
: solution = ode23 (…)
: ode23 (…)

用众所周知的3阶显式Bogacki-Shampine方法求解一组非刚性常微分方程(非刚性常方程)。

fcn是包含定义ODE的函数名称的函数句柄、内联函数或字符串:y'=f(t,y)。函数必须接受两个输入,其中第一个是时间t第二个是未知数的列向量y.

trange指定对ODE求值的时间间隔。通常,它是一个指定初始和最终时间的双元素向量([tinit,tfinal]). 如果有两个以上的元素,那么也将在这些中间时间实例中评估解决方案。

默认情况下,ode23使用自适应时间步长integrate_adaptive算法。可以使用参数更改时间步长计算的容差RelTolAbsTol.

初始化包含未知数的初始值。如果它是一个行向量,那么解y将是一个矩阵,其中每列都是中相应初始值的解初始化.

可选的第四个参数节点(_O)为ODE解算器指定非默认参数。它是从生成的结构体odeset.

该函数通常返回两个输出。变量t是列向量,包含找到解决方案的时间。输出y是一个矩阵,其中每列指的是问题的差分,每行对应的是t.

输出也可以作为结构体返回解决方案它已经离开了x包含求解时间的行向量和字段y包含溶液矩阵,使得每列对应于x使用字段名(解决方案)以查看返回的其他字段和其他信息。

如果没有指定输出参数,并且没有OutputFcn在中指定节点(_O),然后OutputFcn设置为节点图并且立即绘制解算器的结果。

如果使用事件参数,则可以恢复三个附加输出。te保存Event函数返回零的时间。ye保持解决方案的值te. ie包含一个索引,指示在多个事件函数的情况下触发了哪个事件函数。

示例:求解范德波尔方程

fvdp=@(t,y) [y2.1.y(1)^2) * y2.y1.[t,y]=ode23(fvdp,[0,20],[2,0]);

参考:有关此方法的定义,详见https://en.wikipedia.org/wiki/List_of_Runge%E2%80%93Kutta_methods.

详见: odeset, odeget, ode45, ode15.

 
: [t, y] = ode23s (fcn, trange, init)
: [t, y] = ode23s (fcn, trange, init, ode_opt)
: [t, y] = ode23s (…, par1, par2, …)
: [t, y, te, ye, ie] = ode23s (…)
: solution = ode23s (…)

用(2,3)阶Rosenbrock方法求解一组刚性常微分方程。

fcn是包含定义ODE的函数名称的函数句柄、内联函数或字符串:My'=f(t,y)。函数必须接受两个输入,其中第一个是时间t第二个是未知数的列向量y. M是一个常质量矩阵,非奇异且可能是稀疏的。设置字段大量在里面odeopts使用odeset以指定质量矩阵。

trange指定对ODE求值的时间间隔。通常,它是一个指定初始和最终时间的双元素向量([tinit,tfinal]). 如果有两个以上的元素,则也将在这些中间时间实例中使用与解算器中的一个相同顺序的插值程序来评估解。

默认情况下,ode23使用自适应时间步长integrate_adaptive算法。可以使用参数更改时间步长计算的容差RelTolAbsTol.

初始化包含未知数的初始值。如果它是一个行向量,那么解y将是一个矩阵,其中每列都是中相应初始值的解初始化.

可选的第四个参数节点(_O)为ODE解算器指定非默认参数。它是从生成的结构体odeset. ode23将忽略以下参数:BDF,InitialSlope, MassSingular, MStateDependency,MvPattern, MaxOrder, 非负.

该函数通常返回两个输出。变量t是列向量,包含找到解决方案的时间。输出y是一个矩阵,其中每列指的是问题的差分,每行对应的是t如果trange指定中间时间步长,则只返回这些时间步长。

输出也可以作为结构体返回解决方案它已经离开了x包含求解时间的行向量和字段y包含溶液矩阵,使得每列对应于x使用字段名(解决方案)以查看返回的其他字段和其他信息。

如果使用事件参数,则可以恢复三个附加输出。te保存Event函数返回零的时间。ye保持解决方案的值te. ie包含一个索引,指示在多个事件函数的情况下触发了哪个事件函数。

示例:求解僵硬的范德波尔方程

ft,y) [y2.1000*(1 - y(1)^2) * y2.y1.opt=节点集(“质量”,[1 0;0 1],“最大步长”,1e-1);[vt,vy]=ode23s(f,[0 2000],[2 0],opt);

详见: odeset, daspk, dassl.

 
: [t, y] = ode15s (fcn, trange, y0)
: [t, y] = ode15s (fcn, trange, y0, ode_opt)
: [t, y, te, ye, ie] = ode15s (…)
: solution = ode15s (…)
: ode15s (…)

求解一组刚性常微分方程(ODE)或刚性半显式指数1微分代数方程(DAE)。

ode15使用从1阶到5阶的可变步长、可变阶BDF(BackwardDifferentiation Formula)方法。

fcn是包含定义ODE的函数名称的函数句柄、内联函数或字符串:y'=f(t,y)。函数必须接受两个输入,其中第一个是时间t第二个是未知数的列向量y.

trange指定对ODE求值的时间间隔。通常,它是一个指定初始和最终时间的双元素向量([tinit,tfinal]). 如果有两个以上的元素,那么也将在这些中间时间实例中评估解决方案。

初始化包含未知数的初始值。如果它是一个行向量,那么解y将是一个矩阵,其中每列都是中相应初始值的解初始化.

可选的第四个参数节点(_O)为ODE解算器指定非默认参数。它是从生成的结构体odeset.

该函数通常返回两个输出。变量t是列向量,包含找到解决方案的时间。输出y是一个矩阵,其中每列指的是问题的差分,每行对应的是t.

输出也可以作为结构体返回解决方案它已经离开了x包含求解时间的行向量和字段y包含溶液矩阵,使得每列对应于x使用字段名(解决方案)以查看返回的其他字段和其他信息。

如果没有指定输出参数,并且没有OutputFcn在中指定节点(_O),然后OutputFcn设置为节点图并且立即绘制解算器的结果。

如果使用事件参数,则可以恢复三个附加输出。te保存Event函数返回零的时间。ye保持解决方案的值te. ie包含一个索引,指示在多个事件函数的情况下触发了哪个事件函数。

示例:求解Robertson方程:

函数r=robertson_de(t, y)r=[-0.04*y(1) +1e4*y2.y(3)         0.04*y(1) -1e4*y2.y(3) -3e7*y(2)^2y1.y2.y(3) - 1 ];endfunctionopt=odeset(“Mass”,[1 0 0;0 1 0;0 0 0],“MStateDependency”,“none”);[t,y]=ode15s(@robertson_de,[0,1e3],[1;0;0],opt);

详见: decic, odeset, odeget, ode23, ode45.

 
: [t, y] = ode15i (fcn, trange, y0, yp0)
: [t, y] = ode15i (fcn, trange, y0, yp0, ode_opt)
: [t, y, te, ye, ie] = ode15i (…)
: solution = ode15i (…)
: ode15i (…)

求解一组完全隐式常微分方程(ODEs)或指数1微分代数方程(DAE)。

ode15i使用从1阶到5阶的可变步长、可变阶BDF(BackwardDifferentiation Formula)方法。

fcn是包含定义ODE的函数名称的函数句柄、内联函数或字符串:0=f(t,y,yp)。函数必须接受三个输入,其中第一个是时间t,第二个是函数值y(列向量),第三个是导数值yp(列向量)。

trange指定对ODE求值的时间间隔。通常,它是一个指定初始和最终时间的双元素向量([tinit,tfinal]). 如果有两个以上的元素,那么也将在这些中间时间实例中评估解决方案。

y0yp0包含未知数的初始值yyp.如果它们是行向量,则解y将是amatrix,其中每列都是中相应初始值的解y0yp0.

y0yp0必须是一致的初始条件,这意味着f(t,y0,yp0)=0满足。函数decic可以用于在给定初始猜测的情况下计算一致的初始条件。

可选的第五个参数节点(_O)为ODE解算器指定非默认参数。它是从生成的结构体odeset.

该函数通常返回两个输出。变量t是列向量,包含找到解决方案的时间。输出y是一个矩阵,其中每列指的是问题的差分,每行对应的是t.

输出也可以作为结构体返回解决方案它已经离开了x包含求解时间的行向量和字段y包含溶液矩阵,使得每列对应于x使用字段名(解决方案)以查看返回的其他字段和其他信息。

如果没有指定输出参数,并且没有OutputFcn在中指定节点(_O),然后OutputFcn设置为节点图并且立即绘制解算器的结果。

如果使用事件参数,则可以恢复三个附加输出。te保存Event函数返回零的时间。ye保持解决方案的值te. ie包含一个索引,指示在多个事件函数的情况下触发了哪个事件函数。

示例:求解Robertson方程:

函数r=robertson_de(t, y, ypryp(1) + 0.04*y(1) -1e4*y2.y3.yp(2) - 0.04*y(1) +1e4*y2.y(3) +3e7*y(2)^2)y1.y2.y(3) - 1 ];结束函数[t,y]=ode15i(@robertson_de,[0,1e3],[1;0;0],[-1e-4;1e-4,0]);

详见: decic, odeset, odeget.

 
: [y0_new, yp0_new] = decic (fcn, t0, y0, fixed_y0, yp0, fixed_yp0)
: [y0_new, yp0_new] = decic (fcn, t0, y0, fixed_y0, yp0, fixed_yp0, options)
: [y0_new, yp0_new, resnorm] = decic (…)

计算一致隐式ODE初始条件y0_newyp0_new给出初步猜测y0yp0.

最大值为y0)之间的组件已修复_y0已修复_yp0可以被选择为固定值。

fcn是一个函数句柄。函数必须接受三个输入,其中第一个是时间t,第二个是未知数的列向量y,第三个是未知数的列向量yp.

t0初始时间是这样的吗fcn(t0, y0_new, yp0_new) = 0,指定为向量。

y0是用作的初始猜测的向量y.

已修复_y0是一个向量,它指定的分量y0已修复。最多选择个y0)之间的组件已修复_y0已修复_yp0作为固定值。设置已修复_y0(i) 如果要修复的值,则将组件设置为1y0(i) 。设置已修复_y0(i) 组件设置为0,如果您希望允许的值y0(i) 改变。

yp0是用作的初始猜测的向量yp.

已修复_yp0是一个向量,它指定的分量yp0已修复。最多选择个yp0)组件之间已修复_y0已修复_yp0作为固定值。设置已修复_yp0(i) 如果要修复的值,则将组件设置为1yp0(i) 。设置已修复_yp0(i) 组件设置为0,如果您希望允许的值yp0(i) 改变。

可选的第七个参数param是一个结构体数组。使用odeset以生成该结构体。相关参数包括RelTolAbsTol其指定用于计算初始条件的误差阈值。

该函数通常返回两个输出。变量y0_new是列向量,包含的一致初始值y.输出yp0_new是列向量,包含的一致初始值yp.

可选的第三个输出残差的范数是残差向量的范数。如果残差的范数是小的,decic已成功计算出初始条件。如果的值残差的范数很大,使用RelTolAbsTol以进行调整。

示例:计算Robertson方程的初始条件:

函数r=robertson_de(t, y, ypryp(1) + 0.04*y(1) -1e4*y2.y3.yp(2) - 0.04*y(1) +1e4*y2.y(3) +3e7*y(2)^2)y1.y2.y(3) - 1 ];结束函数
[y0_new,yp0_new]=decic(@robertson_date,0,[1;0;0],[1;1;0],[-1e-4;1;0],[0;0;0]);

详见: ode15i, odeset.

 
: odestruct = odeset ()
: odestruct = odeset ("field1", value1, "field2", value2, …)
: odestruct = odeset (oldstruct, "field1", value1, "field2", value2, …)
: odestruct = odeset (oldstruct, newstruct)
: odeset ()

创建或修改ODE参数结构体。

当在没有输入参数和一个输出参数的情况下调用时,返回一个新的ODEoptions结构体,该结构体包含初始化为默认值的所有可能字段。如果未指定输出参数,则显示常用ODE解算器参数及其默认值的列表。

如果使用名称值输入参数对调用字段1,value1, 字段2, 值2,…返回一个新的ODE参数结构体,其中所有最常用的参数字段都已初始化,设置字段的值字段1,字段2,…到值值1, 值2,….

如果使用输入结构体调用旧结构体然后覆盖参数的值字段1, 字段2,…具有新值值1, 值2,…并返回修改后的结构体。

当使用两个输入ODE参数结构体调用时旧结构体newstruct覆盖结构体中的所有值旧结构体使用结构体中的新值newstruct。中的值为空newstruct不会覆盖中的值旧结构体.

最常用的ODE参数,总是从指定值odeset,如下所示:

AbsTol:正标量|向量,def。1e-6

绝对误差容限。

BDF: {} | on

在隐式多步骤方法中使用BDF公式。笔记:此参数尚未实施。

事件:函数句柄

事件函数。事件函数必须具有以下形式[值,isterminal,方向]=my_events_f(t,y)

InitialSlope:向量

DAE解算器的一致初始斜率向量。

初始步骤:正标量

初始时间步长。

Jacobian:matrix|function_handle

雅可比矩阵,指定为常数矩阵或时间和状态的函数。

JConstant: {} | on

指定雅可比矩阵是常数矩阵还是取决于状态。

JPattern:稀疏矩阵

如果雅可比矩阵是稀疏且不恒定的,但保持不变的稀疏性模式,则指定稀疏性模式。

大量:matrix|function_handle

质量矩阵,指定为常数矩阵或时间和状态的函数。

MassSingular: {大概} | | on

指定质量矩阵是否为奇异矩阵。

MaxOrder: {5} | 4| 3| 2| 1

公式的最大阶数。

MaxStep:正标量

最大时间步长值。

MStateDependency: {虚弱的} | 没有一个| 坚强的

指定质量矩阵是取决于状态还是仅取决于时间。

MvPattern:稀疏矩阵

如果质量矩阵是稀疏且不恒定的,但保持不变的稀疏性模式,则指定稀疏性模式。笔记:此参数尚未实施。

非阴性:标量|向量

指定状态向量中预期在模拟过程中保持为非负值的元素。

NormControl: {} | on

相对于解的2-范数的控制误差,而不是其绝对值。

OutputFcn:函数句柄

用于监视模拟过程中的状态。有关要使用的函数的形式,详见节点图.

输出选择:标量|向量

要传递给outputmonitoring函数的状态向量元素的索引。

精炼:正标量

指定是仅在每个时间步骤结束时返回输出,还是在中间时间实例时也返回输出。该值应为标量,指示在返回输出的每个时间步长内要使用的等距时间点的数量。

RelTol:正标量

相对误差容限。

Stats: {} | on

模拟后打印解算器统计信息。

量化的: {} | on

指定是否odefcn可以同时传递多个状态值。

不在上面列表中的字段名称也会被接受并添加到结果结构体中。

详见: odeget.

 
: val = odeget (ode_opt, field)
: val = odeget (ode_opt, field, default)

查询属性的值field在ODE参数结构体中节点(_O).

如果使用两个输入参数和第一个输入参数调用节点(_O)是ODE参数结构体和第二个输入参数field是一个指定参数名称的字符串,然后返回optionvalueval对应于field从…起节点(_O).

如果使用可选的第三个输入参数调用,以及field没有设置在结构体中节点(_O),然后返回默认值默认相反

详见: odeset.

 
: stop_solve = odeplot (t, y, flag)

打开一个新的图形窗口,绘制集成过程中每个时间步骤的ode问题的解决方案。

输入参数的类型和值ty取决于输入旗帜类型为字符串。的有效值旗帜

初始化

输入t必须是长度为2、具有第一个和最后一个时间步长的列向量([t第一 tlast].输入y包含ode问题的初始条件(y0).

输入t必须是标量双精度或向量,指定输入解决方案的时间y计算。

完成

输入应为空,但如果存在,则会被忽略。

节点图始终返回false,即不要停止ode解算器。

示例:解决的匿名实现范德波尔方程,并在求解时显示结果。

fvdp=@(t,y)[y(2);(1-y(1)^2)*y(2;opt=节点集(“OutputFcn”,@odeplot,“RelTol”,1e-6);sol=ode45(fvdp,[0 20],[2 0],opt);

背景信息:如果在中指定了此函数,则该函数从ode解算器函数调用OutputFcn使用创建的参数结构体的属性odeset。ode解算器最初将调用带有syntax的函数节点图([t第一, tlast], y0,“init”)该函数初始化内部变量,创建一个新的图形窗口,并设置绘图的x极限。随后,在集成过程中的每个时间步长,ode解算器调用节点图(t, y, [])。在解决方案结束时,ode解算器调用odeplot([],[],“完成”)以便odeplot可以执行所需的任何清理操作。

详见: odeset, odeget, ode23, ode45.


版权所有 © 2024 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号