У меня есть система из трех дифференциальных уравнений, которые я определяю в определяемой пользователем функции дифференциала:

function dvdt = differential(t,v)
global rho kappa phi tau xi N1 N2 p b delta alpha mu sigma c_t theta lambda;
dvdt = zeros(3,1);
g=v(1); x1=v(2); x2=v(3);
dvdt(1) = rho - kappa*(N1*(1-x1)*g1 + N2*(1-x2)*g2);
dvdt(2) = phi*x1*(pi_t1-pi_1);
dvdt(3) = phi*x2*(pi_t2-pi_2);

Промежуточные переменные, которые используются для решения вышеупомянутых трех дифференциальных уравнений, являются следующими:

g1 = min(g/(kappa*(N1*(1-x1)+N2*(1-x2))),gstar);
g2 = min(g/(kappa*(N1*(1-x1)+N2*(1-x2))),gstar);
c_g = max(tau*(xi-g),0) + delta;
gstar = (p-c_g)/(2*b);
M = alpha*(N1*x1+N2*x2) + mu*(N1*(1-x1)+N2*(1-x2));
R= (1 - theta/(1+(lambda*M))) * (sigma);
tstar = (p-c_t)/(2*b);
t1 = min(R/(N1*(1-x1)+N2*(1-x2)),tstar);
t2 = max((R-N1*x1*t1)/(N2*(1-x2)), 0);
pi_t1 = max((p*t1(:,1) - b*t1.^2 - c_t*t1(:,1) - alpha),0);
pi_t2 = max((p*t2(:,1) - b*t2.^2 - c_t*t2(:,1) - alpha),0);
pi_g1 = max((p*g1(:,1) - b*g1.^2 - c_g*g1(:,1) - mu),0);
pi_g2 = max((p*g2(:,1) - b*g2.^2 - c_g*g2(:,1) - mu),0);
pi_1=pi_t1*x1+pi_g1*(1-x1);
pi_2=pi_t2*x2+pi_g2*(1-x2);

В настоящее время я вызываю дифференциальную функцию в главной функции и отображаю дифференциальные функции в главной функции:

[T, V] = ode45(@(t,v) differential(t,v), [0:1/200:20], [G0 X1_init X2_init]);
gt = V(:, 1); x1t = V(:, 2);x2t = V(:, 3); 
plot(x1t, x2t, 'k');

Моя проблема в том, что мне нужно также построить несколько промежуточных переменных. Итак, меня смущает вопрос о том, где их определять, т. Е. Должны ли они быть определены в основной функции или в дифференциальной функции, как хранить и как вызывать эти переменные.

В идеале я хотел бы иметь код для построения как дифференциальных функций, так и промежуточных переменных в основной функции. Но я не могу понять, возможно ли это. Может кто-нибудь, пожалуйста, посоветуйте? Спасибо!

Сэм

0