ode return NaN :(

6 vues (au cours des 30 derniers jours)
ZH CC
ZH CC le 20 Avr 2022
Commenté : ZH CC le 20 Avr 2022
clc;clear;
Gamma = 5/3;
Lambda = (Gamma+1)/2;
syms y(t) x(t)
eqn1 = diff(y,2)*(y-x) == Lambda/2*diff(y)*(diff(x)-diff(y)/Lambda);
a = sqrt(Gamma*(Lambda-1))/Lambda;
dts = (y-x)/(a*diff(y));
Pp = 1/0.08*(t-dts);
pip = Pp/(1/Lambda);
eqn2 = diff(x,2)*y == (pip-diff(y)^2/Lambda);
eqn = [eqn1 eqn2];
[V,S] = odeToVectorField(eqn);
M = matlabFunction(V,'vars',{'t','Y'});
interval = [0 2];
yInit = [0 0 0 0];
ySol = ode45(M,interval,yInit);
tValues = linspace(0,2,10);
xValues = deval(ySol,tValues,1);
zValues = deval(ySol,tValues,3);
xValues =
0 NaN NaN NaN NaN NaN NaN NaN NaN NaN
In fact, I want to calculate this equation.
  1 commentaire
Torsten
Torsten le 20 Avr 2022
You divide by Zdot which is 0 for t=0.

Connectez-vous pour commenter.

Réponse acceptée

Sam Chak
Sam Chak le 20 Avr 2022
Modifié(e) : Sam Chak le 20 Avr 2022
The odeToVectorField(eqn) returns this
V =
Y[2]
-(9*Y[4]^3 - 160*5^(1/2)*Y[1] + 160*5^(1/2)*Y[3] - 200*t*Y[4])/(12*Y[3]*Y[4])
Y[4]
-((4*Y[2] - 3*Y[4])*Y[4])/(6*(Y[1] - Y[3]))
S =
x
Dx
y
Dy
and you can clearly see the divisions by and . Since the initial values are , and , naturally, the ode45 solver returns NaN.
Hope you are satisfied with this Answer.
  1 commentaire
ZH CC
ZH CC le 20 Avr 2022
Thanks a lot, this is really good tips.

Connectez-vous pour commenter.

Plus de réponses (1)

Steven Lord
Steven Lord le 20 Avr 2022
What is at time t = 0? By your formula 14 it is times other stuff. Let's ignore that other stuff and look at the value of that term. Well, all of Z(0), X(0), and (0) are 0 by your formula 17. So that term is which MATLAB correctly computes as NaN.
My guess is that at least one of Z(0), X(0), and (0) must not be 0. In particular, because Z-X appears in the denominator I think one or both of those must be non-zero (and not equal to each other) for your equations to make sense.
  1 commentaire
ZH CC
ZH CC le 20 Avr 2022
Thank you very much for your answer.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Programming dans Help Center et File Exchange

Tags

Produits

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by