How can I make the solve function work faster?
Show older comments
I have formulated the following equation of motion. I am trying to create a control system using this. However, when I try to solve these equations for ddq, the generalized coordinate vector of acceleration, it takes a very long time. In some cases, I get out of memory errors.
Is this because the equations of motion I have derived are wrong? Or is this unavoidable due to the nature of Matlab? I would appreciate it if you could tell me how to improve it.
clear; format compact
syms Mb Mw Mh Mf real
syms Jh Jw Jb Jh Jf Lb Wi Wl r gravity real
syms thf dthf ddthf real
syms thm dthm ddthm real
syms thr dthr ddthr real
syms thl dthl ddthl real
syms taur taul taub real
syms Jm n Bm real
%the generalized coordinate vector of acceleration
ddq = [ ddthm ddthr ddthl ddthf]';
%equation of motion
eq = [
(2*Jb*Mb*Wi^2*ddthm - 2*Mf*Wi^2*taub - 2*Mh*Wi^2*taub - 4*Mw*Wi^2*taub - 2*Mb*Wi^2*taub + 2*Jb*Mf*Wi^2*ddthm + 2*Jb*Mh*Wi^2*ddthm + 4*Jb*Mw*Wi^2*ddthm + 2*Lb^2*Mb^2*Wi^2*ddthf + 2*Lb^2*Mb^2*Wi^2*ddthm - 2*Lb*Mb^2*Wi^2*gravity*sin(thf + thm) - Lb^2*Mb^2*dthl^2*r^2*sin(2*thf + 2*thm) - Lb^2*Mb^2*dthr^2*r^2*sin(2*thf + 2*thm) + 2*Bm*Mb*Wi^2*dthm*n^2 + 2*Bm*Mf*Wi^2*dthm*n^2 + 2*Bm*Mh*Wi^2*dthm*n^2 + 4*Bm*Mw*Wi^2*dthm*n^2 - 2*Lb*Mb*Mf*Wi^2*gravity*sin(thf + thm) - 2*Lb*Mb*Mh*Wi^2*gravity*sin(thf + thm) - 4*Lb*Mb*Mw*Wi^2*gravity*sin(thf + thm) + Lb*Mb^2*Wi^2*ddthl*r*cos(thf + thm) + Lb*Mb^2*Wi^2*ddthr*r*cos(thf + thm) + 2*Lb^2*Mb^2*dthl*dthr*r^2*sin(2*thf + 2*thm) + 2*Lb*Mb*Mf*Wi^2*Wl*dthf^2*sin(thm) + Lb*Mb*Mf*Wl*dthl^2*r^2*sin(thm) + Lb*Mb*Mf*Wl*dthr^2*r^2*sin(thm) - Lb*Mb*Mf*Wl*dthl^2*r^2*sin(2*thf + thm) - Lb*Mb*Mf*Wl*dthr^2*r^2*sin(2*thf + thm) + Lb*Mb*Mf*Wi^2*ddthl*r*cos(thf + thm) + Lb*Mb*Mf*Wi^2*ddthr*r*cos(thf + thm) + Lb*Mb*Mh*Wi^2*ddthl*r*cos(thf + thm) + Lb*Mb*Mh*Wi^2*ddthr*r*cos(thf + thm) + 2*Lb*Mb*Mw*Wi^2*ddthl*r*cos(thf + thm) + 2*Lb*Mb*Mw*Wi^2*ddthr*r*cos(thf + thm) + 2*Lb*Mb*Mf*Wi^2*Wl*ddthf*cos(thm) - 2*Lb*Mb*Mf*Wl*dthl*dthr*r^2*sin(thm) + 2*Lb*Mb*Mf*Wl*dthl*dthr*r^2*sin(2*thf + thm))/(2*Wi^2*(Mb + Mf + Mh + 2*Mw)) == 0;
(4*Jw*Mb*Wi^2*ddthr - 4*Mf*Wi^2*taur - 4*Mh*Wi^2*taur - 8*Mw*Wi^2*taur - 4*Mb*Wi^2*taur + 4*Jw*Mf*Wi^2*ddthr + 4*Jw*Mh*Wi^2*ddthr + 8*Jw*Mw*Wi^2*ddthr - 4*Jh*Mb*ddthl*r^2 + 4*Jh*Mb*ddthr*r^2 - 4*Jh*Mf*ddthl*r^2 + 4*Jh*Mf*ddthr*r^2 - 4*Jh*Mh*ddthl*r^2 + 4*Jh*Mh*ddthr*r^2 - 8*Jh*Mw*ddthl*r^2 + 8*Jh*Mw*ddthr*r^2 - 2*Lb^2*Mb^2*ddthl*r^2 + 2*Lb^2*Mb^2*ddthr*r^2 + Mb^2*Wi^2*ddthl*r^2 + Mb^2*Wi^2*ddthr*r^2 + Mf^2*Wi^2*ddthl*r^2 + Mf^2*Wi^2*ddthr*r^2 + Mh^2*Wi^2*ddthl*r^2 + Mh^2*Wi^2*ddthr*r^2 - 2*Mf^2*Wl^2*ddthl*r^2 + 2*Mf^2*Wl^2*ddthr*r^2 + 4*Mw^2*Wi^2*ddthl*r^2 + 4*Mw^2*Wi^2*ddthr*r^2 + 2*Mf^2*Wl^2*ddthl*r^2*cos(2*thf) - 2*Mf^2*Wl^2*ddthr*r^2*cos(2*thf) + 2*Lb^2*Mb^2*ddthl*r^2*cos(2*thf + 2*thm) - 2*Lb^2*Mb^2*ddthr*r^2*cos(2*thf + 2*thm) + 2*Mb*Mf*Wi^2*ddthl*r^2 + 2*Mb*Mf*Wi^2*ddthr*r^2 + 2*Mb*Mh*Wi^2*ddthl*r^2 + 2*Mb*Mh*Wi^2*ddthr*r^2 + 2*Mf*Mh*Wi^2*ddthl*r^2 + 2*Mf*Mh*Wi^2*ddthr*r^2 + 4*Mb*Mw*Wi^2*ddthl*r^2 + 4*Mb*Mw*Wi^2*ddthr*r^2 + 4*Mf*Mw*Wi^2*ddthl*r^2 + 4*Mf*Mw*Wi^2*ddthr*r^2 + 4*Mh*Mw*Wi^2*ddthl*r^2 + 4*Mh*Mw*Wi^2*ddthr*r^2 - 2*Lb*Mb^2*Wi^2*dthf^2*r*sin(thf + thm) - 2*Lb*Mb^2*Wi^2*dthm^2*r*sin(thf + thm) - 2*Mf^2*Wi^2*Wl*dthf^2*r*sin(thf) + 2*Lb*Mb^2*Wi^2*ddthf*r*cos(thf + thm) + 2*Lb*Mb^2*Wi^2*ddthm*r*cos(thf + thm) - 4*Mf^2*Wl^2*dthf*dthl*r^2*sin(2*thf) + 4*Mf^2*Wl^2*dthf*dthr*r^2*sin(2*thf) + 2*Mf^2*Wi^2*Wl*ddthf*r*cos(thf) - 4*Lb^2*Mb^2*dthf*dthl*r^2*sin(2*thf + 2*thm) + 4*Lb^2*Mb^2*dthf*dthr*r^2*sin(2*thf + 2*thm) - 4*Lb^2*Mb^2*dthl*dthm*r^2*sin(2*thf + 2*thm) + 4*Lb^2*Mb^2*dthm*dthr*r^2*sin(2*thf + 2*thm) - 4*Lb*Mb^2*Wi^2*dthf*dthm*r*sin(thf + thm) - 2*Mb*Mf*Wi^2*Wl*dthf^2*r*sin(thf) - 2*Mf*Mh*Wi^2*Wl*dthf^2*r*sin(thf) - 4*Mf*Mw*Wi^2*Wl*dthf^2*r*sin(thf) + 2*Lb*Mb*Mf*Wi^2*ddthf*r*cos(thf + thm) + 2*Lb*Mb*Mf*Wi^2*ddthm*r*cos(thf + thm) + 2*Lb*Mb*Mh*Wi^2*ddthf*r*cos(thf + thm) + 2*Lb*Mb*Mh*Wi^2*ddthm*r*cos(thf + thm) + 4*Lb*Mb*Mw*Wi^2*ddthf*r*cos(thf + thm) + 4*Lb*Mb*Mw*Wi^2*ddthm*r*cos(thf + thm) - 4*Lb*Mb*Mf*Wl*ddthl*r^2*cos(thm) + 4*Lb*Mb*Mf*Wl*ddthr*r^2*cos(thm) + 2*Mb*Mf*Wi^2*Wl*ddthf*r*cos(thf) + 2*Mf*Mh*Wi^2*Wl*ddthf*r*cos(thf) + 4*Mf*Mw*Wi^2*Wl*ddthf*r*cos(thf) + 4*Lb*Mb*Mf*Wl*ddthl*r^2*cos(2*thf + thm) - 4*Lb*Mb*Mf*Wl*ddthr*r^2*cos(2*thf + thm) - 2*Lb*Mb*Mf*Wi^2*dthf^2*r*sin(thf + thm) - 2*Lb*Mb*Mf*Wi^2*dthm^2*r*sin(thf + thm) - 2*Lb*Mb*Mh*Wi^2*dthf^2*r*sin(thf + thm) - 2*Lb*Mb*Mh*Wi^2*dthm^2*r*sin(thf + thm) - 4*Lb*Mb*Mw*Wi^2*dthf^2*r*sin(thf + thm) - 4*Lb*Mb*Mw*Wi^2*dthm^2*r*sin(thf + thm) + 4*Lb*Mb*Mf*Wl*dthl*dthm*r^2*sin(thm) - 4*Lb*Mb*Mf*Wl*dthm*dthr*r^2*sin(thm) - 8*Lb*Mb*Mf*Wl*dthf*dthl*r^2*sin(2*thf + thm) + 8*Lb*Mb*Mf*Wl*dthf*dthr*r^2*sin(2*thf + thm) - 4*Lb*Mb*Mf*Wl*dthl*dthm*r^2*sin(2*thf + thm) + 4*Lb*Mb*Mf*Wl*dthm*dthr*r^2*sin(2*thf + thm) - 4*Lb*Mb*Mf*Wi^2*dthf*dthm*r*sin(thf + thm) - 4*Lb*Mb*Mh*Wi^2*dthf*dthm*r*sin(thf + thm) - 8*Lb*Mb*Mw*Wi^2*dthf*dthm*r*sin(thf + thm))/(4*Wi^2*(Mb + Mf + Mh + 2*Mw)) == 0;
(4*Jw*Mb*Wi^2*ddthl - 4*Mf*Wi^2*taul - 4*Mh*Wi^2*taul - 8*Mw*Wi^2*taul - 4*Mb*Wi^2*taul + 4*Jw*Mf*Wi^2*ddthl + 4*Jw*Mh*Wi^2*ddthl + 8*Jw*Mw*Wi^2*ddthl + 4*Jh*Mb*ddthl*r^2 - 4*Jh*Mb*ddthr*r^2 + 4*Jh*Mf*ddthl*r^2 - 4*Jh*Mf*ddthr*r^2 + 4*Jh*Mh*ddthl*r^2 - 4*Jh*Mh*ddthr*r^2 + 8*Jh*Mw*ddthl*r^2 - 8*Jh*Mw*ddthr*r^2 + 2*Lb^2*Mb^2*ddthl*r^2 - 2*Lb^2*Mb^2*ddthr*r^2 + Mb^2*Wi^2*ddthl*r^2 + Mb^2*Wi^2*ddthr*r^2 + Mf^2*Wi^2*ddthl*r^2 + Mf^2*Wi^2*ddthr*r^2 + Mh^2*Wi^2*ddthl*r^2 + Mh^2*Wi^2*ddthr*r^2 + 2*Mf^2*Wl^2*ddthl*r^2 - 2*Mf^2*Wl^2*ddthr*r^2 + 4*Mw^2*Wi^2*ddthl*r^2 + 4*Mw^2*Wi^2*ddthr*r^2 - 2*Mf^2*Wl^2*ddthl*r^2*cos(2*thf) + 2*Mf^2*Wl^2*ddthr*r^2*cos(2*thf) - 2*Lb^2*Mb^2*ddthl*r^2*cos(2*thf + 2*thm) + 2*Lb^2*Mb^2*ddthr*r^2*cos(2*thf + 2*thm) + 2*Mb*Mf*Wi^2*ddthl*r^2 + 2*Mb*Mf*Wi^2*ddthr*r^2 + 2*Mb*Mh*Wi^2*ddthl*r^2 + 2*Mb*Mh*Wi^2*ddthr*r^2 + 2*Mf*Mh*Wi^2*ddthl*r^2 + 2*Mf*Mh*Wi^2*ddthr*r^2 + 4*Mb*Mw*Wi^2*ddthl*r^2 + 4*Mb*Mw*Wi^2*ddthr*r^2 + 4*Mf*Mw*Wi^2*ddthl*r^2 + 4*Mf*Mw*Wi^2*ddthr*r^2 + 4*Mh*Mw*Wi^2*ddthl*r^2 + 4*Mh*Mw*Wi^2*ddthr*r^2 - 2*Lb*Mb^2*Wi^2*dthf^2*r*sin(thf + thm) - 2*Lb*Mb^2*Wi^2*dthm^2*r*sin(thf + thm) - 2*Mf^2*Wi^2*Wl*dthf^2*r*sin(thf) + 2*Lb*Mb^2*Wi^2*ddthf*r*cos(thf + thm) + 2*Lb*Mb^2*Wi^2*ddthm*r*cos(thf + thm) + 4*Mf^2*Wl^2*dthf*dthl*r^2*sin(2*thf) - 4*Mf^2*Wl^2*dthf*dthr*r^2*sin(2*thf) + 2*Mf^2*Wi^2*Wl*ddthf*r*cos(thf) + 4*Lb^2*Mb^2*dthf*dthl*r^2*sin(2*thf + 2*thm) - 4*Lb^2*Mb^2*dthf*dthr*r^2*sin(2*thf + 2*thm) + 4*Lb^2*Mb^2*dthl*dthm*r^2*sin(2*thf + 2*thm) - 4*Lb^2*Mb^2*dthm*dthr*r^2*sin(2*thf + 2*thm) - 4*Lb*Mb^2*Wi^2*dthf*dthm*r*sin(thf + thm) - 2*Mb*Mf*Wi^2*Wl*dthf^2*r*sin(thf) - 2*Mf*Mh*Wi^2*Wl*dthf^2*r*sin(thf) - 4*Mf*Mw*Wi^2*Wl*dthf^2*r*sin(thf) + 2*Lb*Mb*Mf*Wi^2*ddthf*r*cos(thf + thm) + 2*Lb*Mb*Mf*Wi^2*ddthm*r*cos(thf + thm) + 2*Lb*Mb*Mh*Wi^2*ddthf*r*cos(thf + thm) + 2*Lb*Mb*Mh*Wi^2*ddthm*r*cos(thf + thm) + 4*Lb*Mb*Mw*Wi^2*ddthf*r*cos(thf + thm) + 4*Lb*Mb*Mw*Wi^2*ddthm*r*cos(thf + thm) + 4*Lb*Mb*Mf*Wl*ddthl*r^2*cos(thm) - 4*Lb*Mb*Mf*Wl*ddthr*r^2*cos(thm) + 2*Mb*Mf*Wi^2*Wl*ddthf*r*cos(thf) + 2*Mf*Mh*Wi^2*Wl*ddthf*r*cos(thf) + 4*Mf*Mw*Wi^2*Wl*ddthf*r*cos(thf) - 4*Lb*Mb*Mf*Wl*ddthl*r^2*cos(2*thf + thm) + 4*Lb*Mb*Mf*Wl*ddthr*r^2*cos(2*thf + thm) - 2*Lb*Mb*Mf*Wi^2*dthf^2*r*sin(thf + thm) - 2*Lb*Mb*Mf*Wi^2*dthm^2*r*sin(thf + thm) - 2*Lb*Mb*Mh*Wi^2*dthf^2*r*sin(thf + thm) - 2*Lb*Mb*Mh*Wi^2*dthm^2*r*sin(thf + thm) - 4*Lb*Mb*Mw*Wi^2*dthf^2*r*sin(thf + thm) - 4*Lb*Mb*Mw*Wi^2*dthm^2*r*sin(thf + thm) - 4*Lb*Mb*Mf*Wl*dthl*dthm*r^2*sin(thm) + 4*Lb*Mb*Mf*Wl*dthm*dthr*r^2*sin(thm) + 8*Lb*Mb*Mf*Wl*dthf*dthl*r^2*sin(2*thf + thm) - 8*Lb*Mb*Mf*Wl*dthf*dthr*r^2*sin(2*thf + thm) + 4*Lb*Mb*Mf*Wl*dthl*dthm*r^2*sin(2*thf + thm) - 4*Lb*Mb*Mf*Wl*dthm*dthr*r^2*sin(2*thf + thm) - 4*Lb*Mb*Mf*Wi^2*dthf*dthm*r*sin(thf + thm) - 4*Lb*Mb*Mh*Wi^2*dthf*dthm*r*sin(thf + thm) - 8*Lb*Mb*Mw*Wi^2*dthf*dthm*r*sin(thf + thm))/(4*Wi^2*(Mb + Mf + Mh + 2*Mw)) == 0;
(2*Jf*Mb*Wi^2*ddthf + 2*Jf*Mf*Wi^2*ddthf + 2*Jf*Mh*Wi^2*ddthf + 4*Jf*Mw*Wi^2*ddthf + 2*Lb^2*Mb^2*Wi^2*ddthf + 2*Lb^2*Mb^2*Wi^2*ddthm + 2*Mf^2*Wi^2*Wl^2*ddthf - 2*Lb*Mb^2*Wi^2*gravity*sin(thf + thm) - 2*Mf^2*Wi^2*Wl*gravity*sin(thf) - Mf^2*Wl^2*dthl^2*r^2*sin(2*thf) - Mf^2*Wl^2*dthr^2*r^2*sin(2*thf) - Lb^2*Mb^2*dthl^2*r^2*sin(2*thf + 2*thm) - Lb^2*Mb^2*dthr^2*r^2*sin(2*thf + 2*thm) - 2*Lb*Mb*Mf*Wi^2*gravity*sin(thf + thm) - 2*Lb*Mb*Mh*Wi^2*gravity*sin(thf + thm) - 4*Lb*Mb*Mw*Wi^2*gravity*sin(thf + thm) - 2*Mb*Mf*Wi^2*Wl*gravity*sin(thf) - 2*Mf*Mh*Wi^2*Wl*gravity*sin(thf) - 4*Mf*Mw*Wi^2*Wl*gravity*sin(thf) + Lb*Mb^2*Wi^2*ddthl*r*cos(thf + thm) + Lb*Mb^2*Wi^2*ddthr*r*cos(thf + thm) + 2*Mf^2*Wl^2*dthl*dthr*r^2*sin(2*thf) + Mf^2*Wi^2*Wl*ddthl*r*cos(thf) + Mf^2*Wi^2*Wl*ddthr*r*cos(thf) + 2*Lb^2*Mb^2*dthl*dthr*r^2*sin(2*thf + 2*thm) - 2*Lb*Mb*Mf*Wi^2*Wl*dthm^2*sin(thm) - 2*Lb*Mb*Mf*Wl*dthl^2*r^2*sin(2*thf + thm) - 2*Lb*Mb*Mf*Wl*dthr^2*r^2*sin(2*thf + thm) + Lb*Mb*Mf*Wi^2*ddthl*r*cos(thf + thm) + Lb*Mb*Mf*Wi^2*ddthr*r*cos(thf + thm) + Lb*Mb*Mh*Wi^2*ddthl*r*cos(thf + thm) + Lb*Mb*Mh*Wi^2*ddthr*r*cos(thf + thm) + 2*Lb*Mb*Mw*Wi^2*ddthl*r*cos(thf + thm) + 2*Lb*Mb*Mw*Wi^2*ddthr*r*cos(thf + thm) + 4*Lb*Mb*Mf*Wi^2*Wl*ddthf*cos(thm) + 2*Lb*Mb*Mf*Wi^2*Wl*ddthm*cos(thm) + Mb*Mf*Wi^2*Wl*ddthl*r*cos(thf) + Mb*Mf*Wi^2*Wl*ddthr*r*cos(thf) + Mf*Mh*Wi^2*Wl*ddthl*r*cos(thf) + Mf*Mh*Wi^2*Wl*ddthr*r*cos(thf) + 2*Mf*Mw*Wi^2*Wl*ddthl*r*cos(thf) + 2*Mf*Mw*Wi^2*Wl*ddthr*r*cos(thf) - 4*Lb*Mb*Mf*Wi^2*Wl*dthf*dthm*sin(thm) + 4*Lb*Mb*Mf*Wl*dthl*dthr*r^2*sin(2*thf + thm))/(2*Wi^2*(Mb + Mf + Mh + 2*Mw)) == 0
];
%It's going to take a lot of time.
sol = solve(eq, ddq);
Accepted Answer
More Answers (0)
Categories
Find more on Code Performance in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

