Построение промежуточных переменных в решателе ode45 в Matlab

208
Sam

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

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

0 ответов на вопрос

Похожие вопросы