Main Content

odextend

扩展 ODE 的解

说明

solext = odextend(sol,odefun,tfinal) 扩展解 sol,其方式是使用创建 sol 的同一个 ODE 求解器,对 odefun 求从 sol.x(end)tfinal 的积分。函数 odefun 可能不同于用于计算 sol 的原始函数。solext 中自变量的下界与 sol 中一致,即 sol.x(1)。默认情况下,odextend 使用:

  • 后续积分的初始条件 y = sol.y(:,end)

  • ODE 求解器原本用来计算 sol 的相同的积分属性和额外输入参量。此信息存储在解结构体 sol 中,之后返回到 solext 中。除非您要更改这些值,否则不必将其传递给 odextend

示例

solext = odextend(sol,[],tfinal) 将解扩展为用于求取 sol 的同一 ODE 函数。

solext = odextend(sol,odefun,tfinal,y0) 为扩展的积分指定新的初始条件 y0,而不是使用 sol.y(:,end)

对于 ode15i 求解器:y0 必须是一个 m×2 矩阵 y0 = [yinit ypinit],其中包含解分量及其导数的初始条件列向量。

solext = odextend(sol,odefun,tfinal,y0,options) 使用由 options(使用 odeset 函数创建的参量)定义的积分选项。指定的选项将覆盖 ODE 求解器原来计算 sol 所用的选项。您可以选择指定 y0 = [] 使用默认的初始条件。

示例

全部折叠

van der Pol 方程为二阶 ODE

y1-μ(1-y12)y1+y1=0.

使用 ode45 以及 μ=1 解算 van der Pol 方程。函数 vdp1.m 随 MATLAB® 一起提供,用于对方程进行编码。指定单个输出以返回包含解信息(如求解器和计算点)的结构体。

tspan = [0 20];
y0 = [2 0];
sol = ode45(@vdp1,tspan,y0)
sol = struct with fields:
     solver: 'ode45'
    extdata: [1x1 struct]
          x: [0 1.0048e-04 6.0285e-04 0.0031 0.0157 0.0785 0.2844 0.5407 0.8788 1.4032 1.8905 2.3778 2.7795 3.1285 3.4093 3.6657 3.9275 4.2944 4.9013 5.3506 5.7998 6.2075 6.5387 6.7519 6.9652 7.2247 7.5719 8.1226 8.6122 9.1017 9.5054 ... ] (1x60 double)
          y: [2x60 double]
      stats: [1x1 struct]
      idata: [1x1 struct]

使用 linspace 在区间 [0 20] 内生成 250 个点。使用 deval 计算在这些点上的解。

x = linspace(0,20,250);
y = deval(sol,x);

绘制解的第一个分量。

plot(x,y(1,:))

Figure contains an axes object. The axes object contains an object of type line.

使用 odextend 将解扩展到 tf=35,并将结果添加到原始图中。

sol_new = odextend(sol,@vdp1,35);
x = linspace(20,35,350);
y = deval(sol_new,x);
hold on
plot(x,y(1,:),'r')

Figure contains an axes object. The axes object contains 2 objects of type line.

输入参数

全部折叠

解结构体,指定为由 ODE 求解器返回的结构体。当调用带有单个输出参量的 ODE 求解器时,它会返回解结构体。

示例: sol = ode45(myode,tspan,y0)

数据类型: struct

要解算的函数,指定为函数句柄。使用此输入可通过新的或修改后的 ODE 函数扩展解。要继续使用原来创建解结构体 sol 所用的 ODE 函数,请将 odefun 指定为空输入 []

数据类型: function_handle

最终积分时间,指定为标量。

数据类型: single | double

初始条件,指定为标量、向量或矩阵。默认情况下,odextend 使用初始条件 y = sol.y(:,end) 来扩展积分。使用此输入为扩展积分指定新的初始条件。

对于 ode15i 求解器:y0 必须是一个 m×2 矩阵 y0 = [yinit ypinit],其中包含解分量及其导数的初始条件列向量。

数据类型: single | double

Options 结构体。默认情况下,odextend 使用的选项和附加输入与 ODE 求解器原来用于计算 sol 的相同。使用此输入指定新的 options 结构体,以覆盖用来创建 sol 的选项。

使用 odeset 函数创建或修改 ODE options 结构体。

数据类型: struct

输出参量

全部折叠

扩展的解,以结构体形式返回。此结构体与 deval 函数一起使用,用于计算区间 [t0 tf] 内任何点的解。solext 结构体数组始终包括下列字段:

结构体字段描述

sol.x

求解器选择的步的行向量。

sol.y

每列 sol.y(:,i) 包含时间 sol.x(i) 处的解。

sol.solver

求解器名称。

此外,如果指定了 Events 选项并且检测到事件,则 solext 还包括下列字段:

结构体字段描述

sol.xe

事件发生的点。sol.xe(end) 包含终止事件(如果有)的确切点。

sol.ye

sol.xe 中的事件相对应的解。

sol.ie

Events 选项中指定的函数所返回的向量的索引。这些值指示求解器检测到的事件。

版本历史记录

在 R2006a 之前推出