MathGroup Archive 2004

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

Search the Archive

NDSolve, coupled equations, different number of variables

  • To: mathgroup at
  • Subject: [mg48736] NDSolve, coupled equations, different number of variables
  • From: "Stergios J. Papadakis" <stergios.papadakis at>
  • Date: Fri, 11 Jun 2004 23:59:05 -0400 (EDT)
  • Organization: Johns Hopkins University Applied Physics Lab, Laurel, MD, USA
  • Sender: owner-wri-mathgroup at

Dear group,
I am trying to numerically solve a set of two coupled equations.  I'll 
describe how they come about to motivate this.  I have a harmonic 
oscillator (z''[t] + gamma*z'[t]+(omegbarmod[T])^2*z[t] == 0).  However, 
the spring constant of that oscillator depends on its temperature 
(omegabarmod is a funtion of T: omegabarmod[T]).
The temperature of the spring depends on the heat flow into the spring, 
which depends on the position of the oscillator.  Using the 1-D heat 
equation with boundary/initial conditions:

D[T[x, t], {t, 1}] == tdiff*D[T[x, t], {x, 2}],
T[x, 0] == 0,
T[0, t] == 0,
(D[T[x, t], {x, 1}] /. x -> barlength/2) == heatin[z[t]]

So, the position of the oscillating beam governs the heat input, which 
is a time-varying Neumann boundary condition on the homogenous heat 
equation governing the temperature of the bar, and the spring constant 
of the oscillator is a function of the temperature of the bar at its center.

If I try:

result = NDSolve[{D[z[t], {t, 2}] + gamma*D[z[t], {t, 1}] == 
-(omegabarmod[T[barlength/2, t]])^2*z[t],
D[T[x, t], {t, 1}] == tdiff*D[T[x, t], {x, 2}],
T[x, 0] == 0,
T[0, t] == 0,
(D[T[x, t], {x, 1}] /. x -> barlength/2) == (1 - 
z[0] == initialposition,
(D[z[t], {t, 1}] /. t -> 0) == 0},
{z, T}, {t, 0, numperiods*2*Pi/omegadrive}, {x, 0, barlength/2}];

(with all of the constants and the functions heatin[T] and 
omegabarmod[T] defined previously, or course)

I get:

NDSolve::derlen:The length of the derivative operator Derivative[1] in 
z'[t] is not the same as the number of arguments

Basically, it looks like it will not let me solve a system of equations
where z is a function of t only and T is a function of x and t.
I have also tried using the total derivative Dt in place of D for the
oscillator equation, but I get the same result.

I've run a bunch of test cases where I put independent equations and
boundary conditions into NDSolve.  It only solves them if they are 
functions of the same number of variables.  Then I couple them together
in some way, and it still solves them.  So, the problem really seems
to be that I can't solve for z[t] and T[x,t].  I have spent a lot
of time trying things like making z[x,t] a function of both x and t 
anyway, and trying to set up the boundary conditions in a way that
makes z essentially independent of x. If I decouple the equations and 
use z[x,t] and T[x,t], it solves them, giving the solution that z is 
independent of x, which would be fine.  However, when I couple the 
equations again, I get underdetermined or overdetermined system errors.

If you have any ideas on how to pose this problem to Mathematica
I'd appreciate your help.

Thanks very much,


  • Prev by Date: Re: LogIntegral^(-1)
  • Next by Date: Rotated X-Labels
  • Previous by thread: RE: Creating combinations from a group of sets, PART 2
  • Next by thread: Rotated X-Labels