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: Re: Re: Representation and Simulation of Dynamic Systems

  • To: mathgroup at smc.vnet.net
  • Subject: [mg65850] Re: [mg57072] Re: [mg56984] Re: Representation and Simulation of Dynamic Systems
  • From: "Chris Chiasson" <chris at chiasson.name>
  • Date: Tue, 18 Apr 2006 06:56:46 -0400 (EDT)
  • References: <200505140858.EAA09462@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

To MathGroup,

In doing an unrelated problem last week, I decided to implement a
basic bond graph package. My original post about this package was lost
in the ether, so I am sending this one in its stead.

I offer the package under the MIT License and the GPL v2. If you would
like to contribute code, please make your updates available to me
under these licenses; I will add your code to a new version and
attribute you in the credits. If you find a bug in the code or
documentation or you have a feature request, let me know via email.

Here are the files:
http://chris.chiasson.name/Engineering_Optimization/hw2/Bond_Graphs/Bond_Graphs.xhtml
http://chris.chiasson.name/Engineering_Optimization/hw2/Bond_Graphs/Bond_Graphs.nb
http://chris.chiasson.name/Engineering_Optimization/hw2/Bond_Graphs/Bond_Graphs.pdf

Don't ask where the plain html version is. For some reason,
Mathematica 5.2 likes to crash while rendering it.

Ciao,

