Help solve a system of Differential Equations

1 Ansicht (letzte 30 Tage)
Le Duc Long
Le Duc Long am 22 Jun. 2020
Kommentiert: Le Duc Long am 22 Jun. 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 Kommentare
John D'Errico
John D'Errico am 22 Jun. 2020
Since this is purely a numerical ODE solve, why are you using dsolve, instead of perhaps ODE45?
Le Duc Long
Le Duc Long am 22 Jun. 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')

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Walter Roberson
Walter Roberson am 22 Jun. 2020
Bearbeitet: Walter Roberson am 22 Jun. 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 Kommentar
Le Duc Long
Le Duc Long am 22 Jun. 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')

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Symbolic Math Toolbox finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by