How can i use dsolve and symbolic expressions in for loop?
조회 수: 1 (최근 30일)
이전 댓글 표시
Hi,
In my code, i have to change initial conditions for each step to solve the diff. eqs., so i use for loop.
To solve the eqs, i select dsolve command but at the solutions, i still see my state variables.
And, code doesn't apply initial conditions of x2.
I cannot fix the problem.
Is there a practial way to make it?
Thx!
clear all
clc
u_input=[5 6 7];
x1_inl=[10 11 21];
x2_inl=[10 56 1];
for p1=1:1:3;
syms x1 x2 u
alfa_f(p1)=u-(40*x1/4)-(x1/18);
alfa_r(p1)=(30*x1/5)-(x1/9);
Prl(p1)=atand(alfa_r(p1));
Prr(p1)=atand(alfa_r(p1));
Pfl(p1)=atand(alfa_f(p1));
Pfr(p1)=atand(alfa_f(p1));
x1_dot(p1)=Prl(p1)/1500+Prr(p1)/1500+Pfr(p1)/1500+Pfl(p1)/1500-40*x1;
x2_dot(p1)=((Pfl(p1)+Pfr(p1))*10/1800)+((Prl(p1)+Prr(p1))*15/1500);
x1_dot(p1)=subs(x1_dot(p1),{x1 x2 u},{x1 x2 u_input(p1)});
x2_dot(p1)=subs(x1_dot(p1),{x1 x2 u},{x1 x2 u_input(p1)});
syms x1(t) x2(t) u
ode1(p1)=diff(x1,t)==x1_dot(p1);
ode2(p1)=diff(x2,t)==x2_dot(p1);
odes{:,p1}=sym2cell([ode1(p1); ode2(p1)]);
cond1(p1)=x1(0)==x1_inl(p1);
cond2(p1)=x2(0)==x2_inl(p1);
conds{:,p1}=sym2cell([cond1(p1); cond2(p1)]);
x0{p1}=dsolve(cell2sym(odes{:,p1}),cell2sym(conds{:,p1}));
x0{:,p1}=(struct2cell(x0{p1}));
xx0(p1,:)=[x0{1,p1}{1,1}, x0{1,p1}{2,1}] %Solutions for 3 different initial cond.s
end
댓글 수: 0
채택된 답변
Walter Roberson
2020년 11월 6일
편집: Walter Roberson
2020년 11월 9일
syms x1 x2 u
[...]
syms x1(t) x2(t) u
You are redefining x1 and x2. When you do that, MATLAB will not update previous references to x1 and x2.
The situation is very similar to as if you had done
a = 1;
b = a * 10;
a = 2;
When you do the assignment to b, the current value of a at the time of statement execution is copied and used to calculate b, and then b forgets all about how it was defined. The a = 2 after that does not suddenly have b evaluate to 20 .
Just so when you use syms x1 and calculate with x1 then all those expressions copy the x1 that is not a function. Then you replace x1 with something else, and when you do that, the expressions that used the non-function x1 do not suddenly get changed to use the function x1.
댓글 수: 0
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Symbolic Math Toolbox에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!