主要内容

solve

在区间或指定点处求解 ODE

自 R2023b 起

说明

S = solve(F,t) 计算由 F 表示的 ODE 在向量 t 中指定时间值处的解。“时间”指 ODE 问题中的自变量。

示例

S = solve(F,t0,tf) 在时间区间 [t0 tf] 内计算解,返回求解器选择的每个步长处的解。

示例

S = solve(F,t0,tf,Refine=N) 还指定每个求解器步的等间距解值的数量。

示例

示例

全部折叠

创建一个 ode 对象以对函数 dydt = @(t,y) (1/2)*t^2 进行积分。将 dydt 的初始值指定为 0

F = ode(ODEFcn=@(t,y) (1/2)*t^2,InitialValue=0);

使用 solve 方法对 ode 对象进行积分。使用 linspace 指定时间向量,以计算在区间 [0 5] 内特定时间点处的解。

t = linspace(0,5);
S = solve(F,t)
S = 
  ODEResults with properties:

        Time: [0 0.0505 0.1010 0.1515 0.2020 0.2525 0.3030 0.3535 0.4040 0.4545 0.5051 0.5556 0.6061 0.6566 0.7071 0.7576 0.8081 0.8586 0.9091 0.9596 1.0101 1.0606 1.1111 1.1616 1.2121 1.2626 1.3131 1.3636 1.4141 1.4646 1.5152 1.5657 … ] (1×100 double)
    Solution: [0 2.1471e-05 1.7177e-04 5.7972e-04 0.0014 0.0027 0.0046 0.0074 0.0110 0.0157 0.0215 0.0286 0.0371 0.0472 0.0589 0.0725 0.0879 0.1055 0.1252 0.1473 0.1718 0.1988 0.2286 0.2612 0.2968 0.3355 0.3774 0.4226 0.4713 0.5237 … ] (1×100 double)

绘制结果。

plot(S.Time,S.Solution,"-o")

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

再次对 ode 对象进行积分,这次指定在区间 [-5 5] 内的时间点。尽管 dydt 的初始值默认在 F.InitialTime=0 处应用,但 solve 方法可以计算在初始时间前的解。

t2 = linspace(-5,5);
S2 = solve(F,t2);
plot(S2.Time,S2.Solution,"-o")

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

创建一个 ode 对象以对此方程组进行积分。

y1=y2y2=-y1

指定 y1=0y2=1 的初始值。

F = ode(ODEFcn=@(t,y) [y(2); -y(1)],InitialValue=[0 1]);

使用 solve 方法在区间 [0 2*pi] 内对 ode 对象进行积分。绘制结果。

S = solve(F,0,2*pi);
plot(S.Time,S.Solution,"-o")

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

再次对 ode 对象进行积分,这次指定 Refine=6 以在每个时间步生成额外的解点。

S2 = solve(F,0,2*pi,Refine=6);
plot(S2.Time,S2.Solution,"-o")

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

输入参数

全部折叠

要求解的 ODE 问题,指定为 ode 对象。

计算解的时间点,指定为具有实数元素的向量。求解器返回在给定时间点处计算的解。但是,求解器不会精确步进到 t 中指定的每个点。此时,求解器使用自己的内部积分步来计算解,然后在 t 中请求的各点处计算解。在指定点处生成的解与在每个内部积分步计算的解具有相同的准确度级别。

t 中指定的时间点不受 ode 对象 FInitialTime 属性值的限制。您可以指定在 InitialTime 值之前或之后的时间值。

求解器使用 t 中的值来计算 F.SolverOptions.InitialStepF.SolverOptions.MaxStep 选项的合适值:

  • 指定的时间点表示了问题的规模,这可能影响求解器使用的 InitialStep 的值。因此与指定时间向量相比,使用 t0,tf 指定区间的初始和最终时间点可能导致不同积分结果。

  • 求解器使用初始和最终时间点计算最大步长 MaxStep。因此,更改 t 中的初始值或最终值可能导致求解器使用不同步长序列,从而可能会更改解。

示例: S = solve(F,1:10) 求解由 F 表示的 ODE 问题在时间点 1:10 处的解。

积分区间,指定为两个实数标量,分别表示初始 (t0) 和最终 (tf) 时间点。求解器返回在指定时间区间内每个内部积分步处计算的解。

t0tf 中指定的时间点不受 F 对象 odeInitialTime 属性值的限制。您可以指定在 InitialTime 值之前或之后的时间值。

求解器使用初始和最终时间点计算最大步长 F.SolverOptions.MaxStep。因此,更改 t0tf 可能导致求解器使用不同步长序列,从而可能会更改解。

示例: S = solve(F,1,10) 求解由 F 表示的 ODE 问题在区间 [1 10] 内的解。

解细化因子,指定为整数标量。标量指定一个因子,该因子决定每步中应增加的输出点数。

对于大多数求解器,N 的默认值为 1,但 ode45 使用默认值 4,而 ode78ode89 使用默认值 8。这些求解器使用较大的默认值来补偿它们采用大步长的倾向。

  • 如果细化因子为 1,求解器将只返回每步末尾的解。

  • 如果细化因子大于 1,则求解器将每步分为 N 个更小的区间,并返回每个点处的解。

细化因子生成的额外值是通过连续展开公式计算而来的。求解器使用这些专用公式在计算的时间步之间获得准确解,而不会显著增加计算时间。

示例: S = solve(F,1,10,Refine=5) 求解由 F 表示的 ODE 问题在区间 [1 10] 内的解,并在每个时间步返回 5 个点。

输出参量

全部折叠

计算的解,以 ODEResults 对象形式返回。

版本历史记录

在 R2023b 中推出