# Bond graph

A Bond graph is a graphical representation of a physical dynamic system. It is similar to the better known block diagram and signal-flow graph, with the major difference that the arcs in bond graphs represent bi-directional exchange of physical energy, while those in block diagrams and signal-flow graphs represent uni-directional flow of information. Also, bond graphs are multi-energy domain (e.g. mechanical, electrical, hydraulic, etc) and domain neutral. This means a bond graph can incorporate multiple domains seamlessly.

The bond graph is composed of the "bonds" which link together "single port", "double port" and "multi port" elements (see below for details). Each bond represents the instantaneous flow of energy (dE/dt) or power. The flow in each bond is denoted by a pair of variables called 'power variables' whose product is the instantaneous power of the bond. For example, the bond of an electrical system would represent the flow of electrical energy and the power variables would be voltage and current, whose product is power. Each domain's power variables are broken into two types: "effort" and "flow". Effort multiplied by flow produces power, thus the term power variables. Every domain has a pair of power variables with a corresponding effort and flow variable. Examples of effort include force, torque, voltage, or pressure; while flow examples include velocity, current, and volumetric flow. The table below contains the most common energy domains and the corresponding "effort" and "flow".

A bond has two other features described briefly here, and discussed in more detail below. One is the "half-arrow" sign convention. This defines the assumed direction of positive energy flow. As with electrical circuit diagrams and free-body diagrams, the choice of positive direction is arbitrary, with the caveat that the analyst must be consistent throughout with the chosen definition. The other feature is the "causal stroke". This is a vertical bar placed on only one end of the bond. It is not arbitrary. As described below, there are rules for assigning the proper causality to a given port, and rules for the precedence among ports. Any port (single, double or multi) attached to the bond shall specify either "effort" or "flow" by its causal stroke, but not both. The port attached to the end of the bond with the "causal stroke" specifies the "flow" of the bond. And the bond imposes "effort" upon that port. Equivalently, the port on the end without the "causal stroke" imposes "effort" to the bond, while the bond imposes "flow" to that port. This is made more clear with the illustrative examples below.

Energy Domain effort e symbol e unit (metric) e unit (imperial) flow f symbol f unit (metric) f unit (imperial)
Mechanical, translation Force F N lb Linear velocity v m/s ft/s, mph
Electrical Electromotive force V or u V V Current I or i A A
Magnetic [1] Magnetomotive force Flux rate
Hydraulic Pressure P Pa psi Volumetric flow rate Q m³/s ft³/s
Thermal temperature T °C or K °F entropy flow rate S W/°C ft·lb/s·°F

If the dynamics of the physical system to be modeled operate on widely varying time scales, fast continuous-time behaviors can be modeled as instantaneous phenomena by using a hybrid bond graph.

## History

The bond graph was invented by Henry Paynter.[2] The term "bond graph" comes from the fact that many of these graphs look like the bonds in chemistry; an example of this structure is shown in the 'examples' section of this wiki.[3] bond graphs were used for the first time in the MIT, where Paynter was a professor. In Europe, bond graphs were used for the first time at the electrical engineering faculty of the University of Twente[citation needed].

## Basics

The fundamental idea of a bond graph is that power is transmitted between connected components by a combination of "effort" and "flow" (generalized effort & generalized flow). Refer to the table above for examples of effort and flow in different domains. If an engine is connected to a wheel through a shaft, the power is being transmitted in the rotational mechanical domain, meaning the effort and the flow are torque (τ) and angular velocity (ω) respectively. A word bond graph is a first step towards a bond graph, in which words define the components. As a word bond graph, this system would look like:

${\displaystyle {\text{engine}}\;{\overset {\textstyle \tau }{\underset {\textstyle \omega }{-\!\!\!-\!\!\!-\!\!\!-\!\!\!-}}}\;{\text{wheel}}}$

A half-arrow is used to provide a sign convention, so if the engine is doing work when τ and ω are positive, then the diagram would be drawn:

${\displaystyle {\text{engine}}\;{\overset {\textstyle \tau }{\underset {\textstyle \omega }{-\!\!\!-\!\!\!-\!\!\!\rightharpoondown }}}\;{\text{wheel}}}$

A full arrow is used to indicate a measurement, and are referred to as signal bonds, because the amount of power flowing through the bond is insignificant. However, it may be useful to certain physical components. For example, the power required to activate a relay is orders of magnitude smaller than the power through the relay itself; making it relevant only to convey whether the switch is on, not the power consumed by it.

