Zeichnen von Zwischenvariablen im ode45-Löser in Matlab

326
Sam

Ich habe ein System von drei Differentialgleichungen, die ich in einem benutzerdefinierten Funktion definieren Differential :

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

Die Zwischenvariablen, die zum Lösen der obigen drei Differentialgleichungen verwendet werden, sind wie folgt:

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

Derzeit nenne ich die Differentialfunktion in Hauptfunktion und die Differentialfunktionen in der Handlung Hauptfunktion:

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

Mein Problem ist, dass ich auch einige Zwischenvariablen plotten muss. Also, ich bin verwirrt darüber, wo sie definieren, das heißt, wenn sie in der festgelegt werden sollen Hauptfunktion oder in der Differentialfunktion, wie zu speichern, und wie diese Variablen nennen.

Idealerweise hätte ich gerne den Code, um sowohl die Differentialfunktionen als auch die Zwischenvariablen in der Hauptfunktion aufzuzeichnen. Aber ich kann nicht verstehen, ob das möglich ist. Kann jemand bitte beraten? Vielen Dank!

- Sam

0

0 Antworten auf die Frage