ODE -求解参数依赖变量[Matlab]



假设我有一个ODE函数文件,如下所示

function xprime = RabbitTemp(t,X) 
% Model of Rabbit Population
% where,
%       Xo = Initial Population of Rabbits
%       X(1) = Population density of Rabbit
%       X(2) = Temperature T (that varies with time) 
%       a = test parameter
%%% ODE
a  = 10;

dx(1) = (X(1))*(1 - a*X(1) - 3*(X(2))));
dx(2) = sin(t);
%%%%%%%
xprime = [dx(1) dx(2)]';
end

但是,如果我希望参数a随温度X(2)变化而变化,如ODE求解器计算的那样,该怎么办呢?

我明白我首先必须在aX(2)之间创建一些数据并插入它。但在那之后,我不太确定接下来会发生什么。有谁能给我指个方向吗?

或者还有其他方法吗?

这实际上取决于a的函数a=f(T)。如果您可以取f(T)的导数,我建议您将a作为另一种状态,例如X(3),然后您可以轻松地从xprime中的X参数访问它,另外它将帮助Matlab在积分过程中确定适当的步长:

function xprime = RabbitTemp(t,X) 
% Model of Rabbit Population
% where,
%       Xo = Initial Population of Rabbits
%       X(1) = Population density of Rabbit
%       X(2) = Temperature T (that varies with time) 
%       X(3) = test parameter
%%% ODE
a  = 10;
Yo = 0.4; %Just some Constant
dx(1) = (X(1))*(1 - X(1)^(a) - Yo*(X(2))));
dx(2) = sin(t);
dx(3) = .... 
%%%%%%%
xprime = [dx(1) dx(2) dx(3)]';
end

第二种方法是为a=f(T)创建一个函数(-handle),并从xprime内部调用它:

function xprime = RabbitTemp(t,X) 
% Model of Rabbit Population
% where,
%       Xo = Initial Population of Rabbits
%       X(1) = Population density of Rabbit
%       X(2) = Temperature T (that varies with time) 
%       a = test parameter
%%% ODE
a  = f_a(t,X);
Yo = 0.4; %Just some Constant
dx(1) = (X(1))*(1 - X(1)^(a) - Yo*(X(2))));
dx(2) = sin(t);
%%%%%%%
xprime = [dx(1) dx(2)]';
end
function a = f_a(t,X)
  return 10;  % You might want to change this. 
end

如果可能的话,选择第一个为a创建另一个状态的变体。

最新更新