Help solve a system of Differential Equations
1 view (last 30 days)
Show older comments
Le Duc Long
on 22 Jun 2020
Commented: Le Duc Long
on 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 Comments
John D'Errico
on 22 Jun 2020
Since this is purely a numerical ODE solve, why are you using dsolve, instead of perhaps ODE45?
Accepted Answer
Walter Roberson
on 22 Jun 2020
Edited: Walter Roberson
on 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.
More Answers (0)
See Also
Categories
Find more on Calculus in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!