Re: Re: Solve[] handles the same system differently
- To: mathgroup at smc.vnet.net
- Subject: [mg40885] Re: [mg40868] Re: Solve[] handles the same system differently
- From: Bobby Treat <drmajorbob+MathGroup3528 at mailblocks.com>
- Date: Wed, 23 Apr 2003 01:16:16 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Solve can handle the system if (a) you list VgsX1 as a parameter to be eliminated, (b) if you list it as a variable to solve for, or (c) if you give Solve no second or third argument at all, and let Solve assume they're all variables. So, the scenario it can't handle is that VgsX1 is a parameter not specifically intended to be eliminated. But if that were all, the same "problem" would apply to Rx and VinX1 equally well. They can be eliminated, so the following attempts would fail for the same reason (but they don't): eqns = {Rx == 3300, VinX1 == 0, VgsX1 == Rx*IdsX1, IdsX1 == 0.001(1 - (VinX1 - VgsX1)/(-1.5))^2}; Solve[eqns, {IdsX1, VinX1, VgsX1}] Solve[eqns, {IdsX1, Rx, VgsX1}] Rx, VinX1, and VgsX1 are all easily eliminated using the equations that give their values on the right-hand side. The difference is that an equation like parameter == numeric or variable == numeric is simplified away, but parameter == var1 * var2 is not. Why? Because Mathematica is thinking the parameter must be free to have any value, and it actually can't. The same reasoning could (in principle) apply to parameter == numeric, but Mathematica doesn't do that. Bobby -----Original Message----- From: Joe Gwinn <joegwinn at attbi.com> To: mathgroup at smc.vnet.net Subject: [mg40885] [mg40868] Re: Solve[] handles the same system differently In article <b80k0i$m3f$1 at smc.vnet.net>, Joe Gwinn <joegwinn at attbi.com> wrote: > 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. A number of people contacted me offline and suggested that the difference was that Solve[] was interpreting VgsX1 as a parameter, so only special-case solutions exist, which Solve doesn't accept as a solution. If you list VgsX1 as a variable to be eliminated, all is well. The other proposed solution was to add VdsX1 to the list of variables to be solved for. Both approaches work. Thanks to all, Joe Gwinn