Re: question about Solve
- To: mathgroup at smc.vnet.net
- Subject: [mg91724] Re: [mg91690] question about Solve
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Sat, 6 Sep 2008 02:09:29 -0400 (EDT)
- References: <200809051114.HAA12167@smc.vnet.net>
Its basically the same old problem as has been discussed here many times before. The methods used by Solve are not really suitable for dealing with equations with MachinePrecision approximate numbers. Rationalize all your approximate numbers and you will get solutions that you expect. Note that when you use Reduce on your last system you obtain the message: Reduce::"ratnz" : "Reduce was unable to solve the system with inexact \ coefficients. The answer was obtained by solving a corresponding exact system \ and numericizing the result" which gives you the same advice as above. Clearly Solve uses a different approach from Reduce. I am sure that Solve also at some point replaces a non-exact system by an exact one (for example it would have to do so when it uses GrobnerBasis) but it does it at a different stage than Reduce, and in this particular case this approach fails to produce an answer (which suggests that your system is numerically unstable). Andrzej Kozowski On 5 Sep 2008, at 12:14, Jaccard Florian wrote: > Dear All, > > I don't understand the following behaviour of Solve. > > Consider the following system : > > Solve[{x*y==(a+2*b)/(c+2*d),1/Sqrt[2]==Sqrt[(e*y)/(z*f*g*h)], > 2*Pi*i==0.9/(z*f)},{x,y,z}] > > Everything fine, I obtain : > > {{z -> 0.1432394487827058/(f*i), > x -> (1.419827298426263*^-9*(9.83403688*^9*a + > 1.966807376*^10*b)*e*i)/((c + 2.*d)*g*h), > y -> (0.0716197243913529*g*h)/(e*i)}} > > But if I ask for the answer of almost the same (only a 4 in the > denominator > of the second equation), Solve isn't abble anymore to manage without > using > inverse functions... why? > > Solve[{x*y == (a + 2*b)/(c + 2*d), > 1/Sqrt[2] == Sqrt[(e*y)/(4*z*f*g*h)], > 2*Pi*i == 0.9/(z*f)}, {x, y, z}] > > Worse: > > If I have numerical values for a, b, c, d, e, f, g, h, i: > a = 65/10^6; > b = 1/10^3; > c = 1.9; > d = 0.19; > e = 1/(2.5/10^3); > v = 18; > w = 8; > g = (2*v)/((c + 2*d)*w); > i = 3000; > h = 0.2; > > Then Solve isn't able anymore! Mathematica thinks there is no > solution. But > there is one. I have to use Reduce or give the numerical values as > rules > after the Solve to find them. > > In[247]:= Solve[{x*y == (a + 2*b)/(c + 2*d), > 1/Sqrt[2] == Sqrt[(e*y)/(z*f*g*h)], > 2*Pi*i == 0.9/(z*f)}, {x, y, z}] > > Out[247]= {} > > Can somebody explain this? > > Thanks in advance, > > Regards > > > F.Jaccard >
- References:
- question about Solve
- From: "Jaccard Florian" <Florian.Jaccard@he-arc.ch>
- question about Solve