ODE - 求解变量的参数[Matlab]

时间:2015-06-08 15:26:48

标签: matlab parameter-passing ode

假设我有一个像这样的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求解器计算的那样。

我知道我首先必须在 a X(2)之间创建一些数据并进行插值。但在那之后,我不太确定下一步是什么。任何人都能指出我正确的方向吗?

或者还有其他方法吗?

1 个答案:

答案 0 :(得分:1)

这实际上取决于a a=f(T)的功能。如果您可以使用f(T)的导数,我建议您将a包含为另一个状态,例如X(3),然后您可以从{{1}中的X参数中访问它很容易,加上它将帮助Matlab在集成期间确定正确的步长:

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) % 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 创建一个函数(-handle)并从a=f(T)内调用它:

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 创建另一个状态的第一个变体。