solve
说明
示例
创建一个 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")
再次对 ode 对象进行积分,这次指定在区间 [-5 5] 内的时间点。尽管 dydt 的初始值默认在 F.InitialTime=0 处应用,但 solve 方法可以计算在初始时间前的解。
t2 = linspace(-5,5);
S2 = solve(F,t2);
plot(S2.Time,S2.Solution,"-o")
创建一个 ode 对象以对此方程组进行积分。
指定 和 的初始值。
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")
再次对 ode 对象进行积分,这次指定 Refine=6 以在每个时间步生成额外的解点。
S2 = solve(F,0,2*pi,Refine=6);
plot(S2.Time,S2.Solution,"-o")
输入参数
要求解的 ODE 问题,指定为 ode 对象。
计算解的时间点,指定为具有实数元素的向量。求解器返回在给定时间点处计算的解。但是,求解器不会精确步进到 t 中指定的每个点。此时,求解器使用自己的内部积分步来计算解,然后在 t 中请求的各点处计算解。在指定点处生成的解与在每个内部积分步计算的解具有相同的准确度级别。
在 t 中指定的时间点不受 ode 对象 F 的 InitialTime 属性值的限制。您可以指定在 InitialTime 值之前或之后的时间值。
求解器使用 t 中的值来计算 F.SolverOptions.InitialStep 和 F.SolverOptions.MaxStep 选项的合适值:
指定的时间点表示了问题的规模,这可能影响求解器使用的
InitialStep的值。因此与指定时间向量相比,使用t0,tf指定区间的初始和最终时间点可能导致不同积分结果。求解器使用初始和最终时间点计算最大步长
MaxStep。因此,更改t中的初始值或最终值可能导致求解器使用不同步长序列,从而可能会更改解。
示例: S = solve(F,1:10) 求解由 F 表示的 ODE 问题在时间点 1:10 处的解。
积分区间,指定为两个实数标量,分别表示初始 (t0) 和最终 (tf) 时间点。求解器返回在指定时间区间内每个内部积分步处计算的解。
在 t0 和 tf 中指定的时间点不受 F 对象 ode 的 InitialTime 属性值的限制。您可以指定在 InitialTime 值之前或之后的时间值。
求解器使用初始和最终时间点计算最大步长 F.SolverOptions.MaxStep。因此,更改 t0 或 tf 可能导致求解器使用不同步长序列,从而可能会更改解。
示例: S = solve(F,1,10) 求解由 F 表示的 ODE 问题在区间 [1 10] 内的解。
解细化因子,指定为整数标量。标量指定一个因子,该因子决定每步中应增加的输出点数。
对于大多数求解器,N 的默认值为 1,但 ode45 使用默认值 4,而 ode78 和 ode89 使用默认值 8。这些求解器使用较大的默认值来补偿它们采用大步长的倾向。
如果细化因子为
1,求解器将只返回每步末尾的解。如果细化因子大于
1,则求解器将每步分为N个更小的区间,并返回每个点处的解。
细化因子生成的额外值是通过连续展开公式计算而来的。求解器使用这些专用公式在计算的时间步之间获得准确解,而不会显著增加计算时间。
示例: S = solve(F,1,10,Refine=5) 求解由 F 表示的 ODE 问题在区间 [1 10] 内的解,并在每个时间步返回 5 个点。
输出参量
计算的解,以 ODEResults 对象形式返回。
版本历史记录
在 R2023b 中推出
另请参阅
ode | solutionFcn | ODEResults | odextend
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
- América Latina (Español)
- Canada (English)
- United States (English)
欧洲
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)