MathGroup Archive 2001

[Date Index] [Thread Index] [Author Index]

Search the Archive

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

  • To: mathgroup at
  • Subject: [mg31989] Re: [mg31961] Re: [mg31946] Re: [mg31928] Solve[] for equations?
  • From: Andrzej Kozlowski <andrzej at>
  • Date: Sat, 15 Dec 2001 01:30:07 -0500 (EST)
  • Sender: owner-wri-mathgroup at

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

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

  • Prev by Date: RE: Functions with Options
  • Next by Date: Eigenvalue Problem
  • Previous by thread: Re: Re: Solve[] for equations?
  • Next by thread: Re: Solve[] for equations?