${\displaystyle {\text{wheel}}\;{\overset {\textstyle }{\underset {\textstyle \omega }{-\!\!\!-\!\!\!-\!\!\!\rightarrow }}}\;{\text{tachometer}}}$

## Junctions

Power bonds may join at one of two kinds of junctions: a 0 junction and a 1 junction.

• In a 0 junction, the flow sums to zero and the efforts are equal. This corresponds to a node in an electrical circuit (where Kirchhoff's current law applies), or to a mechanical "stack" in which all the forces are equal.
• In a 1 junction, the efforts sum to zero and the flows are equal. This corresponds to an electrical loop, or to a force balance at a mass in a mechanical system.

For an example of a 1 junction, consider a resistor in series:

${\displaystyle {\frac {v_{1}\qquad }{i_{1}\qquad }}{\overset {\textstyle R}{\!\!\land \!\!\land \!\!\land \!}}{\frac {\qquad v_{2}}{\qquad i_{2}=i_{1}}}}$

In this case, the flow (current) is constrained to be the same at all points, and when the implied current return path is included the efforts sum to zero. Power can be computed at points 1 and 2, and in general some power will be dissipated in the resistor. As a bond graph, this becomes

${\displaystyle {\overset {\textstyle v_{1}}{\underset {\textstyle i_{1}}{-\!\!\!-\!\!\!-\!\!\!\rightharpoondown }}}{\stackrel {\textstyle {\stackrel {\textstyle R}{\upharpoonright }}}{1}}{\overset {\textstyle v_{2}}{\underset {\textstyle i_{2}}{-\!\!\!-\!\!\!-\!\!\!\rightharpoondown }}}}$

From an electrical point of view, this diagram may seem counterintuitive in that flow is not preserved in the same way across the diagram. It may be helpful to consider the 1 junction as daisy chaining the bonds it connects to and power bond up to the R as a resistor with a lead returning down.

Regardless of the problem domain, bond graph modeling typically proceeds from the identification of key 1 and 0 junctions associated with identifiable efforts and flows in the system, then identifying the dissipative (R) and storage elements (I and C), power sources, and drawing bonds wherever power or information flow between the sources, junctions, and storage/dissipative components. Then sign conventions (arrow heads), and causality are assigned, and finally equations describing the behavior of the system can be derived using the graph as a kind of guide or map.

### Causality

Bond graphs have a notion of causality, indicating which side of a bond determines the instantaneous effort and which determines the instantaneous flow. In formulating the dynamic equations that describe the system, causality defines, for each modeling element, which variable is dependent and which is independent. By propagating the causation graphically from one modeling element to the other, analysis of large-scale models becomes easier. Completing causal assignment in a bond graph model will allow the detection of modeling situation where an algebraic loop exists; that is the situation when a variable is defined recursively as a function of itself.

As an example of causality, consider a capacitor in series with a battery. It is not physically possible to charge a capacitor instantly, so anything connected in parallel with a capacitor will necessarily have the same voltage (effort variable) as the capacitor. Similarly, an inductor cannot change flux instantly and so any component in series with an inductor will necessarily have the same flow as the inductor. Because capacitors and inductors are passive devices, they cannot maintain their respective voltage and flow indefinitely—the components to which they are attached will affect their respective voltage and flow, but only indirectly by affecting their current and voltage respectively.

Note: Causality is a symmetric relationship. When one side "causes" effort, the other side "causes" flow.

Active components such as an ideal voltage or current source are also causal.

In bond graph notation, a causal stroke may be added to one end of the power bond to indicate that the opposite end is defining the effort. Consider a constant-torque motor driving a wheel, i.e. a source of effort (SE). That would be drawn as follows:

${\displaystyle {\begin{array}{r}{\text{motor}}\\SE\end{array}}\;{\overset {\textstyle \tau }{\underset {\textstyle \omega }{-\!\!\!-\!\!\!-\!\!\!\rightharpoonup \!\!\!|}}}\;{\text{wheel}}}$

Symmetrically, the side with the causal stroke (in this case the wheel) defines the flow for the bond.

Causality results in compatibility constraints. Clearly only one end of a power bond can define the effort and so only one end of a bond can have a causal stroke. In addition, the two passive components with time-dependent behavior, I and C, can only have one sort of causation: an I component determines flow; a C component defines effort. So from a junction, J, the only legal configurations for I and C are

${\displaystyle J\;{\overset {\textstyle }{\underset {\textstyle }{-\!\!\!-\!\!\!-\!\!\!\rightharpoonup \!\!\!|}}}\;I\qquad {\text{and}}\qquad J\;{\overset {\textstyle }{\underset {\textstyle }{|\!\!\!-\!\!\!-\!\!\!-\!\!\!\rightharpoonup }}}\;C}$

A resistor has no time-dependent behavior: apply a voltage and get a flow instantly, or apply a flow and get a voltage instantly, thus a resistor can be at either end of a causal bond:

${\displaystyle J\;{\overset {\textstyle }{\underset {\textstyle }{-\!\!\!-\!\!\!-\!\!\!\rightharpoonup \!\!\!|}}}\;R\qquad {\text{and}}\qquad J\;{\overset {\textstyle }{\underset {\textstyle }{|\!\!\!-\!\!\!-\!\!\!-\!\!\!\rightharpoonup }}}\;R}$

Sources of flow (SF) define flow, sources of effort (SE) define effort. Transformers are passive, neither dissipating nor storing energy, so causality passes through them:

${\displaystyle \;{\overset {\textstyle }{\underset {\textstyle }{-\!\!\!-\!\!\!-\!\!\!-\!\!\!-\!|}}}\;{\dot {T}}{\dot {F}}\;{\overset {\textstyle }{\underset {\textstyle }{-\!\!\!-\!\!\!-\!\!\!-\!\!\!-\!|}}}\;\qquad {\text{or}}\qquad \;{\overset {\textstyle }{\underset {\textstyle }{|\!\!\!-\!\!\!-\!\!\!-\!\!\!-\!\!\!-}}}\;{\dot {T}}{\dot {F}}\;{\overset {\textstyle }{\underset {\textstyle }{|\!\!\!-\!\!\!-\!\!\!-\!\!\!-\!\!\!-}}}\;}$

A gyrator transforms flow to effort and effort to flow, so if flow is caused on one side, effort is caused on the other side and vice versa:

${\displaystyle \;{\overset {\textstyle }{\underset {\textstyle }{|\!\!\!-\!\!\!-\!\!\!-\!\!\!-\!\!\!-}}}\;{\dot {G}}{\dot {Y}}\;{\overset {\textstyle }{\underset {\textstyle }{-\!\!\!-\!\!\!-\!\!\!-\!\!\!-\!|}}}\;\qquad {\text{or}}\qquad \;{\overset {\textstyle }{\underset {\textstyle }{-\!\!\!-\!\!\!-\!\!\!-\!\!\!-\!|}}}\;{\dot {G}}{\dot {Y}}\;{\overset {\textstyle }{\underset {\textstyle }{|\!\!\!-\!\!\!-\!\!\!-\!\!\!-\!\!\!-}}}\;}$

Junctions

In a 0-junction, efforts are equal; in a 1-junction, flows are equal. Thus, with causal bonds, only one bond can cause the effort in a 0-junction and only one can cause the flow in a 1-junction. Thus, if the causality of one bond of a junction is known, the causality of the others is also known. That one bond is called the 'strong bond'

${\displaystyle {\text{strong bond}}\rightarrow \;\dashv \!{\overset {\textstyle \top }{\underset {\textstyle \bot }{0}}}\!\dashv \qquad {\text{and}}\qquad {\text{strong bond}}\rightarrow \;\vdash \!{\overset {\textstyle \bot }{\underset {\textstyle \top }{1}}}\!\vdash }$

One can continue, assigning causality using the above rules. Any model which results in inconsistent causality is not physically valid. For example, consider an inductor in series with an ideal current source—a physically impossible configuration. The bond graph would look like

${\displaystyle SF\;{\overset {\textstyle }{\underset {\textstyle }{-\!\!\!-\!\!\!-\!\!\!-\!\!\!-}}}1{\overset {\textstyle }{\underset {\textstyle }{-\!\!\!-\!\!\!-\!\!\!-\!\!\!-}}}\;I}$

Assigning causality to the source bond we get:

${\displaystyle SF\;{\overset {\textstyle }{\underset {\textstyle }{|\!\!\!-\!\!\!-\!\!\!-\!\!\!-\!\!\!-}}}1{\overset {\textstyle }{\underset {\textstyle }{-\!\!\!-\!\!\!-\!\!\!-\!\!\!-}}}\;I}$

Propagating the causality through the junction gives

${\displaystyle SF\;{\overset {\textstyle }{\underset {\textstyle }{|\!\!\!-\!\!\!-\!\!\!-\!\!\!-\!\!\!-}}}1{\overset {\textstyle }{\underset {\textstyle }{|\!\!\!-\!\!\!-\!\!\!-\!\!\!-\!\!\!-}}}\;I}$

But assigning causality to the inductor gives

${\displaystyle SF\;{\overset {\textstyle }{\underset {\textstyle }{|\!\!\!-\!\!\!-\!\!\!-\!\!\!-\!\!\!-}}}1{\overset {\textstyle }{\underset {\textstyle }{|\!\!\!-\!\!\!-\!\!\!-\!\!\!-\!\!\!-\!|}}}\;I}$

which is invalid, because the causality on the right bond is redundant. This ability to automatically identify impossible configurations is a major advantage of bond graphs.

In contrast, an electrical diagram or mechanical schematic can be inadvertently drawn that, while possible to construct, would not behave as modeled. For example, a capacitor can be directly connected to a battery, but the assumption that the battery is an ideal voltage source would be violated corresponding with the fact that the theoretical flux would be infinite. The bond graph would show that a resistor needs to be put in series with the capacitor to keep the model realistic.

## Example

Consider a simple RC circuit:[4]

        R
i1 --\/\/\-----+------ i2 →
v1             |       v2
C =  ↓ic
|
ground ----+------


where v1 represents a voltage source that is implied as being connected to the resistor, and v2 represents an "output" measurement point.

If one follows the "flows" through the circuit diagram then the basic structure of 1 (common flow) and 0 (common effort) nodes can be identified. In general, one should be looking for common (shared) efforts and common (shared) flows, but commonality may not be immediately obvious to the new practitioner, so to get started one can place a 0 node wherever a distinct effort potential (voltage) can be identified, and 1 nodes wherever a flow is identified, and then bonds between the 0 and 1 nodes:

  i1    v1    ir    v2     i2
1 --- 0 --- 1 --- 0 ---- 1
|
1 ic


Note that i1 and ic both involve current flows to ground, so no power flows there, so no bonds are shown for those power flows.

Next, one can add the power dissipating elements next to and connected to the 1 junctions representing flows through components. The connecting bonds represent the power flows that are generated, stored or dissipated by those elements.

 Se,in         R
|           |
|           |     v2     i2
1 --- 0 --- 1 --- 0 ---- 1
i1    v1    ir    |
|
1 --- C
ic


Next, 0 or 1 junctions that only have one or two bonds can be optimized out of existence because the power flows on those bonds are identical.

            R
|ir
v1  |     v2    i2
Se,in ---- 1 --- 0 --- 1
i1        |
| ic
C


Note that because v2 is measured, we can equivalently assume that i1=0 or that the output bond has a full arrow, and we can re-arrange the bonds for a more regular graph, and we can assign direction of power flow:

             R       C
|\      |\
|ir     |ic
v1                 \ i2
Se,in ----- 1 ----- 0 ----- out
i1 /       /       /


The half-arrows on the remaining 1 junction are assigned so that the power flows into passive elements (R and C), out of the source of effort, and arbitrarily for flows between the 0 and 1 junctions. If you can anticipate a convention that causes them to be positive then interpreting results will usually be easier. For example, the power flowing between the 1 and 0 junctions should flow away from the 1 junction like the power flowing to the resistor, so set the half-arrow to reflect that.

Causality is defined by first setting the causality for reactive elements and power sources according to their behavior. Sources of effort and capacitors should impose effort (causality stroke opposite the source), and sources of flow and inertial elements should impose flow (causality stroke near the source). Once this is done, all 0 junctions should have one causal stroke on the near end of its bonds, and all 1 junctions should have only one causal stroke on the opposite end of any of its bonds. Causality for bonds on resistive elements can go whichever way satisfies the junction at the other end of the bond.

               R          C
---
|\         |\
|          |ic
---
v1   |     |            v2  \
Se,in ------|  1  |-----  0  ------- out
i1  /|     |    /       i2  /


Note that the output is assumed to draw no power from the circuit, so a full arrow is used instead of a half-arrow. For the purpose of modeling dynamics, this means the output full bond can be ignored and the diagram is simplified (though the variables have now been renumbered):

                R
---
|\
v3 | i3
|
v1   |     | v2
S_e,in ------|  1  |-----  C
i1  /|     | i2 /


Although a systematic approach to formulating the bond graph was described above, in retrospect the central 1 junction in the final bond graph reflects the fact that the same current flows through the input voltage source, the resistor, and the capacitor. One attraction of bond graphs is that experienced bond graph users can bypass many steps on their way to modeling the dynamic system.

Having completed and simplified the bond graph, the diagram can now be used for its intended purpose: guiding the practitioner through the generation of differential equations that describe the dynamics of the system. This is accomplished by starting at each of the reactive elements in turn and working through the implications of each bond and junction. This process can, in more complicated diagrams, involve traversing the bonds in both directions at times, but having properly defined causality will prevent this apparent retracing of steps from leading to algebraic loops or integral equations.

${\displaystyle S_{e},in}$ is a "source of effort" (voltage source) that forces the dynamics. Note that the causality for a source of effort imposes effort on the junction. To avoid formulating integral equations, the causality stroke for the capacitor must also impose effort on the junction. Since every 1 junction should have exactly one flow causal stroke, bond 3 must show flow imposed by the R element (causal stroke away from 1 junction).

To derive the differential equation, start on bond 2 (attached to a reactive element) and write the differential equation for that reactive element:

${\displaystyle {\dot {v}}_{2}={1 \over C}i_{2}}$

One can follow an invisible path from ${\displaystyle v_{2}}$ through the C and back to the ${\displaystyle i_{2}}$ corresponding to writing this equation down. Because bond 2 is attached to a 1 junction (shared flow) where bond 3 determines the flow, we can extend our path through the diagram from the ${\displaystyle i_{2}}$ of bond 2 to the ${\displaystyle i_{3}}$ of bond 3 following the flow causal stroke, obtaining ${\displaystyle i_{2}=i_{3}}$. Note that we ignore the half-arrows at this point because all flows on a 1 junction are equal, regardless of direction of power flow. Substituting, we expand the differential equation with more information about the system:

${\displaystyle {\dot {v}}_{2}={1 \over C}i_{3}}$

At this point, we can follow the causality path from ${\displaystyle i_{3}}$ through R and back to ${\displaystyle v_{3}}$, writing the corresponding relation ${\displaystyle i_{3}={v_{3} \over R}}$. We can substitute this relation into the differential equation:

${\displaystyle {\dot {v}}_{2}={1 \over C}{v_{3} \over R}}$

Continuing to follow causality, the effort on bond 3 (${\displaystyle v_{3}}$) is related to all the other efforts on the 1 junction since they must all sum to zero. That is, using the half-arrows to define signs we can write ${\displaystyle v_{3}=v_{1}-v_{2}}$ and substitute this into the differential equation:

${\displaystyle {\dot {v}}_{2}={1 \over C}{{v_{1}-v_{2}} \over R}}$

Since ${\displaystyle v_{1}}$ is an input, and ${\displaystyle v_{2}}$ is a state variable (effort on a C element), the equation is completely expanded. Had it not been completely expanded, it might be necessary to follow two causality paths beyond this point to eventually completely expand the differential equation.

For systems with multiple I and/or C elements, the process can be repeated once for each derivative of a state variable to form a system of (typically but not necessarily linear) differential equations. For example, suppose we put two of these RC circuits in series:

        R             → i2     R
i1 --\/\/\-----+------------\/\/\-----+------ i3 →
v1             |       v2             |       v3
C = ↓ic               C = ↓ic
|                      |
ground ----+----------------------+---------


Although this circuit was constructed as two cascaded RC circuits, the behavior of the first RC circuit is now complicated by the fact that power flows out of its "output" where before no power flowed there. This changes the overall dynamics of this system, but bond graphs can guide the formation of correct equations anyway. The corresponding bond graph looks like

           R          C          R         C
---                   ---
|\         |\         |\        |\
6 |        4 |        2 |       3 |
---                  ---
1   |   |  5          7   |   |  8        9  \
SE ------| 1 |------  0  ------| 1 |------ 0 ------ out
/|   |     /          /|   |     /        /


where the ever-present effort/flow (voltage/current in this case) variables have been dropped and the bonds are simply numbered per typical bond graph convention (in this case the first four numbers were placed to avoid confusion with the signal numbering in the circuit diagram). Again, the output is assumed to draw no power so bonds 8 and 9 can effectively be removed in favor of a direct connection to bond 3:

           R          C          R
---                   ---
|\         |\         |\
6 |        4 |        2 |
---
1   |   |  5          7   |   |  3
SE ------| 1 |------  0  ------| 1 |------ C
/|   |     /          /|   |     /


As before, we can start with the derivative of a state variable (${\displaystyle v_{4}}$) and follow the bonds to form equations:

${\displaystyle {\dot {v}}_{4}={1 \over C_{4}}i_{4}={1 \over C_{4}}(i_{5}-i_{7})={1 \over C_{4}}(i_{6}-i_{2})}$

Continuing the expansion:

${\displaystyle {\dot {v}}_{4}={1 \over C_{4}}({v_{6} \over R_{6}}-{v_{2} \over R_{2}})}$

${\displaystyle {\dot {v}}_{4}={1 \over C_{4}}({{v1-v5} \over R_{6}}-{{v7-v3} \over R_{2}})}$

${\displaystyle {\dot {v}}_{4}={1 \over C_{4}}({{v1-v4} \over R_{6}}-{{v4-v3} \over R_{2}})}$

At this point, ${\displaystyle {\dot {v}}_{4}}$ is defined in terms of inputs and state variables.

Similarly, ${\displaystyle {\dot {v}}_{3}}$ can be obtained in terms of inputs and state variables:

${\displaystyle {\dot {v}}_{3}={1 \over {C_{3}R_{2}}}v_{4}-{1 \over {C_{3}R_{2}}}v_{3}}$

It is conventional in state space representation to group terms by state variables and inputs:

${\displaystyle {\dot {v}}_{4}=-({1 \over {C_{4}R_{6}}}+{1 \over {C_{4}R_{2}}})v_{4}+{1 \over {C_{4}R_{2}}}v_{3}+{1 \over {C_{4}R_{6}}}v_{1}}$

and to express the equations in matrix form:

${\displaystyle {\begin{bmatrix}{\dot {v}}_{4}\\{\dot {v}}_{3}\end{bmatrix}}={\begin{bmatrix}-({1 \over {C_{4}R_{6}}}+{1 \over {C_{4}R_{2}}})&{1 \over {C_{4}R_{2}}}\\{1 \over {C_{3}R_{2}}}&-{1 \over {C_{3}R_{2}}}\end{bmatrix}}{\begin{bmatrix}v_{4}\\v_{3}\end{bmatrix}}+{\begin{bmatrix}{1 \over {C_{4}R_{6}}}\\0\end{bmatrix}}v_{1}}$.

## Other components

### Transformer

A transformer adds no power but transforms it, much as an ideal electrical transformer or a lever.

Denoted

         r
e1   ..   e2
------- TF ------
f1        f2


where the r denotes the modulus of the transformer. This means

${\displaystyle f_{2}=rf_{1}\,}$

and

${\displaystyle e_{2}={\frac {1}{r}}e_{1}\,}$.

### Gyrator

A gyrator relates flow to effort. It also adds no power and is written

   e1   μ   e2
------- GY ------
f1        f2


meaning that

${\displaystyle e_{2}=\mu f_{1}\,}$

and

${\displaystyle e_{1}=\mu f_{2}\,}$.

## International conferences on bond graph modeling (ECMS and ICBGM)

A bibliography on bond graph modeling may be extracted from the following conferences :

• 20-sim simulation software based on the bond graph theory
• AMESim simulation software based on the bond graph theory
• BG V.2.1 Freeware MATLAB/Simulink add-on library for graphical Bond Graph programming
• Hybrid bond graph

## References

1. ^ Karnopp, D. C., Rosenberg, R. C. and Margolis, D. L. (1990). System dynamics: a unified approach. Wiley. ISBN 0-471-62171-4.
2. ^ Paynter, Henry M. (1961). Analysis and Design of Engineering Systems. The M.I.T. Press. ISBN 0-262-16004-8.
3. ^ Karnopp, Dean C. (2006). System Dynamics- Modeling and Simulation of Mechatronic Systems. John Wiley and Sons Inc. ISBN 0-471-70965-4.
4. ^ "University of Glasgow :: School of Engineering :: Former Department sites". Mech.gla.ac.uk. Retrieved 2012-08-28.