Trigonometric functions using dsolve

조회 수: 9 (최근 30일)
Urmish Hemant Haribhakti Parikh
댓글: Walter Roberson 2022년 4월 5일
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
Urmish Hemant Haribhakti Parikh
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')
Urmish Hemant Haribhakti Parikh
How do I solve it using ode45 ? having a hard time

댓글을 달려면 로그인하십시오.

답변 (2개)

Walter Roberson
Walter Roberson 2022년 4월 5일
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
Torsten
Torsten 2022년 4월 5일
편집: Torsten 2022년 4월 5일
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 2022년 4월 5일
At the time I was composing this, there had not been a reply indicating where the sin() was intended to go.

댓글을 달려면 로그인하십시오.


Torsten
Torsten 2022년 4월 5일
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)

카테고리

Help CenterFile Exchange에서 Ordinary Differential Equations에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by