Re: Strange Behaviour of Solve?
- To: mathgroup at smc.vnet.net
- Subject: [mg79016] Re: [mg79007] Strange Behaviour of Solve?
- From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
- Date: Mon, 16 Jul 2007 02:09:45 -0400 (EDT)
- References: <200707150513.BAA08775@smc.vnet.net>
On 15 Jul 2007, at 14:13, Andreas Maier wrote: > Hi, > > i tried (using Mathematica 6.0) to solve a system of equations: > > In:=Solve[{b == g, a == (g*v/c), (b)^2 + (a)^2 == 1}, g] > Out:={} > > But when i use > > In:=Solve[{b == g, a == (g*v/c), (b)^2 + (a)^2 == 1}, {a, b, g}] > Out={{g -> -c/Sqrt[c^2 + v^2], b -> -c/Sqrt[c^2 + v^2], > a -> -v/Sqrt[c^2 + v^2]}, {g -> c/Sqrt[c^2 + v^2], > b -> c/Sqrt[c^2 + v^2], a -> v/Sqrt[c^2 + v^2]}} > > i suddenly get the solution for g. It seems to me, that the number > of solutions for one variable depends on the number of variables > i want to solve for. Is this behaviour of Solve to be > expected? > > Andreas Maier > > Yes. Solve gives only "generic solutions", which means solutions that do not depend on the "parameters" having any special values. In Solve[{b == g, a == (g*v/c), (b)^2 + (a)^2 == 1}, g] {} g is a variable and a,b,v,c are all parameters. The system has no solutions that are valid for all values of the parameters. You can see that by using Reduce instead of Solve: Reduce[{b == g, a == g*(v/c), b^2 + a^2 == 1}, g] c^2 + v^2 != 0 && (b == -(c/Sqrt[c^2 + v^2]) || b == c/Sqrt[c^2 + v^2]) && c != 0 && a == (b*v)/c && g == b this tells you that g==b is a solution of your system provided that the parameters satisfy the given relations. On the other hand: Solve[{b == g, a == (g*v/c), (b)^2 + (a)^2 == 1}, {a, b, g}] {{g -> -c/Sqrt[c^2 + v^2], b -> -c/Sqrt[c^2 + v^2], a -> -v/Sqrt[c^2 + v^2]}, {g -> c/Sqrt[c^2 + v^2], b -> c/Sqrt[c^2 + v^2], a -> v/Sqrt[c^2 + v^2]}} is a system with three variables a,b,g and two parameters v and c. The solutions that you get for {a,b,g} are valid for all values of v and c, provided we assume that c!=0 and c^2+v^2 !=0 which Solve does automatically (if c ==0 the second equation would be problematic, and if c^2+v^2==0 the solutions, if any could not be given in the form Solve returns). Reduce is more careful: Reduce[{b == g, a == g*(v/c), b^2 + a^2 == 1}, {a, b, g}] (v == 0 && a == 0 && (b == -1 || b == 1) && g == b && c != 0) || (c^2 + v^2 != 0 && (a == -(v/Sqrt[c^2 + v^2]) || a == v/Sqrt[c^2 + v^2]) && a*c != 0 && b == (v - a^2*v)/(a*c) && g == b) You can see a simpler example of the same phenomenon here: Solve[x + y == x, x] {} because y is a parameter and there is no solution valid for all values of y, but: Solve[x + y == x, {x, y}] Solve::svars:Equations may not give solutions for all "solve" variables. >> {{y -> 0}} Now we have infinitely many solutions of the form {x,0} where x can by any complex number. Andrzej Kozlowski
- References:
- Strange Behaviour of Solve?
- From: Andreas Maier <andimai@web.de>
- Strange Behaviour of Solve?