MathGroup Archive 2003

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

Search the Archive

RE: How to get Mathematica to solve for "nonbasic variables"?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg42375] RE: [mg42359] How to get Mathematica to solve for "nonbasic variables"?
  • From: "David Park" <djmp at earthlink.net>
  • Date: Thu, 3 Jul 2003 06:10:31 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

cdj,

First, you could solve "by hand".

5x == 6y
#/5/y & /@ %
5 x == 6 y
x/y == 6/5

Or you could solve with the extra variable z and then use z as a
substitution rule in the final solution.

eqns = {5x == 6y, z == x/y};
Solve[eqns, z, x][[1, 1]]
% /. z -> x/y
z -> 6/5
x/y -> 6/5

Still, it would be nice to have a routine that allowed you to solve for
simple expressions. I am putting forward the following candidate, but I am
not at all confident of its general use. Maybe some of the mathematicians in
the group could put forward something better.

SolveForExpressions[exprs__][eqns_, vars_, elims_:{}] :=
  Module[
    {u = Unique[u],
      n = Length[{exprs}],
      neweqns, subrules, newvars, extendedeqns, extendedvars},
    newvars = Array[u, n];
    neweqns = Thread[newvars == {exprs}];
    subrules = Thread[newvars -> {exprs}];
    extendedeqns = Join[eqns, neweqns];
    extendedvars = Join[vars, newvars];
    Solve[extendedeqns, extendedvars, elims] /. subrules
    ]

Then we could at least solve for homogenous coordinates.

eqns = {3x + 4y + 3z == 0, 2x - y + z == 0};
SolveForExpressions[x/z, y/z][eqns, {}]
{{x/z -> -(7/11), y/z -> -(3/11)}}

or some nonlinear equations.

eqns = {x^2 + y^2 == z^2};
sols = SolveForExpressions[x/z, y/z][eqns, {}, {z}]
{{x/z -> -(x/Sqrt[x^2 + y^2]),
   y/z -> -(y/Sqrt[x^2 + y^2])},
  {x/z -> x/Sqrt[x^2 + y^2], y/z -> y/Sqrt[x^2 + y^2]}}

David Park
djmp at earthlink.net
http://home.earthlink.net/~djmp/




From: cdj [mailto:a_cjones at hotmail.com]
To: mathgroup at smc.vnet.net

Hi all,

Intuitively, I'd like to get Mathematica to compute things of the following
sort:

In: Solve[5x==6y,x/y]

Out: {x/y -> 5/6}

Of course Mathematica won't do this - and several obvious variations on this
theme don't seem to work either (e.g., introducing a new variable z =
x/y, and attempting to solve the system for z).

So what's the easiest way to solve (systems of) equations for
nonatomic variables of this sort?

Thanks for any suggestions,

cdj


  • Prev by Date: Re: New version, new bugs
  • Next by Date: Re: ran2 from numerical recipes
  • Previous by thread: Re: How to get Mathematica to solve for "nonbasic variables"?
  • Next by thread: New version, new bugs