ODE - 求解依赖于变量的参数 [Matlab]
ODE - Solving Parameter Dependent on Variable [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 求解器计算的那样。
我知道我首先必须在 a 和 X(2) 之间创建一些数据并对其进行插值。但在那之后我不太确定接下来会发生什么。谁能指出我正确的方向?
或者有其他方法吗?
真的要看a的功能了,a=f(T)
。如果您可以使用 f(T)
的导数,我建议您将 a
作为另一个状态包含在内,例如 X(3)
然后您可以从 X
中的参数访问它 xprime
很容易,加上它将帮助 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)
创建一个函数(句柄)并从 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
创建另一个状态的第一个变体。
假设我有一个这样的 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) 之间创建一些数据并对其进行插值。但在那之后我不太确定接下来会发生什么。谁能指出我正确的方向?
或者有其他方法吗?
真的要看a的功能了,a=f(T)
。如果您可以使用 f(T)
的导数,我建议您将 a
作为另一个状态包含在内,例如 X(3)
然后您可以从 X
中的参数访问它 xprime
很容易,加上它将帮助 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)
创建一个函数(句柄)并从 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
创建另一个状态的第一个变体。