![]() |
System of 3 non-linear equations in 3 unknowns (how-to-solve?) - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: General Coding Help (https://python-forum.io/forum-8.html) +--- Thread: System of 3 non-linear equations in 3 unknowns (how-to-solve?) (/thread-16978.html) |
System of 3 non-linear equations in 3 unknowns (how-to-solve?) - samsonite - Mar-23-2019 This detailed screenshot http://imgbox.com/qFBxoHWd shows how I've solved, in the old past, the system by means of a MatLab function (fsolve), and I'ld like to know if a similar (short) way exists in Python. Algorithms are listed below: May I have some drifts to reach the goal? Thanks in advance Edit. For short way I mean the use of an intrinsic function to avoid the classical procedure via an iterative method and related jacobian matrix. RE: System of 3 non-linear equations in 3 unknowns (how-to-solve?) - scidam - Mar-23-2019 Your code would be almost the same, if you rewrote it in Python. from math import pi, sin, tan, cos from scipy.optimize import fsolve def equations(x): rad = pi / 180; l1 = 150.210355; s1 = -38.913290; d1 = -11.185833; l2 = 180.308440; s2 = -14.878290; d2 = 14.545555; l3 = 223.495977; s3 = 20.492543; d3 = -8.679444; l1 = l1 * rad; s1 = s1 * rad; t1 = tan(d1 * rad); l2 = l2 * rad; s2 = s2 * rad; t2 = tan(d2 * rad); l3 = l3 * rad; s3 = s3 * rad; t3 = tan(d3 * rad); return (sin(x[0]+s1)-tan(x[2]+l1)*(cos(x[0]+s1)* sin(x[1])- t1* cos(x[1])), sin(x[0]+s2)-tan(x[2]+l2)*(cos(x[0]+s2)* sin(x[1])- t2* cos(x[1])), sin(x[0]+s3)-tan(x[2]+l3)*(cos(x[0]+s3)* sin(x[1])- t3* cos(x[1]))) fsolve(equations, [10 * pi / 180, 50 * pi / 180, 0]) Note: It is not pythonic way to use ; to separate statements, so, it is desirable to rewrite each assignment in a new line.
RE: System of 3 non-linear equations in 3 unknowns (how-to-solve?) - samsonite - Mar-23-2019 Wonderful solution, scidam! Just added the output of coords in degrees. Thank you very much, and cheers # ---------- sist_3eq.py ----------- from math import pi, sin, tan, cos from scipy.optimize import fsolve def equations(x): rad = pi / 180; l1 = 150.210355; s1 = -38.913290; d1 = -11.185833; l2 = 180.308440; s2 = -14.878290; d2 = 14.545555; l3 = 223.495977; s3 = 20.492543; d3 = -8.679444; l1 = l1 * rad; s1 = s1 * rad; t1 = tan(d1 * rad); l2 = l2 * rad; s2 = s2 * rad; t2 = tan(d2 * rad); l3 = l3 * rad; s3 = s3 * rad; t3 = tan(d3 * rad); return (sin(x[0]+s1)-tan(x[2]+l1)*(cos(x[0]+s1)* sin(x[1])- t1* cos(x[1])), sin(x[0]+s2)-tan(x[2]+l2)*(cos(x[0]+s2)* sin(x[1])- t2* cos(x[1])), sin(x[0]+s3)-tan(x[2]+l3)*(cos(x[0]+s3)* sin(x[1])- t3* cos(x[1]))) print(fsolve(equations, [10 * pi / 180, 50 * pi / 180, 0])) a= fsolve(equations, [10 * pi / 180, 50 * pi / 180, 0]) print(a[0]*180/pi,a[1]*180/pi) # coords in degrees # ------- OUTPUT ---------- # C:\Training>python sist_3eq.py # [2.61799394e-01 6.45771810e-01 1.20245548e-08] # 15.00000038215297 36.99999924200017 # ------------------------- |