Почему моя третья функция MATLAB выводит только нули при использовании ode45? - PullRequest
0 голосов
/ 05 декабря 2018

Мне нужно смоделировать отрицательную, положительную и простую регуляцию гена для моего класса системной биологии с использованием MATLAB.Проблема в том, что функции для отрицательного и простого регулирования работают, но функция положительного регулирования выводит только нули.

Мой скрипт выглядит следующим образом:

% Simulation of simple regulation, negative autoregulation and positive
% autoregulation

% Define constants
global a b K n 
a = 1;
b = 1;
K = 0.5;
n = 2; % Hill coefficient


% Simulation time
tspan = [0,10];

% Initial condition
X0 = 0;

% Run simulations
[t1,X1] = ode45(@autoregulation_f0,tspan,X0); % Simple regulation
[t2,X2] = ode45(@autoregulation_f1,tspan,X0); % Negative autoregulation
[t3,X3] = ode23(@autoregulation_f2,tspan,X0); % Positive autoregulation
% Plot results
figure;
plot(t1,X1,t2,X2,t3,X3);
legend('simple','negative','Location','southeast');

И мои функции:

function dxdt = autoregulation_f0(t,X)
    global a b
    dxdt = b - a*X;
end


function dxdt = autoregulation_f1(t,X)
    global a b K n
    dxdt = b/(1+(X^n)/(K^n)) - a*X;
end

function dxdt = autoregulation_f2(t,X)
    global a b K n 
    dxdt = b*X.^n./(K.^n+X.^n) + a*X;
end

Третья функция "autoregulation_f2 (t, X)" это та, котораявыводит нули и поэтому при построении графика я просто получаю прямую линию.

Кто-нибудь знает, что может быть причиной этого?

Заранее спасибо!

1 Ответ

0 голосов
/ 05 декабря 2018

Это выглядит как правильный результат для данной функции.У вашего dxdt есть X в каждом семестре.Первоначальный X0=0 приведет к dxdt=0, без изменений в X.В результате вы просто получаете плоскую линию.

...