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

Can*_*Man 1 matlab for-loop ode

让我们说我有一个简单的逻辑方程

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

所以我想要做的是绘制我的固定点和两个参数的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
Run Code Online (Sandbox Code Playgroud)

接下来是我的解算器

% 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.
Run Code Online (Sandbox Code Playgroud)

所以我真正的问题是,如何在两个函数之间放置一个for循环,这允许我改变aN,这样我就可以绘制出aN以及我的固定点x*的3D图形.

我尝试将两个函数合并到一个.m文件中,但它似乎不起作用

am3*_*304 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
Run Code Online (Sandbox Code Playgroud)

然后当你调用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
Run Code Online (Sandbox Code Playgroud)