how to solve the below non linear algebraic equation using matlab
이전 댓글 표시
How do we solve these two equations?
1.5 cos60 + 4.0 cos(x3) - 3.5 cos(x4) - 3.0 = 0
1.5 sin60 + 4.0 sin(x3) - 3.5 sin(x4) = 0
Since these are nonlinear algebraic equations, they can be solved numerically by iterative methods such as Newton-Raphson
답변 (2개)
Azzi Abdelmalek
2012년 12월 25일
편집: Azzi Abdelmalek
2012년 12월 25일
save this function myeq
function f=myeq(x)
f=[1.5*cos(60) + 4.0*cos(x(1)) - 3.5* cos(x(2)) - 3.0
1.5 *sin(60) + 4.0*sin(x(1)) - 3.5*sin(x(2))]
then call it
sol=fsolve(@myeq,[0;0])
Roger Stafford
2012년 12월 25일
You can perhaps get more insight into the solution of your equations if you proceed along lines such as the following. For convenience in notation rewrite the equations as
a*cos(u) = b*cos(v) + c
a*sin(u) = b*sin(v) + d
where u = x3, v = x4, a = 4, b = 3.5, c = 3-1.5*cos60, d = -1.5*sin60. Now square both sides of both equations and add them to obtain
a^2*cos(u)^2+a^2*sin(u)^2 = (b*cos(v)+c)^2+(b*sin(v)+d)^2
a^2 = b^2+2*b*(c*cos(v)+d*sin(v))+c^2+d^2
c*cos(v)+d*sin(v) = (a^2-b^2-c^2-d^2)/(2*b)
Now divide both sides by sqrt(c^2+d^2)
(c/sqrt(c^2+d^2))*cos(v)+(d/sqrt(c^2+d^2))*sin(v) =
(a^2-b^2-c^2-d^2)/(2*b*sqrt(c^2+d^2))
Use atan2 to get
t = atan2(d,c)
which will satisfy c = sqrt(c^2+d^2)*cos(t), d = sqrt(c^2+d^2)*sin(t) so that we get
cos(t)*cos(v)+sin(t)*sin(v) = cos(v-t) =
(a^2-b^2-c^2-d^2)/(2*b*sqrt(c^2+d^2))
v = t + acos((a^2-b^2-c^2-d^2)/(2*b*sqrt(c^2+d^2)))
This will have two solutions within the interval from -pi to +pi. Then to get u from v do
u = atan2((b*sin(v)+d)/a,(b*cos(v)+c)/a)
In other words it all reduces to the two matlab lines:
v = atan2(d,c) + acos((a^2-b^2-c^2-d^2)/(2*b*sqrt(c^2+d^2)));
u = atan2((b*sin(v)+d)/a,(b*cos(v)+c)/a);
except that you have to allow acos to have two solutions, one the negative of the other.
Much more satisfying in my opinion than a mindless solution from 'fsolve' where you may not be informed that there are infinitely many solutions (though of course more mental effort.)
Roger Stafford
댓글 수: 2
P Anand Raju
2012년 12월 25일
Roger Stafford
2012년 12월 25일
I assumed by sin60 and cos60 you meant the sine and cosine of 60 degrees. I used those formulas I gave you with these values and arrived at
e1 = 0
e2 = 2.2204e-16
For the other pair with the acos result sign reversed I got
e1 = -4.4409e-16
e2 = -4.4409e-16
That's about as close to zero as you are going to get on a machine with 53-bit significands.
Roger Stafford
카테고리
도움말 센터 및 File Exchange에서 Systems of Nonlinear Equations에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!