Re: Re: Re: Solve[] for equations?

*To*: mathgroup at smc.vnet.net*Subject*: [mg31989] Re: [mg31961] Re: [mg31946] Re: [mg31928] Solve[] for equations?*From*: Andrzej Kozlowski <andrzej at tuins.ac.jp>*Date*: Sat, 15 Dec 2001 01:30:07 -0500 (EST)*Sender*: owner-wri-mathgroup at wolfram.com

I must admit it feels rather silly being reduced to sending successive messages saying "you are absolutely right" in reply to two mutually contradictory postings. I am afraid that I (and Fred Simons before me) have fallen into the common trap of thinking only of real solutions, which of course behave in a completely different way (except for linear equations). Daniel Lichtblau's comments are based on Elimination Theory using Groebner basis (for a simple account see Ideal, Varieties and ALgorithms, by Cox, Little and O'Shea) and of course apply only to complex solutions. If the system of equations had no solutions than then the Groebner basis for the corresponding ideal which eliminates the variables in turn (such a basis always exists and which is found by Eliminate) would have to contain a "unit", (a complex number in case of polynomials with numerical coefficients or a symbolic expression not involving the "variables" in the symbolic case) . The fact in the case considered here Eliminate did not return such an expression means (assuming that it Eliminate is working correctly) that the equations have a solution and that it must be the one that is found by applying Eliminate and Solve. Why numerical tests may indicate otherwise is a bit of a mystery, but when things are this complicated one can't really be sure of anything. Nota bene, in the complex case the the principle that "n equations in n variables" generically have a solution holds in the same way as the corresponding principle for linear equations in the real (or complex) case. This is can also be proved using elimination theory. Andrzej Kozlowski Toyama International University JAPAN http://platon.c.u-tokyo.ac.jp/andrzej/ On Saturday, December 15, 2001, at 03:47 AM, Daniel Lichtblau wrote: > Andrzej Kozlowski wrote: >> >> You are of course completely right. To use this approach one would need >> to be able to prove that the system does have solutions. If it does >> than >> they will be found in this way. But indeed they may very well not exist >> at all. >> >> On Friday, December 14, 2001, at 12:14 AM, Fred Simons wrote: >> >>> Only a few remarks: >>> >>> From Andrzej Kozlowsky's message: >>> >>>> The concept may be simple but the practice is not quite so. You can >>>> see >>>> that as follows. >>>> Here are your equations. >>>> >>>> eq1 = Rac == R1(R2 + R3 + R4)/(R1 + R2 + R3 + R4) >>>> eq2 = Rad == R2(R1 + R3 + R4)/(R1 + R2 + R3 + R4) >>>> eq3 = Rbc == R3(R1 + R2 + R4)/(R1 + R2 + R3 + R4) >>>> eq4 = Rbd == R4(R1 + R2 + R3)/(R1 + R2 + R3 + R4) >>>> >>>> we ask Mathematica to eliminate all the variables except one (say >>>> R4). >>>> >>>> eq5 = Eliminate[{eq1, eq2, eq3, eq4}, {R1, R2, R3}]; >>>> >>>> You have to wait a bit for this to work (Mathematica 4.1). >>>> >>>> If you want to see the 4th degree equation in R4 that you get you can >>>> evaluate: >>>> >>>> eq5 /. Equal[x_, y_] :> Collect[x - y, R4] == 0 >>>> >>>> What you see is a fourth degree equation with symbolic coefficients >>>> which is far from simple. Mathematica can actually "solve" it with: >>>> >>>> Solve[eq5, R4] >>>> >>>> You have to wait quite a while and then you will see something >>>> phenomenally complicated and in my opinion essentially useless (and >>>> in >>>> addition there is basically no way of checking its correctness). >>>> >>> >>> The result is simpler when we force Solve not to solve cubics and >>> quartics: >>> >>> SetOptions[Roots, Cubics -> False, Quartics -> False]; >>> Solve[eq5, R4] >>> >>> But still the result is rather useless. >>> >>>> If you like that you can use the same approach to get R1,R2 and R3 or >>>> much better, you can just use the symmetry of your equations to find >>>> out the other answers (to get R3 just replace Rbd by Rbc and vice >>>> versa). >>>> >>> >>> It is not so simple. Indeed, in the above way we can find the four >>> values >>> for R4. Similarly, or by cyclic permutation, we can find the four >>> values for >>> R1, for R2 and for R3 in symbolic form. But it is not clear how this >>> four >>> times four values for each of the unknowns have to be combined for >>> finding a >>> solution for the set of equations. Some testing with numerical values >>> shows >>> that it is unlikely that a solution of the set of equations indeed can >>> be >>> expressed as a combination of the results found in this way. Maybe >>> that >>> explains that the Solve command in Mathematica is unable to solve the >>> equations within 14 hours, while in the above way it finds formula for >>> each >>> of the unknowns within 2 minutes. >>> >>> Fred Simons >>> Eindhoven University of Technology >>> > > In reference to whether there might be no solutions, we can say that > this does not happen. Indeed, one knows there are solutions unless there > are polynomials in the basis that do not involve any of the main > variables (as this would violate genericity). But in performing the > Eliminate as per Andrzej' post, you find that there is only one > polynomial that does not involve the first three variables, and it > contains the fourth, hence there is no problem with genericity. Offhand > I am not sure why Solve says otherwise. In truth I've not had the > patience to wait for Solve to complete for this problem. > > Here is a faster way to get elimination results (except it is > problematic in version 4 of Mathematica). > > ee = {Rac - R1*(R2+R3+R4)/(R1+R2+R3+R4), > Rad - R2*(R1+R3+R4)/(R1+R2+R3+R4), > Rbc - R3*(R1+R2+R4)/(R1+R2+R3+R4), > Rbd - R4*(R1+R2+R3)/(R1+R2+R3+R4)}; > > Timing[gb = GroebnerBasis[ee, R4, {R1,R2,R3}, > MonomialOrder->EliminationOrder];] > > It will work correctly in our development version but seems to have > trouble in Mathematica 4.1. I suspect the issue is in handling the > denominators. But if you do not mind clearing denominators, the code > below will give a single polynomial in R4 and the parameter variables. > > ff = Numerator[Together[ee]]; > > Timing[gb2 = GroebnerBasis[ff, R4, {R1,R2,R3}, > MonomialOrder->EliminationOrder];] > > Substituting in specific "random" values for the parameters and solving > the resulting system indicates that there are 4 solutions. > > > Daniel > >