Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2006
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2006

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

Search the Archive

Re: Why doesn't Mathematica solve this simple differential equation?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg69317] Re: Why doesn't Mathematica solve this simple differential equation?
  • From: Joseph Gwinn <JoeGwinn at comcast.net>
  • Date: Wed, 6 Sep 2006 04:29:03 -0400 (EDT)
  • Organization: Gwinn Instruments
  • References: <eddqq8$3vq$1@smc.vnet.net> <edjh7r$luh$1@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

In article <edjh7r$luh$1 at smc.vnet.net>,
 Joseph Gwinn <JoeGwinn at comcast.net> wrote:

> In article <eddqq8$3vq$1 at smc.vnet.net>,
>  Joseph Gwinn <JoeGwinn at comcast.net> wrote:
> 
> > Here is the system I'm trying to solve.  It's an electrical circuit 
> > consisting of a capacitor C1 (with initial voltage 4.0 volts), a 
> > resistor R1, and a diode in series.  
> 
> I just read the Mathematica 5.2 NDSolve Advanced Documentation section 
> on  Differential Algebraic Equations.
> 
> It occurs to me that, aside from the typos, what may be happening is 
> that I'm handing Mathematica something that looks like a Differential 
> Algebraic Equation (DAE) of index exceeding 1, as Mathematica was able 
> to solve the system with one implicit equation (for the diode, with a 
> capacitor but no resistor).

I now have a clean example of the problem:

eqns41 = {Vc'[t] == -Il[t]/C1, Vc[t] == (R1 + R2)*Il[t], Vc[0] == Vo}

eqns42 = eqns41 /. {C1 -> 1.0*10^-6, R1 -> 16, R2 -> 27, Vo -> 4.0}

eqns42soln = NDSolve[eqns42, Vc, {t, 0, 1}]

The above fails: "NDSolve::overdet: There are fewer dependent variables, 
{Vc[t]}, than equations, so the system is underdetermined."

eqns41a = Eliminate[eqns41, Il[t]]

eqns42a = eqns41a /. {C1 -> 1.0*10^-6, R1 -> 16, R2 -> 27, Vo -> 4.0}

eqns42asoln = NDSolve[eqns42a, Vc, {t, 0, 1}]

The above works.  

Eliminate[] cannot make a self-consistent system from an inconsistent 
system, so the original system must also be consistent.  Yet it fails.

Does Mathematica think that this system is some kind of complicated DAE?  
Apparently, given that Eliminate[] solves the problem.  Why couldn't 
NDSolve do its own algabraic reduction?  The variable Il[t] was not 
requested as an output.

I have a few more such examples, so the issue isn't restricted to this 
example.

The other issue is that *all* combinations of real electronic components 
(that is, circuits) lead to a numerically solvable system of ODEs, 
because all circuits will do something real if constructed and tested.  
So, aside from eliminating silly mistakes, this should not be hard, and 
I'm trying to figure out the root cause of these random-appearing 
failures.  Mathematica is probably trying to do something that ordinary 
circuit simulators (such as SPICE) wouldn't dream of.

Joe Gwinn


  • Prev by Date: Re: Simplify UnitStep expressions
  • Next by Date: Re: Using FullSimplify to check hand algebra
  • Previous by thread: Re: Why doesn't Mathematica solve this simple differential equation?
  • Next by thread: Re: Re: Why doesn't Mathematica solve this simple differential equation?