Positively pathological

When I see oscillatory behavior, I instinctively think “delayed negative feedback.” Normally, that’s a good guess, but not always. Sometimes it’s a limit cycle or chaos, involving nonlinearity and a blend of positive and negative feedback, but today it’s something simpler, yet weirder.

oscillation

Mohammad Mojtahedzadeh just sent me a classic model, replicated from Alan Graham’s thesis on Principles on the Relationship Between Structure and Behavior of Dynamic Systems. It’s a single positive feedback loop that doesn’t yield exponential growth, but oscillates.

What’s the trick? The loop is composed of pure integrations. The rate of change of each stock is the value of the previous stock in the loop multiplied by a constant. The pure integrations each add 90 degrees of phase lag (i.e. delay), so by the time a disturbance transits the loop, it arrives at its origin ready for a repeat performance.

The same thing occurs in a frictionless spring-mass system (think of an idealized hanging slinky), which oscillates because it is an undamped second order negative feedback loop. The states in the loop are position and momentum of the mass. Position is the integral of velocity, and momentum integrates the force that is a linear function of position. Each link is a pure integration (as long as there’s no friction, which adds a minor first-order negative loop).

So far so good, but the 4th order system is still a positive loop, so why doesn’t it grow? The trick is to initialize the system in such a way as to suppress the growth mode. To do that, we just have to initialize the system in a state that contains no component of the eigenvector corresponding with the growth mode, which is the positive real eigenvalue.

Looking at the 4th order system mathematically, it can be written as a gain matrix:

0 0 0 1
1 0 0 0
0 1 0 0
0 0 1 0

Using the spiffy online eigenvalue calculator here, that has:

Characteristic polynomial: x^4 - 1
Real eigenvalues: {-1, 1}
Complex eigenvalues: {-î, î}
Eigenvector of eigenvalue -1: (-1, 1, -1, 1)
Eigenvector of eigenvalue 1: (1, 1, 1, 1)
Eigenvector of eigenvalue -î: (1, î, -1, -î)
Eigenvector of eigenvalue î: (1, -î, -1, î)

So, we can initialize the system with any linear combination of (-1,1,-1,1), (1,1,-1,-1), and (1,-1,-1,1), as long as we don’t let any (1,1,1,1) sneak in. If we choose (-1,1,-1,1), we get exponential decay – the behavior we’d expect for the negative real eigenvalue. Any combination of the other two – like ((1,1,-1,-1)+ (1,-1,-1,1))/2 = (1,0,-1,0) yields oscillation.

This all works because the behavior modes in a linear system exist independently – sort of an Odd Couple who can cohabitate without bugging each other.

It’s possible to use the eigenvalue calculator to create other pathological parameterizations. For example, the gain matrix

0 0 0 .4
.5 0 0 0
0 .6 0 0
0 0 .7 0

yields eigenvectors that can be used to initialize the loop with alternate stable and oscillatory states. In the oscillatory mode, the phase lag at each step is still 90 degrees, but the amplitudes of each stock differ (the system is a scaled version of the original).

If none of this is making sense, take a look at Alan’s thesis, starting around page 51. Actually, read the whole thing (I am) – it does a nice job of connecting behavior to structure and mathematics intuitively.

Is this policy relevant? In any realistic system, the tiniest bit of noise would excite the growth mode, leading to explosive behavior. That can’t really happen in the real world, so to the extent that this behavior manifests itself, it must be tempered by bounding nonlinearities. However, Alan Graham does identify at least one instance of such a loop (in Forrester’s classic Market Growth model).

Vensim models of Mohammad’s replication of Alan’s original, plus some new versions inspired by it, are in my model library.

2 thoughts on “Positively pathological”

Leave a Reply to Bill Harris Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.