Trigonometric functions using dsolve

This code works well. How can I use sin(theta2) instead of theta2. Its giving me error.
syms theta1(t) theta2(t) theta3(t)
ode1= diff(theta1)== 1+theta2-theta1;
ode2= diff(theta2)==1+ theta3-theta2;
ode3= diff(theta3)== theta2-theta3;
odes=[ode1;ode2; ode3];
S=dsolve(odes);
theta1Sol(t) = S.theta1;
theta2Sol(t)=S.theta2;
theta3Sol(t)=S.theta3;
cond1 = theta1(0) == 0.1;
cond2 = theta2(0) == 0.3;
cond3 = theta3(0) == 0.2;
conds = [cond1; cond2; cond3];
[theta1Sol(t),theta2Sol(t), theta3Sol] = dsolve(odes,conds)
theta1Sol(t) = 
theta2Sol(t) = 
theta3Sol = 
fplot(theta1Sol)
hold on
fplot(theta2Sol)
grid on
fplot(theta3Sol)
grid on
legend('theta1Sol','theta2Sol','theta2Sol','Location','best')

7 commentaires

When you say to use sin(theta2) instead of theta2 are you referring to all three places where theta2 appears in
ode1= diff(theta1)== 1+theta2-theta1;
ode2= diff(theta2)==1+ theta3-theta2;
ode3= diff(theta3)== theta2-theta3;
??
And would
cond2 = theta2(0) == 0.3;
change to
cond2 = sin(theta2(0)) == 0.3;
??
ode1= diff(theta1)== 1+sin(theta2)-theta1;
Like this and the conditions remaining same.
Torsten
Torsten le 5 Avr 2022
Before, your system of ODEs was linear - easy to solve.
Now it's nonlinear and an analytical solution with dsolve out of reach.
How do I calculate a numerical solution with this?
If I use vpasolve getting the same error
syms theta1(t) theta2(t) theta3(t)
ode1= diff(theta1)== 1+sin(theta2)-theta1;
ode2= diff(theta2)==1+ theta2-theta2;
ode3= diff(theta3)== theta2-theta3;
odes=[ode1;ode2; ode3];
S=vpasolve(odes);
theta1Sol(t) = S.theta1;
theta2Sol(t) = S.theta2;
theta3Sol(t) = S.theta3;
cond1 = theta1(0) == 0.1;
cond2 = theta2(0) == 0.3;
cond3 = theta3(0) == 0.2;
conds = [cond1; cond2; cond3];
[theta1Sol(t),theta2Sol(t), theta3Sol] = dsolve(odes,conds);
fplot(theta1Sol)
hold on
fplot(theta2Sol)
grid on
fplot(theta3Sol)
grid on
legend('theta1Sol','theta2Sol','theta2Sol','Location','best')
How do I solve it using ode45 ? having a hard time

Connectez-vous pour commenter.

Réponses (2)

syms theta_1(t) sin_theta_2(t) theta_3(t)
ode1 = diff(theta_1) == 1 + sin_theta_2 - theta_1;
ode2 = diff(sin_theta_2) == 1 + theta_3 - sin_theta_2;
ode3 = diff(theta_3) == sin_theta_2 - theta_3;
odes = [ode1; ode2; ode3];
Snc = dsolve(odes)
Snc = struct with fields:
sin_theta_2: C1 + t/2 - exp(-2*t)*(C2 - exp(2*t)/4) theta_1: C1 + t/2 + exp(-t)*(C3 + exp(t)) + exp(-2*t)*(C2 - exp(2*t)/4) theta_3: C1 + t/2 + exp(-2*t)*(C2 - exp(2*t)/4)
theta_1_Sol_nocond(t) = simplify(Snc.theta_1)
theta_1_Sol_nocond(t) = 
theta_2_Sol_nocond(t) = simplify(asin(Snc.sin_theta_2))
theta_2_Sol_nocond(t) = 
theta_3_Sol_nocond(t) = simplify(Snc.theta_3)
theta_3_Sol_nocond(t) = 
cond1 = theta_1(0) == 0.1;
cond2 = sin_theta_2(0) == 0.3;
cond3 = theta_3(0) == 0.2;
conds = [cond1; cond2; cond3];
Sc = dsolve(odes, conds);
theta_1_Sol_cond(t) = simplify(Sc.theta_1)
theta_1_Sol_cond(t) = 
theta_2_Sol_cond(t) = simplify(asin(Sc.sin_theta_2))
theta_2_Sol_cond(t) = 
theta_3_Sol_cond(t) = simplify(Sc.theta_3)
theta_3_Sol_cond(t) = 
fplot(theta_1_Sol_cond)
hold on
fplot(theta_2_Sol_cond)
grid on
fplot(theta_3_Sol_cond)
grid on
legend('theta1Sol','theta2Sol','theta2Sol','Location','best')
figure
lowerbound = solve(Sc.sin_theta_2 == -1)
lowerbound = 
upperbound = solve(Sc.sin_theta_2 == 1)
upperbound = 
bounds = double([lowerbound, upperbound])
bounds = 1×2
-0.8426 1.0491
fplot(theta_1_Sol_cond, bounds)
hold on
fplot(theta_2_Sol_cond, bounds)
grid on
fplot(theta_3_Sol_cond, bounds)
grid on
legend('theta1Sol','theta2Sol','theta2Sol','Location','best')

2 commentaires

Torsten
Torsten le 5 Avr 2022
Modifié(e) : Torsten le 5 Avr 2022
But this is not the solution to
ode1= diff(theta1)== 1+sin(theta2)-theta1;
ode2= diff(theta2)==1+ theta3-theta2;
ode3= diff(theta3)== theta2-theta3;
cond1 = theta1(0) == 0.1;
cond2 = theta2(0) == 0.3;
cond3 = theta3(0) == 0.2;
Walter Roberson
Walter Roberson le 5 Avr 2022
At the time I was composing this, there had not been a reply indicating where the sin() was intended to go.

Connectez-vous pour commenter.

Torsten
Torsten le 5 Avr 2022
fun = @(t,theta) [1+sin(theta(2))-theta(1);1+theta(3)-theta(2);theta(2)-theta(3)];
theta0 = [0.1, 0.3, 0.2];
tspan = [0,2*pi]
[t,theta] = ode45(fun,tspan,theta0)
plot(t,theta)

Catégories

En savoir plus sur Programming dans Centre d'aide et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by