MATLAB: résultat du problème du solveur ODE45

J’ai 5 équations différentielles et quelques équations supplémentaires que je veux résoudre pour 5 variables.
Le problème est que si vous regardez le graphique, vous voyez que les résultats ne correspondent pas. dh / dt devrait être -u1 (t) mais ce n’est pas le cas dans les graphiques. Je ne sais pas où ça va mal dans mon code.
Si je mets les équations pour u1 (t), u2 (t) et ud (t) dans les équations, on obtient les mêmes résultats qui me semblent étranges. Comment puis-je écrire le code de sorte que toutes les équations soient vraies?
 
clear all;
ds = 18.32
ws = 45
br = 0.0015
bd = 0.0015
rho = 1019
g = 9.81
us = 0.06
massvessel = ds * ws * rho
wd = 1.13
syms u1(t) u2(t) ud(t) h(t) wr(t) T Y
u1(t) == (-us * ds + wr(t) * u2(t))/wr(t);
u2(t) == (us*ds + wr(t)* u1(t))/wr(t);
ud(t) == (u2(t)*wr(t))/wd;
Eqns = [diff(u1(t),t) == g*(h(t)/ds) - br * (u1(t));
diff(u2(t),t) == -g * (h(t)/ds) - br * (u2(t));
diff(ud(t),t) == -g * (h(t)/ws) - bd * (ud(t));
diff(h(t),t) == - u1(t);
diff(wr(t),t) == -us];
[DEsys,Subs] = odeToVectorField(Eqns);
DEfcn = matlabFunction(DEsys, 'Vars',{T,Y});
tspan = linspace(0, 200, 251);
Y0 = [0; 0; 0; 0; 30]+0.001;
[T, Y] = ode45(DEfcn, tspan, Y0);
 

Meilleure réponse

  • le‘==’sont corrects ici. Ce sont des équations symboliques, pas des opérations logiques. Sinon, je serais d’accord.
    De plus, votre code fonctionne correctement. leintégrévaleur«H (t)»apparaîtra différent de«-U1 (t)» caril est intégré. Si vous complotez«U1 (t)»(intégré comme‘Y(:,2)’) contre lanégatifdudérivéde«H (t)»:
     

    figure
    plot(T,Y(:,2), '-b', T,-gradient(Y(:,4),tspan(2)), '--r')
    grid