Matlab Taking a Long Time To Solve
Afficher commentaires plus anciens
Hello everyone,
I have 11 equations and 11 unknowns in a linear system. I am trying to solve them using the symbolic solver.
There are two types of expressions:
- (a12*a23 - a13*a22)*(a33*zref - a33*(zo1 + zref) + zr1 - zref - zt1)/(a11*a22*a33 - a11*a23*a32 - a12*a21*a33 + a12*a23*a31 + a13*a21*a32 - a13*a22*a31) + (-a12*a33 + a13*a32)*(a23*zref - a23*(zo1 + zref) + zr1*(-cy + yp1)/svf)/(a11*a22*a33 - a11*a23*a32 - a12*a21*a33 + a12*a23*a31 + a13*a21*a32 - a13*a22*a31) + (a22*a33 - a23*a32)*(a13*zref - a13*(zo1 + zref) + zr1*(-cx + xp1)/suf)/(a11*a22*a33 - a11*a23*a32 - a12*a21*a33 + a12*a23*a31 + a13*a21*a32 - a13*a22*a31) == (b12*b23 - b13*b22)*(b33*zref - b33*(zo1 + zref) + zc1 - zref - zt2)/(b11*b22*b33 - b11*b23*b32 - b12*b21*b33 + b12*b23*b31 + b13*b21*b32 - b13*b22*b31) + (-b12*b33 + b13*b32)*(b23*zref - b23*(zo1 + zref) + zc1*(-cy + ypp1)/svf)/(b11*b22*b33 - b11*b23*b32 - b12*b21*b33 + b12*b23*b31 + b13*b21*b32 - b13*b22*b31) + (b22*b33 - b23*b32)*(b13*zref - b13*(zo1 + zref) + zc1*(-cx + xpp1)/suf)/(b11*b22*b33 - b11*b23*b32 - b12*b21*b33 + b12*b23*b31 + b13*b21*b32 - b13*b22*b31),
2. -a13*(zr1*(-cx + xp1)/suf - zr2*(-cx + xp2)/suf) - a23*(zr1*(-cy + yp1)/svf - zr2*(-cy + yp2)/svf) - a33*(zr1 - zr2) ==0,
The unknowns in the above two examples being solved for are zo1, zr1, zt1, zt2,zc1. The other 9 equations are the same as these two but having different variable names. The coefficients (eg. a12,a13,zref, etc.. ) have squared terms when multiplied out but the variables being solved for are linear terms.
I was expecting a relatively fast solution as it is a linear system but I left it running overnight for 10 hours and it didn't solve. Some of the terms might be able to be simplified, can anyone recommend how to solve this faster.
Also, if there is no solution will Matlab let me know sooner or will it keep running forever ? I am not sure whether to stop the solver or not. I some cases it runs for a long time and then runs out of memory on my local machine, and on the online version, I have to keep clicking the screen or it times out which is untenable for longer solve operations.
Any advise or assistance would be appreciated. Thanks.
Réponses (1)
You might try the following code, but without substituting numerical values for the variables apart from the solution variables, it's a very hard job for MATLAB to solve this symbolic 11x11 linear system.
clc, clear
syms zo1 zo2 xt1 yt1 xt2 yt2 zor1 zoc1 xop1 yop1 xopp1 yopp1 zr1 zr2 zr3 zr4 zt1 zc1 zc2 zc3 zc4 zt2 b11 b12 b13 b21 b22 b23 b31 b32 b33 dz12 dz13 dz14 dz15 dz16 xr yr zr c1 c2 c3 c4 c5 c6 a b c div zref r zt1 rotx roty rotz roll1 yaw1 tilt1 xpp12 ypp12 xpp13 ypp13 xpp14 ypp14 suf svf xr1 yr1 zr1 su sv mx1 f xt yt zt cx cy rx1 ry1 rz1 rx2 ry2 rz2 rx3 ry3 rz3 a11 a12 a13 a21 a22 a23 a31 a32 a33 ap11 ap12 ap13 ap21 ap22 ap23 ap31 ap32 ap33 x1 y1 z1 x2 y2 z2 x3 y3 z3 x4 y4 z4 x5 y5 z5 x6 y6 z6 x7 y7 z7 x8 y8 z8 x9 y9 z9 x10 y10 z10 x11 y11 z11 xp4 yp4 xpp4 ypp4 xp1 yp1 xp2 yp2 xp3 yp3 xp4 yp4 xp5 yp5 xp6 yp6 xp7 yp7 xp8 yp8 xp9 yp9 xp10 yp10 xp11 yp11 xpp1 ypp1 xpp2 ypp2 xpp3 ypp3 xpp4 ypp4 xpp5 ypp5 xpp6 ypp6 xpp7 ypp7 xpp8 ypp8 xpp9 ypp9 xpp10 ypp10 xpp11 ypp11 zt
eqns = [
(a12*a23 - a13*a22)*(a33*zref - a33*(zo1 + zref) + zr1 - zref - zt1)/(a11*a22*a33 - a11*a23*a32 - a12*a21*a33 + a12*a23*a31 + a13*a21*a32 - a13*a22*a31) + (-a12*a33 + a13*a32)*(a23*zref - a23*(zo1 + zref) + zr1*(-cy + yp1)/svf)/(a11*a22*a33 - a11*a23*a32 - a12*a21*a33 + a12*a23*a31 + a13*a21*a32 - a13*a22*a31) + (a22*a33 - a23*a32)*(a13*zref - a13*(zo1 + zref) + zr1*(-cx + xp1)/suf)/(a11*a22*a33 - a11*a23*a32 - a12*a21*a33 + a12*a23*a31 + a13*a21*a32 - a13*a22*a31) == (b12*b23 - b13*b22)*(b33*zref - b33*(zo1 + zref) + zc1 - zref - zt2)/(b11*b22*b33 - b11*b23*b32 - b12*b21*b33 + b12*b23*b31 + b13*b21*b32 - b13*b22*b31) + (-b12*b33 + b13*b32)*(b23*zref - b23*(zo1 + zref) + zc1*(-cy + ypp1)/svf)/(b11*b22*b33 - b11*b23*b32 - b12*b21*b33 + b12*b23*b31 + b13*b21*b32 - b13*b22*b31) + (b22*b33 - b23*b32)*(b13*zref - b13*(zo1 + zref) + zc1*(-cx + xpp1)/suf)/(b11*b22*b33 - b11*b23*b32 - b12*b21*b33 + b12*b23*b31 + b13*b21*b32 - b13*b22*b31),
(a12*a23 - a13*a22)*(a33*zref - a33*(zo1 + zref) + zr2 - zref - zt1)/(a11*a22*a33 - a11*a23*a32 - a12*a21*a33 + a12*a23*a31 + a13*a21*a32 - a13*a22*a31) + (-a12*a33 + a13*a32)*(a23*zref - a23*(zo1 + zref) + zr2*(-cy + yp2)/svf)/(a11*a22*a33 - a11*a23*a32 - a12*a21*a33 + a12*a23*a31 + a13*a21*a32 - a13*a22*a31) + (a22*a33 - a23*a32)*(a13*zref - a13*(zo1 + zref) + zr2*(-cx + xp2)/suf)/(a11*a22*a33 - a11*a23*a32 - a12*a21*a33 + a12*a23*a31 + a13*a21*a32 - a13*a22*a31) == (b12*b23 - b13*b22)*(b33*zref - b33*(zo1 + zref) + zc2 - zref - zt2)/(b11*b22*b33 - b11*b23*b32 - b12*b21*b33 + b12*b23*b31 + b13*b21*b32 - b13*b22*b31) + (-b12*b33 + b13*b32)*(b23*zref - b23*(zo1 + zref) + zc2*(-cy + ypp2)/svf)/(b11*b22*b33 - b11*b23*b32 - b12*b21*b33 + b12*b23*b31 + b13*b21*b32 - b13*b22*b31) + (b22*b33 - b23*b32)*(b13*zref - b13*(zo1 + zref) + zc2*(-cx + xpp2)/suf)/(b11*b22*b33 - b11*b23*b32 - b12*b21*b33 + b12*b23*b31 + b13*b21*b32 - b13*b22*b31),
(a12*a23 - a13*a22)*(a33*zref - a33*(zo1 + zref) + zr3 - zref - zt1)/(a11*a22*a33 - a11*a23*a32 - a12*a21*a33 + a12*a23*a31 + a13*a21*a32 - a13*a22*a31) + (-a12*a33 + a13*a32)*(a23*zref - a23*(zo1 + zref) + zr3*(-cy + yp3)/svf)/(a11*a22*a33 - a11*a23*a32 - a12*a21*a33 + a12*a23*a31 + a13*a21*a32 - a13*a22*a31) + (a22*a33 - a23*a32)*(a13*zref - a13*(zo1 + zref) + zr3*(-cx + xp3)/suf)/(a11*a22*a33 - a11*a23*a32 - a12*a21*a33 + a12*a23*a31 + a13*a21*a32 - a13*a22*a31) == (b12*b23 - b13*b22)*(b33*zref - b33*(zo1 + zref) + zc3 - zref - zt2)/(b11*b22*b33 - b11*b23*b32 - b12*b21*b33 + b12*b23*b31 + b13*b21*b32 - b13*b22*b31) + (-b12*b33 + b13*b32)*(b23*zref - b23*(zo1 + zref) + zc3*(-cy + ypp3)/svf)/(b11*b22*b33 - b11*b23*b32 - b12*b21*b33 + b12*b23*b31 + b13*b21*b32 - b13*b22*b31) + (b22*b33 - b23*b32)*(b13*zref - b13*(zo1 + zref) + zc3*(-cx + xpp3)/suf)/(b11*b22*b33 - b11*b23*b32 - b12*b21*b33 + b12*b23*b31 + b13*b21*b32 - b13*b22*b31),
(a12*a23 - a13*a22)*(a33*zref - a33*(zo1 + zref) + zr4 - zref - zt1)/(a11*a22*a33 - a11*a23*a32 - a12*a21*a33 + a12*a23*a31 + a13*a21*a32 - a13*a22*a31) + (-a12*a33 + a13*a32)*(a23*zref - a23*(zo1 + zref) + zr4*(-cy + yp4)/svf)/(a11*a22*a33 - a11*a23*a32 - a12*a21*a33 + a12*a23*a31 + a13*a21*a32 - a13*a22*a31) + (a22*a33 - a23*a32)*(a13*zref - a13*(zo1 + zref) + zr4*(-cx + xp4)/suf)/(a11*a22*a33 - a11*a23*a32 - a12*a21*a33 + a12*a23*a31 + a13*a21*a32 - a13*a22*a31) == (b12*b23 - b13*b22)*(b33*zref - b33*(zo1 + zref) + zc4 - zref - zt2)/(b11*b22*b33 - b11*b23*b32 - b12*b21*b33 + b12*b23*b31 + b13*b21*b32 - b13*b22*b31) + (-b12*b33 + b13*b32)*(b23*zref - b23*(zo1 + zref) + zc4*(-cy + ypp4)/svf)/(b11*b22*b33 - b11*b23*b32 - b12*b21*b33 + b12*b23*b31 + b13*b21*b32 - b13*b22*b31) + (b22*b33 - b23*b32)*(b13*zref - b13*(zo1 + zref) + zc4*(-cx + xpp4)/suf)/(b11*b22*b33 - b11*b23*b32 - b12*b21*b33 + b12*b23*b31 + b13*b21*b32 - b13*b22*b31),
(-a11*a23 + a13*a21)*(a33*zref - a33*(zo1 + zref) + zr4 - zref - zt1)/(a11*a22*a33 - a11*a23*a32 - a12*a21*a33 + a12*a23*a31 + a13*a21*a32 - a13*a22*a31) + (a11*a33 - a13*a31)*(a23*zref - a23*(zo1 + zref) + zr4*(-cy + yp4)/svf)/(a11*a22*a33 - a11*a23*a32 - a12*a21*a33 + a12*a23*a31 + a13*a21*a32 - a13*a22*a31) + (-a21*a33 + a23*a31)*(a13*zref - a13*(zo1 + zref) + zr4*(-cx + xp4)/suf)/(a11*a22*a33 - a11*a23*a32 - a12*a21*a33 + a12*a23*a31 + a13*a21*a32 - a13*a22*a31) == (-b11*b23 + b13*b21)*(b33*zref - b33*(zo1 + zref) + zc4 - zref - zt2)/(b11*b22*b33 - b11*b23*b32 - b12*b21*b33 + b12*b23*b31 + b13*b21*b32 - b13*b22*b31) + (b11*b33 - b13*b31)*(b23*zref - b23*(zo1 + zref) + zc4*(-cy + ypp4)/svf)/(b11*b22*b33 - b11*b23*b32 - b12*b21*b33 + b12*b23*b31 + b13*b21*b32 - b13*b22*b31) + (-b21*b33 + b23*b31)*(b13*zref - b13*(zo1 + zref) + zc4*(-cx + xpp4)/suf)/(b11*b22*b33 - b11*b23*b32 - b12*b21*b33 + b12*b23*b31 + b13*b21*b32 - b13*b22*b31),
-a13*(zr1*(-cx + xp1)/suf - zr2*(-cx + xp2)/suf) - a23*(zr1*(-cy + yp1)/svf - zr2*(-cy + yp2)/svf) - a33*(zr1 - zr2) ==0,
-a13*(zr2*(-cx + xp2)/suf - zr3*(-cx + xp3)/suf) - a23*(zr2*(-cy + yp2)/svf - zr3*(-cy + yp3)/svf) - a33*(zr2 - zr3) ==0,
-a13*(zr3*(-cx + xp3)/suf - zr4*(-cx + xp4)/suf) - a23*(zr3*(-cy + yp3)/svf - zr4*(-cy + yp4)/svf) - a33*(zr3 - zr4) ==0,
-b13*(zc1*(-cx + xpp1)/suf - zc2*(-cx + xpp2)/suf) - b23*(zc1*(-cy + ypp1)/svf - zc2*(-cy + ypp2)/svf) - b33*(zc1 - zc2) ==0,
-b13*(zc2*(-cx + xpp2)/suf - zc3*(-cx + xpp3)/suf) - b23*(zc2*(-cy + ypp2)/svf - zc3*(-cy + ypp3)/svf) - b33*(zc2 - zc3) ==0,
-b13*(zc3*(-cx + xpp3)/suf - zc4*(-cx + xpp4)/suf) - b23*(zc3*(-cy + ypp3)/svf - zc4*(-cy + ypp4)/svf) - b33*(zc3 - zc4) ==0,
]
[M,b] = equationsToMatrix(eqns,[zr1,zr2,zr3,zr4,zt1,zc1,zc2,zc3,zc4,zt2,zo1])
sol = M\b
Catégories
En savoir plus sur Function Handles dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!