Plotando variáveis intermediárias no solucionador ode45 no Matlab

0

Eu tenho um sistema de três equações diferenciais que defino em uma função definida pelo usuário diferencial :

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);

As variáveis intermediárias usadas para resolver as três equações diferenciais acima são as seguintes:

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);

Atualmente, eu chamo a função diferencial na função main e plotei as funções diferenciais na função main :

[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');

Meu problema é que eu preciso também plotar algumas das variáveis intermediárias. Então, eu estou confuso sobre onde defini-los, ou seja, se eles devem ser definidos na função main ou na função diferencial , como armazenar e como chamar estas variáveis.

Eu gostaria idealmente de ter o código para representar tanto as funções diferenciais como as variáveis intermediárias na função principal. Mas não consigo entender se isso é possível. Alguém pode por favor avisar? Obrigada!

Sam

    
por Sam 17.07.2018 / 17:22

0 respostas

Tags