Can MATLAB solve systems of nonlinear equations?
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Asatur Khurshudyan
le 14 Juil 2011
Commenté : Walter Roberson
le 25 Mar 2016
During investigation of one problem, I find out a system of seven nonlinear algebraic equations, which analytic solution is need. Can MATLAB give me the analytic solution of that system?
0 commentaires
Réponse acceptée
Walter Roberson
le 14 Juil 2011
If MATLAB can do it at all, it would have to be by way of the Symbolic Toolbox.
A lot of the time, simultaneous nonlinear equations have no known analytic solution method.
If you could give us examples, we might be able to estimate the possibility of success.
2 commentaires
Walter Roberson
le 14 Juil 2011
It looks to me like something the Symbolic Toolbox might reasonably be able to solve. My experience suggests, though, that with that many simultaneous equations, you will need a fair bit of memory and probably a number of hours of computing to solve it.
Are there any restrictions on the xi values? Do you only want the real-valued solutions? Only the non-negative solutions?
Plus de réponses (3)
Walter Roberson
le 15 Juil 2011
If you subs() in the definitions for A, B, C, D_ in to the other 7 equations, and simplify() that, and solve, you end up with 18 solutions of various complexities, with up to 4 free variables. The least complex single solution is:
[x1 = 0, x2 = x2, x3 = 0, x4 = x4, x5 = 0, x6 = (1-x2*c2-x4*c4)/c6, x7 = x7]
where x2 = x2 means that x2 is allowed to assume any value.
Here are the 18 solutions, in Maple notation. Be sure to read the comments following them:
[x1 = RootOf(_Z^2+x3^2+x5^2), x2 = (-RootOf(_Z^2+x3^2+x5^2)*c1-x3*c3-x4*c4-x5*c5-x6*c6+1)/c2, x3 = x3, x4 = x4, x5 = x5, x6 = x6, x7 = x7]
[x1 = RootOf(_Z^2+x3^2+x5^2), x2 = x2, x3 = x3, x4 = (-x5*(x5*c5+x2*c2+x3*c3-1)*RootOf(_Z^2+x3^2+x5^2)+(x3^2+x5^2)*(x5*c1-c6*x2))/RootOf(_Z^2+x3^2+x5
^2)/(c4*x5-x3*c6), x5 = x5, x6 = (x3*(x5*c5+x2*c2+x3*c3-1)*RootOf(_Z^2+x3^2+x5^2)-(x3^2+x5^2)*(x3*c1-c4*x2))/RootOf(_Z^2+x3^2+x5^2)/(c4*x5-x3*c6), x7
= x7]
[x1 = RootOf(_Z^2+c6^2+c4^2)*x3/c4, x2 = ((-x3*c6*c5+c4-x3*c4*c3)*RootOf(_Z^2+c6^2+c4^2)+c1*x3*(c6^2+c4^2))/c4/(RootOf(_Z^2+c6^2+c4^2)*c2+c4^2+c6^2),
x3 = x3, x4 = ((-c4^2*c1*x3-c1*x3*c6^2-x6*c6*c4*c2)*RootOf(_Z^2+c6^2+c4^2)-((x3*c3-1+x6*c6)*c4+x3*c6*c5)*(c6^2+c4^2))/c4^2/(RootOf(_Z^2+c6^2+c4^2)*c2
+c4^2+c6^2), x5 = x3*c6/c4, x6 = x6, x7 = x7]
[x1 = x1, x2 = (-x5*(x5*c5+x1*c1+x4*c4-1)*RootOf(_Z^2+x1^2+x5^2)+(x1^2+x5^2)*(c3*x5-c6*x4))/RootOf(_Z^2+x1^2+x5^2)/(-x1*c6+c2*x5), x3 = RootOf(_Z^2+
x1^2+x5^2), x4 = x4, x5 = x5, x6 = (x1*(x5*c5+x1*c1+x4*c4-1)*RootOf(_Z^2+x1^2+x5^2)+(x1^2+x5^2)*(-c3*x1+x4*c2))/RootOf(_Z^2+x1^2+x5^2)/(-x1*c6+c2*x5)
, x7 = x7]
[x1 = x1, x2 = ((-c2^2*c3*x1-x6*c6*c4*c2-c3*x1*c6^2)*RootOf(_Z^2+c6^2+c2^2)-(c6^2+c2^2)*((x1*c1-1+x6*c6)*c2+x1*c6*c5))/c2^2/(c6^2+RootOf(_Z^2+c6^2+c2
^2)*c4+c2^2), x3 = RootOf(_Z^2+c6^2+c2^2)*x1/c2, x4 = ((-x1*c6*c5+c2-c2*x1*c1)*RootOf(_Z^2+c6^2+c2^2)+c3*x1*(c6^2+c2^2))/c2/(c6^2+RootOf(_Z^2+c6^2+c2
^2)*c4+c2^2), x5 = x1*c6/c2, x6 = x6, x7 = x7]
[x1 = x1, x2 = (-x3*(x3*c3+x1*c1+x6*c6-1)*RootOf(_Z^2+x1^2+x3^2)-(x1^2+x3^2)*(c4*x6-x3*c5))/RootOf(_Z^2+x1^2+x3^2)/(-c4*x1+c2*x3), x3 = x3, x4 = (x1*
(x3*c3+x1*c1+x6*c6-1)*RootOf(_Z^2+x1^2+x3^2)+(x1^2+x3^2)*(-c5*x1+x6*c2))/RootOf(_Z^2+x1^2+x3^2)/(-c4*x1+c2*x3), x5 = RootOf(_Z^2+x1^2+x3^2), x6 = x6,
x7 = x7]
[x1 = x1, x2 = ((-c2^2*c5*x1-c5*x1*c4^2-c2*x4*c4*c6)*RootOf(_Z^2+c4^2+c2^2)-(c4^2+c2^2)*((x1*c1+x4*c4-1)*c2+x1*c3*c4))/c2^2/(c2^2+RootOf(_Z^2+c4^2+c2
^2)*c6+c4^2), x3 = c4*x1/c2, x4 = x4, x5 = RootOf(_Z^2+c4^2+c2^2)*x1/c2, x6 = ((-x1*c3*c4+c2-c2*x1*c1)*RootOf(_Z^2+c4^2+c2^2)+c5*x1*(c4^2+c2^2))/c2/(
c2^2+RootOf(_Z^2+c4^2+c2^2)*c6+c4^2), x7 = x7]
[x1 = x1, x2 = (-x5*(x5*c5+x1*c1+x4*c4-1)*RootOf(_Z^2+x1^2+x5^2)+(x1^2+x5^2)*(c3*x5-c6*x4))/RootOf(_Z^2+x1^2+x5^2)/(-x1*c6+c2*x5), x3 = RootOf(_Z^2+
x1^2+x5^2), x4 = x4, x5 = x5, x6 = (x1*(x5*c5+x1*c1+x4*c4-1)*RootOf(_Z^2+x1^2+x5^2)+(x1^2+x5^2)*(-c3*x1+x4*c2))/RootOf(_Z^2+x1^2+x5^2)/(-x1*c6+c2*x5)
, x7 = x7]
[x1 = 0, x2 = x2, x3 = 0, x4 = x4, x5 = 0, x6 = (1-x2*c2-x4*c4)/c6, x7 = x7]
[x1 = c2*x5/c6, x2 = x2, x3 = RootOf(_Z^2+c6^2+c2^2)*x5/c6, x4 = (-RootOf(_Z^2+c6^2+c2^2)*x5*c3-x5*c1*c2-x5*c5*c6+c6)/c6/(c4-RootOf(_Z^2+c6^2+c2^2)),
x5 = x5, x6 = (((x5*c5-1+x2*c2)*c6+x5*c1*c2)*RootOf(_Z^2+c6^2+c2^2)-c6*x2*c2*c4-c3*x5*c6^2-x5*c3*c2^2)/c6^2/(c4-RootOf(_Z^2+c6^2+c2^2)), x7 = x7]
[x1 = x1, x2 = (-x3*(x3*c3+x1*c1+x6*c6-1)*RootOf(_Z^2+x1^2+x3^2)-(x1^2+x3^2)*(c4*x6-x3*c5))/RootOf(_Z^2+x1^2+x3^2)/(-c4*x1+c2*x3), x3 = x3, x4 = (x1*
(x3*c3+x1*c1+x6*c6-1)*RootOf(_Z^2+x1^2+x3^2)+(x1^2+x3^2)*(-c5*x1+x6*c2))/RootOf(_Z^2+x1^2+x3^2)/(-c4*x1+c2*x3), x5 = RootOf(_Z^2+x1^2+x3^2), x6 = x6,
x7 = x7]
[x1 = c2*x3/c4, x2 = x2, x3 = x3, x4 = (((x2*c2+x3*c3-1)*c4+x3*c1*c2)*RootOf(_Z^2+c4^2+c2^2)-x3*c5*c4^2-c6*x2*c2*c4-c2^2*x3*c5)/c4^2/(-RootOf(_Z^2+c4
^2+c2^2)+c6), x5 = RootOf(_Z^2+c4^2+c2^2)*x3/c4, x6 = (-c5*RootOf(_Z^2+c4^2+c2^2)*x3-x3*c1*c2-x3*c4*c3+c4)/c4/(-RootOf(_Z^2+c4^2+c2^2)+c6), x7 = x7]
[x1 = x1, x2 = (-x3*(x3*c3+x1*c1+x6*c6-1)*RootOf(_Z^2+x1^2+x3^2)-(x1^2+x3^2)*(c4*x6-x3*c5))/RootOf(_Z^2+x1^2+x3^2)/(-c4*x1+c2*x3), x3 = x3, x4 = (x1*
(x3*c3+x1*c1+x6*c6-1)*RootOf(_Z^2+x1^2+x3^2)+(x1^2+x3^2)*(-c5*x1+x6*c2))/RootOf(_Z^2+x1^2+x3^2)/(-c4*x1+c2*x3), x5 = RootOf(_Z^2+x1^2+x3^2), x6 = x6,
x7 = x7]
[x1 = x1, x2 = (((x1*c1+x4*c4-1)*c2+x1*c3*c4)*RootOf(_Z^2+c4^2+c2^2)-c2^2*c5*x1-c5*x1*c4^2-c2*x4*c4*c6)/c2^2/(-RootOf(_Z^2+c4^2+c2^2)+c6), x3 = c4*x1
/c2, x4 = x4, x5 = RootOf(_Z^2+c4^2+c2^2)*x1/c2, x6 = (-c5*RootOf(_Z^2+c4^2+c2^2)*x1-x1*c3*c4+c2-c2*x1*c1)/c2/(-RootOf(_Z^2+c4^2+c2^2)+c6), x7 = x7]
[x1 = RootOf(_Z^2+x3^2+x5^2), x2 = (x3*RootOf(_Z^2+x3^2+x5^2)*c1+c3*x3^2+(x6*c6+x5*c5-1)*x3-c4*x5*x6)/(c4*RootOf(_Z^2+x3^2+x5^2)-c2*x3), x3 = x3, x4
= ((-x3*c3-x5*c5-x6*c6+1)*RootOf(_Z^2+x3^2+x5^2)+x3^2*c1+c1*x5^2+c2*x5*x6)/(c4*RootOf(_Z^2+x3^2+x5^2)-c2*x3), x5 = x5, x6 = x6, x7 = x7]
[x1 = RootOf(_Z^2+x3^2+x5^2), x2 = 1/2*((-2*c3*x3^2+(2-2*x5*c5+a*c6^2)*x3-c4*a*c6*x5)*RootOf(_Z^2+x3^2+x5^2)+2*x3^3*c1+(-x5*c6*a*c2+2*c1*x5^2)*x3+c4*
x5^2*a*c2)/x3/(c2*RootOf(_Z^2+x3^2+x5^2)+x3*c4+x5*c6), x3 = x3, x4 = 1/2*(-2*RootOf(_Z^2+x3^2+x5^2)*x3^2*c1+2*RootOf(_Z^2+x3^2+x5^2)*c2*a*c6*x5+a*c6^
2*x3^2+2*x3^2-2*x3^3*c3-2*c5*x3^2*x5+x5^2*c6^2*a-a*c2^2*x5^2)/x3/(c2*RootOf(_Z^2+x3^2+x5^2)+x3*c4+x5*c6), x5 = x5, x6 = 1/2*(((-c6*a*c2-2*x5*c1)*x3-
c2*x5*a*c4)*RootOf(_Z^2+x3^2+x5^2)+(-c4*c6*a-2*c3*x5)*x3^2+x5*(-2*x5*c5+2+a*c2^2)*x3-x5^2*a*c6*c4)/x3/(c2*RootOf(_Z^2+x3^2+x5^2)+x3*c4+x5*c6), x7 =
x7]
[x1 = x1, x2 = (((x1*c1+x4*c4-1)*c2+x1*c3*c4)*RootOf(_Z^2+c4^2+c2^2)-c2^2*c5*x1-c5*x1*c4^2-c2*x4*c4*c6)/c2^2/(-RootOf(_Z^2+c4^2+c2^2)+c6), x3 = c4*x1
/c2, x4 = x4, x5 = RootOf(_Z^2+c4^2+c2^2)*x1/c2, x6 = (-c5*RootOf(_Z^2+c4^2+c2^2)*x1-x1*c3*c4+c2-c2*x1*c1)/c2/(-RootOf(_Z^2+c4^2+c2^2)+c6), x7 = x7]
[x1 = RootOf((-8*c6*c4*c3*c5+4*c4^2*c5^2+4*c6^2*c3^2+4*c2^2*c5^2+4*c6^2*c1^2+4*c1^2*c4^2+4*c2^2*c3^2-8*c1*c4*c2*c3-8*c2*c1*c6*c5)*_Z^2+c6^2+c4^2+(4*
c4*c2*c3-4*c1*c4^2-4*c6^2*c1+4*c6*c2*c5)*_Z)*(2+(c2^2+c4^2+c6^2)*a), x2 = ((((-2*c1*c2-2*c5*c6)*a-4*x6*c5)*c4+2*c3*((c6^2+c2^2)*a+2*x6*c6))*RootOf((-
8*c6*c4*c3*c5+4*c4^2*c5^2+4*c6^2*c3^2+4*c2^2*c5^2+4*c6^2*c1^2+4*c1^2*c4^2+4*c2^2*c3^2-8*c1*c4*c2*c3-8*c2*c1*c6*c5)*_Z^2+c6^2+c4^2+(4*c4*c2*c3-4*c1*c4
^2-4*c6^2*c1+4*c6*c2*c5)*_Z)+a*c4*c2)/((-4*c3*c2+4*c1*c4)*RootOf((-8*c6*c4*c3*c5+4*c4^2*c5^2+4*c6^2*c3^2+4*c2^2*c5^2+4*c6^2*c1^2+4*c1^2*c4^2+4*c2^2*
c3^2-8*c1*c4*c2*c3-8*c2*c1*c6*c5)*_Z^2+c6^2+c4^2+(4*c4*c2*c3-4*c1*c4^2-4*c6^2*c1+4*c6*c2*c5)*_Z)-2*c4), x3 = -2*((-c2*c5+c6*c1)*RootOf((-8*c6*c4*c3*
c5+4*c4^2*c5^2+4*c6^2*c3^2+4*c2^2*c5^2+4*c6^2*c1^2+4*c1^2*c4^2+4*c2^2*c3^2-8*c1*c4*c2*c3-8*c2*c1*c6*c5)*_Z^2+c6^2+c4^2+(4*c4*c2*c3-4*c1*c4^2-4*c6^2*
c1+4*c6*c2*c5)*_Z)-1/2*c6)*(a*c6^2+2+(c4^2+c2^2)*a)/(-2*c5*c4+2*c6*c3), x4 = (((2*c4*c2*c3+2*c6*c2*c5-2*c1*c4^2-2*c6^2*c1)*a-4*(-c2*c5+c6*c1)*x6)*
RootOf((-8*c6*c4*c3*c5+4*c4^2*c5^2+4*c6^2*c3^2+4*c2^2*c5^2+4*c6^2*c1^2+4*c1^2*c4^2+4*c2^2*c3^2-8*c1*c4*c2*c3-8*c2*c1*c6*c5)*_Z^2+c6^2+c4^2+(4*c4*c2*
c3-4*c1*c4^2-4*c6^2*c1+4*c6*c2*c5)*_Z)+(c6^2+c4^2)*a+2*x6*c6)/((-4*c3*c2+4*c1*c4)*RootOf((-8*c6*c4*c3*c5+4*c4^2*c5^2+4*c6^2*c3^2+4*c2^2*c5^2+4*c6^2*
c1^2+4*c1^2*c4^2+4*c2^2*c3^2-8*c1*c4*c2*c3-8*c2*c1*c6*c5)*_Z^2+c6^2+c4^2+(4*c4*c2*c3-4*c1*c4^2-4*c6^2*c1+4*c6*c2*c5)*_Z)-2*c4), x5 = 2*((-c3*c2+c1*c4
)*RootOf((-8*c6*c4*c3*c5+4*c4^2*c5^2+4*c6^2*c3^2+4*c2^2*c5^2+4*c6^2*c1^2+4*c1^2*c4^2+4*c2^2*c3^2-8*c1*c4*c2*c3-8*c2*c1*c6*c5)*_Z^2+c6^2+c4^2+(4*c4*c2
*c3-4*c1*c4^2-4*c6^2*c1+4*c6*c2*c5)*_Z)-1/2*c4)*(a*c4^2+2+(c6^2+c2^2)*a)/(-2*c5*c4+2*c6*c3), x6 = x6, x7 = x7]
If you examine these more carefully, the RootOf() that occur in solutions #1 through 8 and 10 through 17 can only have imaginary roots when the constants are real-valued and non-zero, and in each case at least one of the xi values has that imaginary root multiplied by a real value; other variables might have the imaginary number in a ratio combination where potentially the imaginary portions cancel out, but we do not need to work those out because at least one of the terms is provably imaginary in those cases.
Solution #9, the "least complex solution" noted above, is always real-valued provided that c6 is non-zero, and is thus a primary solution.
Solution #18 involves RootOf((-8*c6*c4*c3*c5+4*c4^2*c5^2+4*c6^2*c3^2+4*c2^2*c5^2+4*c6^2*c1^2+4*c1^2*c4^2+4*c2^2*c3^2-8*c1*c4*c2*c3-8*c2*c1*c6*c5)*_Z^2+c6^2+c4^2+(4*c4*c2*c3-4*c1*c4^2-4*c6^2*c1+4*c6*c2*c5)*_Z)
It is not immediately obvious whether this is real-valued or not. As it is a quadratic one can easily express the two roots directly. If one then factors those roots fully, it turns out that both of the roots have the term (-(-c5*c4+c6*c3)^2*(c2^2+c4^2+c6^2))^(1/2) . A small bit of examination shows that unless at least 2 of the constants involved are 0, that the expression will result in an imaginary number.
This leaves us with the primary solution being Solution #9, the one with several explicit 0s.
Is this the only solution? No.
If you examine the RootOf() expressions in solutions 1, 2, 4, 6, 8, 11, 13, 15, and 16, you will see RootOf() involving two xi values (per solution); that RootOf can escape having an imaginary root if the xi are both set to 0. In each of these cases, setting those xi to 0 reduces the solution to one similar to the easy solution. One could, if one so desired, term these to be primary solutions as well, as the fact that the RootOf() is generated instead of the xi values being deemed to be 0 is really just a weakness of the solver in finding real-only solutions.
If you examine the RootOf() expressions in solutions 3, 5, 7, 10, 12, 14, and 17, you will see RootOf() involving 2 constants (per solution); that RootOf() can escape having an imaginary root if the constants are both 0. However, in each case, the solutions are such that if those constants are 0, the solutions involve 0/0, suggesting that no real roots exist for those solutions. However, if one sets those constants to be 0 back in the original equations and re-solve, in each case 4 potential solutions will be generated. Three of those potential solutions will involve sqrt(-1), but in each of those situations, there is an associated xi value that can be set to 0 to remove the effect of the imaginary constant, leaving a solution of mostly 0's. The 4th of the potential solutions will involve a RootOf() that, similar to the above, can be made non-imaginary if two of the xi values are set to 0. None of these possibilities can rightfully be deemed primary solutions because they all involve the happenstance that two of the constants are 0.
The 18th solution, with the longer RootOf(), is a bit less tractable. I think I have shown that each possible zeroing of constants that directly removes the imaginary root results in a 0/0 in the solution, but if 0s are substituted for those constants back in the original expressions then the situation becomes akin to the above, where real roots are possible if particular xi values are 0; again these would not be primary roots in that they rely on the happenstance of some constants being 0.
So... there are 10 primary solutions, some of which might perhaps be duplicates (I haven't worked it out); all of them are relatively simple in form... once you have found them.
13 commentaires
Walter Roberson
le 18 Juil 2011
That site, depositfiles, is free for people to download from, but non-members have a delay of more than 60 seconds imposed on them before they can download the files. It is the site's way of pushing people to take out memberships. Their membership rates work out to about $75 per year... and, of course, are not interchangable with the numerous other fileshare sites such as rapidshare.
I did retrieve the file via sendspace. I did not, however, have a chance to work on the system of equations (I am trying to reduce the typing I do these days as my RSI (repetitive strain injury) is flaring up.)
Asatur Khurshudyan
le 14 Juil 2011
2 commentaires
Walter Roberson
le 15 Juil 2011
Note: transcribing the equations gives
a*c1*D_^3+2*D_*((x3*x4+x5*x6)*A+(x2*x3-2*x1*x4)*B+(x2*x5-2*x1*x6)*C)-4*x1*(A^2+B^2+C^2) = 0
a*c2*D_^2-2*(x3^2+x5^2)*A+2*x1*x3*B+2*x1*x5*C = 0
a*c3*D_^3+2*D_*((x1*x4-2*x2*x3)*A+(x1*x2+x5*x6)*B+(x4*x5-2*x3*x6)*C)-4*x3*(A^2+B^2+C^2) = 0
a*c4*D_^2+2*x1*x3*A-2*(x1^2+x5^2)*B+2*x3*x5*C = 0
a*c5*D_^3+2*D_*((x1*x6-2*x2*x5)*A+(x3*x6-2*x4*x5)*B+(x1*x2+x3*x4)*C)-4*x5*(A^2+B^2+C^2) = 0
a*c6*D_^2+2*x1*x5*A+2*x3*x5*B-2*(x1^2+x3^2)*C = 0
x1*c1+x2*c2+x3*c3+x4*c4+x5*c5+x6*c6 = 1
D_ = x1^2+x3^2+x5^2
A = x1*(x3*x4+x5*x6)-x2*(x3^2+x5^2)
B = x3*(x1*x2+x5*x6)-x4*(x1^2+x5^2)
C = x5*(x1*x2+x3*x4)-x6*(x1^2+x3^2)
I used D_ instead of D because in Maple D is the differential operator.
Eirini Gk
le 25 Mar 2016
Is there something that we can use -without MathToolbox-? for exaple is needed a function with a numerical method or something?
1 commentaire
Walter Roberson
le 25 Mar 2016
If you do not have a Symbolic Toolbox or equivalent, then one might be restricted to finding one solution, such as by using fsolve() (which requires the Optimization Toolbox).
Voir également
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!