On 5/14/05, Caffa Vittorio Dr. <Caffa at iabg.de> wrote:
> Hi Jens,
>
> Maybe I should give some background information to better specify the
> scope of my message:
>
> I work in the aerospace industry. My colleges and I do a lot of modeling
> of dynamic systems: airplanes, helicopters, rockets, etc. In my company
> there is also a department which is involved in automotive applications
> where a lot of modeling and simulation is done.
>
> Dynamic systems can be anything between very simple and extremely
> complex.
>
> If the system of interest is simple, one does exactly what you
> suggested: one writes down the equations of the system and solves them,
> for instance with NDSolve. In some cases one can also use DSolve or the
> Laplace technique to get a symbolic solution.
>
> On the other hand, some models are huge, frantic. In these cases the
> only sensible choice is the usage of special simulation tools of the
> kind Chris Chiasson mentioned. Here are some reasons for this choice:
> o) Graphic representation of the system,
> o) Hierarchical representation in systems and subsystems,
> o) Blocks can be represented with transfer functions,
> o) Signals can be time-continuous and/or time-discrete,
> o) Models can be easily modified,
> o) Signal can be easily inspected.
>
> But often the system of interest has medium complexity. For this case I
> have elaborated the simple technique for representing and simulating
> dynamic systems that I have described in a previous message. I am
> actually curious to know if someone uses a similar or maybe better
> technique.
>
> The ideas I have used are actually simple, but maybe it is useful to
> mention them:
> o) Engineers like to represent dynamic systems with block diagrams,
> o) Block diagrams are actually oriented graphs,
> o) Graphs can be represented with lists of rules,
> o) A graph editor could be used for generating the graph representation,
> o) Actually it is also possible to transform a graph description (maybe
> in form of rules) into a graph using DiscreteMath`GraphPlot.
> o) Using //. it is possible to transform the system description into
> equations for NDSolve,
> o) The parameters of the problem can be put into a list rules for
> flexibility,
> o) With //. one can conveniently inspect "auxiliary" variables (i.e.
> variables which are not states). Similarly one can use auxiliary
> variables in the specification of termination conditions.
>
>
>
> Cheers, Vittorio
>
>
> >-----Original Message-----
> >From: Jens-Peer Kuska [mailto:kuska at informatik.uni-leipzig.de]
To: mathgroup at smc.vnet.net
> >Subject: [mg65850] [mg57072] [mg56984] Re: Representation and Simulation of Dynamic Systems
> >
> >Hi,
> >
> >and you can not select your depend output
> >variables (like y[t]) in
> >your example and just insert the solution that
> >NDSolve[] gives for
> >your independent variables ? Strange ...
> >
> >Regards
> >  Jens
> >
> >"Caffa Vittorio Dr." <Caffa at iabg.de> schrieb im
> >Newsbeitrag news:d5s9bh$lj9$1 at smc.vnet.net...
> >> The behavior of (time-continuous, non-linear)
> >> dynamic systems can be
> >> numerically investigated with NDSolve. One can
> >> first sketch a block
> >> diagram of the system and then convert it into
> >> equations. Here is a toy
> >> example after the conversion:
> >>
> >>   pos'[t] = vel[t]
> >>   vel'[t] = -k pos[t] + force[t] / m
> >>
> >> This works fine if the variables are all states,
> >> as in the example
> >> above. But often, in order to describe a given
> >> dynamic system you want
> >> or you have to introduce some auxiliary
> >> variables (i.e. variables which
> >> are not states). This is in fact the case if you
> >> want to describe a
> >> generic dynamic system. Here are the standard
> >> equations:
> >>
> >>   x'[t] = f[x[t], u[t], t]    (state equations)
> >>   y[t] = g[x[t], u[t], t]     (output equations)
> >>
> >> where: x = state vector, u = input vector, y =
> >> output vector, t = time.
> >> In this case the components of the output vector
> >> are the "auxiliary"
> >> variables.
> >>
> >> I'm considering here a scheme for representing
> >> dynamic systems (possibly
> >> using a block diagram as a starting point) which
> >> allows the usage of
> >> auxiliary variables. This representation can be
> >> transformed into
> >> equations for NDSolve automatically. After
> >> having solved the equations
> >> it is possible to inspect not only the state
> >> variables but also the
> >> auxiliary variables.
> >>
> >> Comments or alternative solutions to the problem
> >> I'm considering are
> >> welcome!
> >>
> >> Procedure
> >>
> >> o) Sketch the system on a piece of paper. Here
> >> is a toy example:
> >>
> >>                          ----------
> >> [ -k ] ---------
> >>                         |
> >> |
> >>                         V
> >> |
> >> force[t] --> [ 1/m ] --> + --> [ 1/s ] ---> [
> >> 1/s ] --->  pos[t]
> >>                            |           |
> >>
> >>                 |            -------------->
> >> vel[t]
> >>                            |
> >>                            --------------------------->
> >> acc[t]
> >>
> >> Note: [ 1/s ] is an integrator block
> >>      [  k  ] is a gain block
> >>
> >>
> >> o) Convert the sketch into a system description:
> >>
> >> In[1]:= sys = {pos'[t] -> vel[t],
> >>        vel'[t] -> acc[t],
> >>        acc[t] -> -k pos[t] + force[t] / m};
> >>
> >> Note: the arrow points to the source of the
> >> signal.
> >>
> >> o) Make a list of the state variables:
> >>
> >> In[2]:= states = {pos[t], vel[t]};
> >>
> >> o) Form the differential equations (the
> >> following steps could be
> >> performed by a function):
> >>
> >> In[3]:= lhs = D[states, t]
> >>
> >> Out[3]= {pos'[t], vel'[t]}
> >>
> >> In[4]:= rhs = D[states, t] //. sys
> >>
> >>                 force[t]
> >> Out[4]= {vel[t], -------- - k pos[t]}
> >>                    m
> >>
> >> In[5]:= eqns = Join[Thread[lhs == rhs], {pos[0]
> >> == pos0, vel[0] ==
> >> vel0}]
> >>
> >>                                       force[t]
> >> Out[5]= {pos'[t] == vel[t], vel'[t]
> >> == -------- - k pos[t], pos[0] ==
> >> pos0,
> >>                                          m
> >> vel[0] == vel0}
> >>
> >> o) Specify the parameters:
> >>
> >> In[6]:= params = {m -> 10, k -> 2, pos0 -> 0,
> >> vel0 -> 0, force[t] ->
> >> Sin[t]};
> >>
> >> o) Solve the differential equations:
> >>
> >> In[7]:= sol = First[NDSolve[eqns /. params,
> >> states, {t, 0, 10}]]
> >>
> >> Out[7]= {pos[t] -> InterpolatingFunction[{{0.,
> >> 10.}}, <>][t],
> >>
> >>         vel[t] -> InterpolatingFunction[{{0.,
> >> 10.}}, <>][t]}
> >>
> >> o) Inspect the results (including auxiliary
> >> variables)
> >>
> >> In[8]:= Plot[pos[t] /. sol, {t, 0, 10}]
> >>
> >> Out[8]= -Graphics-
> >>
> >> In[9]:= Plot[acc[t] //. sys /. params /. sol,
> >> {t, 0, 10}]
> >>
> >> Out[9]= -Graphics-
> >>
> >>
> >> Cheers, Vittorio
> >>
> >> --------------------------------------------
> >> Dr.-Ing. Vittorio G. Caffa
> >> IABG mbH
> >> Abt. VG 32
> >> Einsteinstr. 20
> >> 85521 Ottobrunn / Germany
> >>
> >> Tel. (089) 6088 2054
> >> Fax: (089) 6088 3990
> >> E-mail: caffa at iabg.de
> >> Website : www.iabg.de
> >> --------------------------------------------
> >>
> >
>
>


--
http://chris.chiasson.name/


  • Prev by Date: Re: Simplifying equations for Mathematica
  • Next by Date: What is Infinity+Pi*I
  • Previous by thread: parenthesis in reactions...
  • Next by thread: What is Infinity+Pi*I