[英]MATLAB: ODE45 time dependent paramters in R14SP3 and interpolation issue
在how-do-do-do-do-an-ode-with-time-dependent-parameters-in-matlab中
问: 考虑以下具有时间相关参数的ODE: y'(t) + f(t)y(t) = g(t)
和给定的初始条件: y(0) = 1
这是ODE的一个例子与时间有关的条款。 假设时间相关项仅通过两个向量中给出的数据点集来定义。 我应该使用哪个MATLAB ODE解算器,以及如何设置此问题?
答: 此增强功能已包含在Release 14 Service Pack 3(R14SP3)中 。 对于以前的产品版本,请阅读以下任何可能的解决方法
我的问题是:我确实使用了Release 14 Service Pack 3(R14SP3)。 但答案没有提到如何处理它。 如何在ODE45中实现时间相关参数?
我的问题二是:因为我不知道如何在(R14SP3)的ODE45中实现时间相关参数。 我计划在该页面的答案中使用旧的插值方法。 但是,为什么我们需要插值,因为我们已经知道时间相关参数的确切形式。
我的问题三是:Jan Simon在评论中指出了它的插值缺陷。 我已经使用“每个循环集成”实现了Jan Simon建议的方法。 但Jan Simon的方法将变量视为ODE45内的常量。 那么如何在ode45“h”区间内进行整合呢? 我知道如何在我定义的时间间隔内进行积分,但ode45会在运行自己的时间间隔时将变量视为常量。 例如,为每个时间步执行每个循环的集成:
function Integrationperloop
tResult = [];
xResult = [];
tStep = [0 1 2 3 4 5 6 7 8 9 10 11];
x0 = [1 2 3];
for index = 2:numel(tStep)
% Integrate:
beta = 1 + exp(-0.20*tStep(index - 1))
af = @(t,x) f(t, x, beta);
t = tStep(index-1:index);
[t, x] = ode45(af, t, x0);
% Collect the results:
tResult = cat(1, tResult, t);
xResult = cat(1, xResult, x);
% Final value of x is initial value for next step:
x0 = x(end, :);
end
%This is the derivative
function dx = f(t,x, beta)
dx = [-0.5*x(1)-beta*x(1)*x(3); ...
beta*x(1)*x(3) - x(2); ...
x(2) - x(3)];
但是在上面的代码中,ode45会在运行自己的间隔时将变量视为常量。 在链接how-do-do-do-do-an-ode-with-time-dependent-parameters-in-matlab中 ,MathWorks支持团队建议使用R14S13中的增强或使用插值。 如果使用插值,当ODE45运行时,时间相关变量使用插值更改。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.