使用Matlab解决ODE,具有不同的参数

时间:2014-12-22 14:34:49

标签: matlab for-loop ode

假设我有一个简单的逻辑方程

dx / dt = 2ax(1 - x / N) 其中 N 是承载能力, a 是一些增长率,而 a N 是我想要改变的参数。

所以我想做的是绘制我的固定点和两个参数的3D图。

我理解如何找到单个参数的固定点。

这是我的示例代码

function xprime = MyLogisticFunction(t,X) %% The ODE

% Parameters
N = 10 % Carrying Capacity
a = 0.5 % Growth Rate

x1prime = 2*a*X(1)*(1 - X(1)/N );

xprime = [x1prime ]';

end

接下来是我的解算器

% Initial Number 
x0 = 0.4;

%Time Window
tspan=[0 100];

[t,x]=ode45(@MyLogisticFunction,tspan,x0);

clf

x(end,1) % This gives me the fixed point for the parameters above.

所以我真正的问题是,如何在两个函数中放置 for循环,这样我就可以改变 a N ,这样我就可以绘制 a N 和我的固定点x *。

我尝试将这两个函数合并到一个.m文件中,但它似乎无法正常工作

1 个答案:

答案 0 :(得分:5)

您需要将参数传递给您的函数:

function xprime = MyLogisticFunction(t,X,a,N) %% The ODE

% Parameters (passed as function arguments)
% N = 10 % Carrying Capacity
% a = 0.5 % Growth Rate

x1prime = 2*a*X(1)*(1 - X(1)/N );

xprime = [x1prime ]';

end

然后当你调用ode求解器时:

% Initial Number 
x0 = 0.4;

%Time Window
tspan=[0 100];

a = 0.1:0.1:1; % or whatever
N = 1:10; % or whatever
x_end = zeros(length(a),length(N));

for ii = 1:length(a)
    for jj = 1:length(N)
        [t,x]=ode45(@(t,X)MyLogisticFunction(t,X,a(ii),N(jj)),tspan,x0);
        x_end(ii,jj) = x(end,1);
    end
end