Help solve a system of Differential Equations

1 vue (au cours des 30 derniers jours)
Le Duc Long
Le Duc Long le 22 Juin 2020
Commenté : Le Duc Long le 22 Juin 2020
Hi everybody,
I have code to solve a system of Differential Equations with matrix. I do not know my mistakes. When I run my, error in my code " Undefined operator '*' for input arguments of type 'function_handle'.Error in osc (line 22) odes=diff(P)==(0.2*A+s*B)*P;"
Can you see it and help me fix it. Thanks so much!
----------------------------------------------
This is my code:
T=100; g=0.5*T; n=3;s0=0.5;lamda=0.2;
% khai bao ham xa xe (KNTH)
s=@(t)(s0).*(((t-floor(t/T)*T)<g))+(0)*(((t-floor(t/T)*T)>g));
t=linspace(0,500);
plot(t,s(t));
grid;
% Khai bao mt A vuong cap n+2
syms p1(t) p2(t) p3(t) p4(t) p5(t)
A=[-1 0 0 0 0;
1 -1 0 0 0;
0 1 -1 0 0;
0 0 1 -1 0;
0 0 0 1 0];
B=[0 1 0 0 0;
0 -1 1 0 0;
0 0 -1 1 0;
0 0 0 -1 1;
0 0 0 0 -1];
P=[p1; p2; p3; p4; p5];
odes=diff(P)==(0.2*A+s*B)*P;
[p1Sol(t),p2Sol(t),p3Sol(t),p4Sol(t),p5Sol(t)]=dsolve(odes);
C=P(0)==[1;0;0;0;0];
[p1Sol(t),p2Sol(t),p3Sol(t),p4Sol(t),p5Sol(t)]=dsolve(odes,C);
clf
fplot(p1Sol)
hold on
fplot(p2Sol)
hold on
fplot(p3Sol)
hold on
fplot(p4Sol)
hold on
fplot(p5Sol)
grid on
legend('p1Sol','p2Sol','p3Sol','p4Sol','p5Sol','Location','best')
-----------------------------------
  2 commentaires
John D'Errico
John D'Errico le 22 Juin 2020
Since this is purely a numerical ODE solve, why are you using dsolve, instead of perhaps ODE45?
Le Duc Long
Le Duc Long le 22 Juin 2020
Hi John D'Errico,
Thanks for your anwser. I tried to solve with fix value of function s(t) with dsolve and it was ok. So i think maybe use dsolve. I think that the problem with my code at "odes=diff(P)==(0.2*A+s*B)*P;". Because s=s(t). How your opion about this?
syms p1(t) p2(t) p3(t) p4(t) p5(t)
A=[-1 0 0 0 0;
1 -1 0 0 0;
0 1 -1 0 0;
0 0 1 -1 0;
0 0 0 1 0];
B=[0 1 0 0 0;
0 -1 1 0 0;
0 0 -1 1 0;
0 0 0 -1 1;
0 0 0 0 -1];
P=[p1; p2; p3; p4; p5];
odes=diff(P)==(0.5*A+B)*P;
[p1Sol(t),p2Sol(t),p3Sol(t),p4Sol(t),p5Sol(t)]=dsolve(odes);
C=P(0)==[1;0;0;0;0];
[p1Sol(t),p2Sol(t),p3Sol(t),p4Sol(t),p5Sol(t)]=dsolve(odes,C);
clf
fplot(p1Sol)
hold on
fplot(p2Sol)
hold on
fplot(p3Sol)
hold on
fplot(p4Sol)
hold on
fplot(p5Sol)
grid on
legend('p1Sol','p2Sol','p3Sol','p4Sol','p5Sol','Location','best')

Connectez-vous pour commenter.

Réponse acceptée

Walter Roberson
Walter Roberson le 22 Juin 2020
Modifié(e) : Walter Roberson le 22 Juin 2020
syms t
s = piecewise((t-floor(t/T)*T)<g,s0,0);
fplot(s, [0 500])
%do not do the numeric assignment to t
Note that you do did explicitly define s for the case where the expression exactly equals g, but the numeric logic you used would have come out as 0 for that case anyhow.
  1 commentaire
Le Duc Long
Le Duc Long le 22 Juin 2020
Thanks Walter Roberson,
Can you explain for me this error meaning?
% Tham so dau vao
T=100; g=0.5*T; n=3;s0=0.5;lamda=0.2;
% khai bao ham xa xe (KNTH)
syms t
s = piecewise((t-floor(t/T)*T)<g,s0,0);
fplot(s,[0 500]);
% Khai bao mt A vuong cap n+2
syms p1(t) p2(t) p3(t) p4(t) p5(t)
A=[-1 0 0 0 0;
1 -1 0 0 0;
0 1 -1 0 0;
0 0 1 -1 0;
0 0 0 1 0];
B=[0 1 0 0 0;
0 -1 1 0 0;
0 0 -1 1 0;
0 0 0 -1 1;
0 0 0 0 -1];
P=[p1; p2; p3; p4; p5];
odes=diff(P)==(0.2*A+s*B)*P;
[p1Sol(t),p2Sol(t),p3Sol(t),p4Sol(t),p5Sol(t)]=dsolve(odes);
C=P(0)==[1;0;0;0;0];
[p1Sol(t),p2Sol(t),p3Sol(t),p4Sol(t),p5Sol(t)]=dsolve(odes,C);
clf
fplot(p1Sol)
hold on
fplot(p2Sol)
hold on
fplot(p3Sol)
hold on
fplot(p4Sol)
hold on
fplot(p5Sol)
grid on
legend('p1Sol','p2Sol','p3Sol','p4Sol','p5Sol','Location','best')

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Symbolic Math Toolbox dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by