MathGroup Archive 2003

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

Search the Archive

RE: Solve[] handles the same system differently

  • To: mathgroup at smc.vnet.net
  • Subject: [mg40847] RE: [mg40841] Solve[] handles the same system differently
  • From: "David Park" <djmp at earthlink.net>
  • Date: Tue, 22 Apr 2003 06:42:50 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

Joe,

I am not certain of the exact answer to your question. The internal workings
of Solve are sometimes difficult to understand. But in solving equations it
often helps if you can make the equations exact and if you take the "data"
out of the equation system and substitute it later. Any approximate number
in an equation should probably be treated as a data parameter. (Similarly,
do not put units in an equation but put them in the data.) So I would write
your second set of equations as...

data = {Rx -> 3300, VinX1 -> 0, parm1 -> -0.001, parm2 -> -1.5};
eqns = {VgsX1 == IdsX1 Rx, IdsX1 == parm1(1 - (VinX1 - VgsX1)/parm2)^2};

Then the following works nicely...

sols = Solve[eqns, IdsX1, VgsX1]
sols /. data

{{IdsX1 -> (1/(2*parm1*Rx^2))*(parm2^2 -
      2*parm1*parm2*Rx + 2*parm1*Rx*VinX1 -
      parm2*Sqrt[parm2^2 - 4*parm1*parm2*Rx +
         4*parm1*Rx*VinX1])},
  {IdsX1 -> (1/(2*parm1*Rx^2))*(parm2^2 -
      2*parm1*parm2*Rx + 2*parm1*Rx*VinX1 +
      parm2*Sqrt[parm2^2 - 4*parm1*parm2*Rx +
         4*parm1*Rx*VinX1])}}

{{IdsX1 -> 0.00035124 - 0.000288517 I},
 {IdsX1 ->
       0.00035124 + 0.000288517 I}}


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


From: Joe Gwinn [mailto:joegwinn at attbi.com]
To: mathgroup at smc.vnet.net


I am running Mathematica 4.0.1.0 under MacOS 9.1, and have encountered a
little mystery:


The following works OK:

In[15]:=
Solve[{Rx == 3300, VinX1 == 0,
    IdsX1 == 0.001(1 - (VinX1 - Rx*IdsX1)/(-1.5))^2}, {IdsX1}]

Yielding:

Out[15]=
{{IdsX1 -> 0.000234453}, {IdsX1 -> 0.00088125}}


When I rearrange the equation system a bit, it fails to find a solution:

In[16]:=
Solve[{Rx == 3300, VinX1 == 0, VgsX1 == Rx*IdsX1,
    IdsX1 == 0.001(1 - (VinX1 - VgsX1)/(-1.5))^2}, {IdsX1}]

Out[16]=
{}


What's going on?  Why does a little algebra (the creation of the
variable VgsX1) cause a problem?  In[16] was generated by copying In[15]
and doing some editing.  No error messages were generated by either.

Thanks,

Joe Gwinn



  • Prev by Date: RE: books on *problem solving* using mathematica
  • Next by Date: Re: curve fitting
  • Previous by thread: Re: Solve[] handles the same system differently
  • Next by thread: Re: RE: Solve[] handles the same system differently