Using the solve function to find two angles

%a = fixed
%b = input
%c = input
%d = input
theta1 = [0:(1/180)*pi:2*pi];
for i = 1:361 syms theta2 theta4
eqn1 = a*cos(theta1(1,i)) + b*cos(theta2) - c - d*cos(theta4) == 0;
eqn2 = a*sin(theta1(1,i)) + b*sin(theta2) - c - d*sin(theta4) == 0;
sol = solve([eqn1,eqn2],[theta2,theta4]);
theta2Sol = (sol.theta2/pi)*180
theta4Sol = sol.theta4;
end
but the angles keep ending up as -(360*atan(102692670702549213410139403465476252652214531027842517147110598871^(1/2)/1309425174537674753319526986678195 - 173509832707425326512723168591872/436475058179224917773175662226065))/pi (360*atan(102692670702549213410139403465476252652214531027842517147110598871^(1/2)/1309425174537674753319526986678195 + 173509832707425326512723168591872/436475058179224917773175662226065))/pi
there does not seem to be an issue with the inputs

Respuestas (1)

David Goodmanson
David Goodmanson el 28 de Jul. de 2017
Editada: David Goodmanson el 28 de Jul. de 2017
Hi s,
When the angles are real, there are two solutions to these equations.
S = 1 % the second set of solutions has S = -1
x = c*(1+i) -a*exp(i*th1);
th42 = S*acos((abs(x).^2-b^2-d^2)/(-2*b*d)); % th(4)-th(2)
th2 = angle(x./(b-d*exp(i*th42)));
th4 = th2 + th42;
This follows from the complex form of the two equations:
b*exp(i*th2) -d*exp(i*th4) = c*(1+i) - a*exp(i*th1)
You could combine all of this into a symbolic expression, or you could bypass symbolic, make this into a function and feed it a vector of angles th1. The resulting angles are real when the expressions are geometrically possible, complex if not.

Categorías

Más información sobre Mathematics en Centro de ayuda y File Exchange.

Preguntada:

el 27 de Jul. de 2017

Editada:

el 28 de Jul. de 2017

Community Treasure Hunt

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

Start Hunting!

Translated by