Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2010

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

Search the Archive

Re: NDSolve and hybrid dynamics (Differential Algebraic Equation DAE)

  • To: mathgroup at smc.vnet.net
  • Subject: [mg113563] Re: NDSolve and hybrid dynamics (Differential Algebraic Equation DAE)
  • From: Ravi Balasubramanian <ravi.balasubramanian at yale.edu>
  • Date: Tue, 2 Nov 2010 05:04:09 -0500 (EST)

Thank you, Bob.  I guess I oversimplified the original problem.  The 
variable y is state-dependent such as
y[x] := Piecewise[{{1, x < 1/10}}, 2]

I tried the following system of equations, but it failed:

eqns = {x'[t] == y[t] + Sin[t],
    y[t] == Piecewise[{{1, x[t] < 1/10}}, 2], x[-Pi] == 1/2};
sol = {x[t], y[t]} /. NDSolve[eqns, {x[t], y[t]}, {t, -5, 5}]

NDSolve::ndsz: At t == -3.33251, step size is effectively zero; 
singularity or stiff system suspected.

I presume this is what you meant by breaking the problem into two 
regions, but that transition is dependent on x.

With your suggestion of using Piecewise, I was able to run the same 
system by creating a function y

y//Clear
y[xVar_?NumericQ] := Piecewise[{{1, xVar < 1/10}}, 2]
eqns = {x'[t] == y[x[t]] + Sin[t], x[-Pi] == 1/2};

xSoln = NDSolve[eqns, {x[t]}, {t, -5, 5}][[1, 1, 2]]
Plot[xSoln, {t, -5, 5}, Frame -> True, Axes -> False,
  PlotStyle -> Thick]

Plot[y[xSoln], {t, -5, 5}, Frame -> True, Axes -> False,
  PlotStyle -> Thick]

Is there a way that I can get NDSolve to manage the y variable for me as 
part of the state because my system will have multiple such non-smooth 
variables?

Ravi

Bob Hanlon wrote:
> If is a programming construct not a mathematical function. Use Piecewise
> 
> eqns = {x'[t] == y[t] + Sin[t],
>    y[t] == Piecewise[{{1, t < 1/10}}, 2],
>    x[-Pi] == 1/2};
> 
> sol = {x[t], y[t]} /. DSolve[eqns, {x[t], y[t]}, t][[1]]
> 
> {(1/2)*(-1 + 2*Pi + 2*Piecewise[{{t - Cos[t], t <= 1/10}}, 
>             -(1/10) + 2*t - Cos[t]]), Piecewise[{{1, t < 1/10}}, 2]}
> 
> Plot[sol, {t, -5, 1},
>  Frame -> True,
>  Axes -> False,
>  Exclusions -> 1/10,
>  ExclusionsStyle -> Red]
> 
> For NDSolve break the problem into two regions
> 
> 
> Bob Hanlon
> 
> ---- Ravi Balasubramanian <ravi.balasubramanian at yale.edu> wrote: 
> 
> =============
> Friends,
> 
> I am trying to solve a hybrid dynamics problem using NDSolve.
> 
> I am aware that I could use the event locator methods in NDSolve and 
> manually take care of the transitions (set initial conditions etc).  But 
> my system is complicated, and I would have to do a lot of book-keeping.
> 
> The following represents a simplified version of the problem.
> 
> eqns = {x'[t] == y[t] + Sin[t], y[t] == If[t < 0.1, 1, 2],
>     x[-Pi] == 1/2};
> sol = NDSolve[eqns, {x[t], y[t]}, {t, -5, 5}]
> 
> It is a first order differential equation in x[t], but it includes a 
> y[t] variable that is discontinuous.  There should be solution for this 
> problem, but I get the following error message from NDSolve.
> 
> LinearSolve::"nosol" : "Linear equation encountered that has no solution.
> 
> The error is probably arising from the "If" condition.
> 
> FYI, in my real system the y[t] variable is a Lagrange multiplier that 
> is enforcing a constraint.  Under certain conditions, that constraint is 
> broken and the system transitions into another state.  It will be great 
> if this problem can be solved with NDSolve keeping track of the y[t] 
> variable for me.  Any suggestions greatly appreciated.
> 
> Thanks!
> 
> Ravi Balasubramanian
> Yale University
> 


  • Prev by Date: Re: Assertions in Mathematica?
  • Next by Date: Re: Assertions in Mathematica?
  • Previous by thread: Re: NDSolve and hybrid dynamics (Differential Algebraic Equation DAE)
  • Next by thread: Re: NDSolve and hybrid dynamics (Differential Algebraic Equation DAE)