MATLAB:R14SP3中的ODE45时间相关参数和插值问题

时间:2016-06-22 03:05:28

标签: matlab

how-do-i-solve-an-ode-with-time-dependent-parameters-in-matlab

问:考虑以下具有时间相关参数的ODE:  y'(t) + f(t)y(t) = g(t) 和给定的初始条件:  y(0) = 1 这是具有时间依赖项的ODE的示例。假设时间相关项仅通过两个向量中给出的数据点集来定义。我应该使用哪个MATLAB ODE求解器,以及如何设置此问题?

答:此增强功能已包含在第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-i-solve-an-ode-with-time-dependent-parameters-in-matlab中,MathWorks支持团队建议使用R14S13中的增强或使用插值。如果使用插值,当ODE45运行时,时间相关变量使用插值更改。

0 个答案:

没有答案