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)
fplot(theta1Sol)
hold on
fplot(theta2Sol)
grid on
fplot(theta3Sol)
grid on
legend('theta1Sol','theta2Sol','theta2Sol','Location','best')
댓글 수: 7
Walter Roberson
2022년 4월 5일
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;
??
Urmish Hemant Haribhakti Parikh
2022년 4월 5일
Torsten
2022년 4월 5일
Before, your system of ODEs was linear - easy to solve.
Now it's nonlinear and an analytical solution with dsolve out of reach.
Urmish Hemant Haribhakti Parikh
2022년 4월 5일
Urmish Hemant Haribhakti Parikh
2022년 4월 5일
Urmish Hemant Haribhakti Parikh
2022년 4월 5일
Urmish Hemant Haribhakti Parikh
2022년 4월 5일
답변 (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)
theta_1_Sol_nocond(t) = simplify(Snc.theta_1)
theta_2_Sol_nocond(t) = simplify(asin(Snc.sin_theta_2))
theta_3_Sol_nocond(t) = simplify(Snc.theta_3)
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_2_Sol_cond(t) = simplify(asin(Sc.sin_theta_2))
theta_3_Sol_cond(t) = simplify(Sc.theta_3)
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)
upperbound = solve(Sc.sin_theta_2 == 1)
bounds = double([lowerbound, upperbound])
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
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
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
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)
카테고리
도움말 센터 및 File Exchange에서 Ordinary Differential Equations에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!




