Re: NDSolve and hybrid dynamics (Differential Algebraic Equation DAE)
- To: mathgroup at smc.vnet.net
- Subject: [mg113544] Re: NDSolve and hybrid dynamics (Differential Algebraic Equation DAE)
- From: Ravi Balasubramanian <ravi.balasubramanian at yale.edu>
- Date: Tue, 2 Nov 2010 05:00:38 -0500 (EST)
Hello Oliver, Thanks for your suggestion. Unfortunately, a smoothing function would not be useful, since the system has binary states. I figured a way to do this is to include the f[x] function into the x'[t] equation such as x'[t] == f[x[t]] + Sin[t] (f[x] has only two states and no smoothing) and use NDSolve to solve for x[t]. This works. And then I can evaluate f[x[t]] using the NDSolve solution. Just to summarize this discussion: NDSolve does not support binary variables as part of the state? Ravi Oliver Ruebenkoenig wrote: > > > Ravi, > > would a smoothing function be useful? > > f[x_] := Which[ > x <= -1, 0, > -1 < x < 1, 1/2 + x (15/16 - x^2 (5/8 - 3/16 x^2)), > x >= 1, 1] + 1 > > Plot[f[(x - 0.1)/0.001], {x, -0.2, 0.2}] > > eqns = {x'[t] == y[t] + Sin[t], y[t] == f[t], x[-\[Pi]] == 1/2}; > sol = NDSolve[eqns, {x[t], y[t]}, {t, -5, 5}] > > Hope this helps, > > Oliver > > On Mon, 1 Nov 2010, Ravi Balasubramanian 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 >> >>