The Azimuth Project
Blog - The stochastic resonance program (part 1) (Rev #10, changes)

Showing changes from revision #9 to #10: Added | Removed | Changed

This page is a blog article in progress, written by David Tanzer. To see discussions of this article while it was being written, visit the Azimuth Forum. Please remember that blog articles need HTML, not Markdown.

guest post by David Tanzer</i>

Today let’s look at some software that has been created in the Azimuth code project. There are a number of models there, which are implemented as interactive web pages. The code runs as javascript right in the browser, so their behavior is responsive. This blog covers the stochastic resonance model, by Allan Erskine and Glyn Adgie. The other models use the same software platform.

A test drive

The page contains a green sine wave, a randomized, funky curve, and four sliders.

  • The sine wave is fed as input to a random process, which generates the other time series.

  • Two of the sliders directly control the frequency and amplitude of the sine wave, and affect, in a complex way, the output time series. Verify this through experiment.

  • The noise slider controls the randomness of the process. Experiment with it, to get the output to range from perfectly smooth to completely chaotic.

  • The “seed” parameter gives different instances of the process.

Synopsis of the program

This program performs a discrete simulation for a “stochastic differential equation” (SDE), which is an equation that specifies the derivative of a function in terms of time, the current value of the function, and a noise process. When noise is zero, you get an ordinary differential equation.

The program contains the following elements:

  1. A general simulator for SDE’s, which is based on the Euler method

  2. The specific derivative function, which gives the stochastic resonance model

  3. Auxiliary functions used by this derivative function

  4. Interactive controls to set parameters

  5. Plot of the intermediate time series (the sine curve)

  6. Plot of the output time series

Going to the source

I would like everyone now to try to locate the source code, through the following procedure.

  • Open the web page for the model.

  • Since the code is now running in your browser, you have already downloaded it!

  • Now, while your on the page, all you have to do is run your browser’s view-source function. For Firefox on the Mac, use Apple-U, of course, for Firefox on the PC use … (TODO: fill in)

  • The window should open up with some html stuff, which after a quick reorganization of your visual parsing neural pathways, should clearly show the text of the web page.

  • The code is loaded into the browser by these lines at the head of the html file:

   <script src=''></script>
    <script src=''></script>
    <script src='./StochasticResonanceEuler.js'></script>
    <script src='./normals.js'></script>

  • Explanation: The first javascript file is for MathJax, which is an open source engine for rendering math formulas. Next, JSXGraph is a cross-platform library for interactive graphics, function plotting, and data visualization. Then we see the main program, StochasticResonanceEuler.js. Finally, normals.js defines a table of random numbers that is used by the calculation.

  • Now click on the highlighted link for StochasticResonance.js – and you should be there!

Now that you’re at the code for StochasticResonanceEuler.js, please humor me by scanning through it, and attempting to associate code fragments with elements in the synopsis that I gave above. You’ll need to put a blur lends over various items of implementation-dependent mumbo jumbo; just sniff around, and try to form some rough hypotheses.

The stochastic resonance model

The model works through a simulation defined by a stochastic differential equation (SDE), which gives the “instantaneous derivative” of a process as a function of its current value x, time t, and a Brownian-motion-like noise term. Now, to avoid mathematical liability, I should point out that the “infinitesmally chaotic” nature of the noise term raises challenging and interesting questions for defining the instantaneous rate of change, which are outside of the scope of this article. But we get a real break here, because the approximation we are going to use (Euler-based) works by taking a sample of an ostensibly instantaneous rate of change, and extrapolating that linearly over the sample interval; the randomness enters into the picture simply in that the computation of the derivative, at the sample points, may involve random numbers.

In the stochastic resonance model, the deterministic component of the derivative is specified to be a sinusoidal function of t, called the forcing function, plus a function of x that has two stable points of equilibrium:

DerivDeterministic(t, x) = Wave(t, amplitude, frequency) + Bistable(x),

where Wave(t, amp, freq) = … and Bistable(x) =

Here Bistable is the polynomial: Bistable(x) = x * (1 - x^2).

Considered alone, the forcing function would cause the value of X(t) to oscillate sinusoidally.

Now let’s analyze the effect of Bistable(x) in isolation. Bistable has roots at -1, 0 and 1, which give the equilibrium points for X(t): -1 and 1 are stable equilibria, and 0 is unstable. The basin of attraction for -1 is all the negative numbers, the basin for +1 is the positive numbers, and the unstable equilibrium is the boundary between the basins.

Let’s treat each basin of attraction as one of the states of the system. It is a bistable system.

Next consider the combined effect of the forcing sine wave and the bistable polynomial. If this amplitude is lower than a certain threshold, then the system will stay in one basin forever, oscillating around the equilibrium point. If the amplitude is large enough, it will pull the system back and forth between the two basins, i.e., the system will oscillate between the two stable states, at the frequency of the forcing function – it will resonate.

Now, suppose that the sine wave was large enough to periodically pull the system in the neighborhood of the zero, 0, but not large enough for it to actually reach zero and cross over to the other side. It’s So it still remaining remains in a single state. What happens, happens then, if we then add some noise to the term for the derivative? Well, if the noise has enough amplitude, and an event comes at the right time, when the system is in near the zero, vicinity of 0 due to the sine wave, that event may push the it system over to the other side. So we will see random transitions between states, which are most likely to occur at specific phases of the sine wave. With increasing noise amplitude, the transitions will occur with high probability on every cycle, and the system will be resonating with the driving function. The noise here hasamplified the effect of the input signal.

Application to reality: the theory Milankovitch of cycles and the frequency of the ice ages

A stochastic resonance model is used in one of the leading explanations for the periods between ice ages.

Here In we’ll consider a simplified model, picture, in which the climate of the Earth is modeled as being in one of two possible states: (1) a cold, snowball Earth, or (2) a hot Earth that contains no frozen water. The snowball Earth is in a stable state, because it is white, and hence reflects a lot of solar energy back into space, which keeps it cold. The hot Earth is also stable, because it is dark, which causes absorption of energy, and keeps it hot.

Now we let’s need to add a little touch bit more realism into to the picture, and assume that even in the snowball Earth, the glaciers are concentrated in the northern latitudes, and it is the temperature activity in the northern latitudes that most controls the state of the system. If it gets warm enough up there, the glaciers melt, and the hot Earth state is goes entered. to hot. If it gets cold enough there, then glaciers start to form, and the cold Earth state is goes entered. to cold.

So, we have a bistable system. What about the forcing function?

It turns out that there are astronomical phenomena that cause periodic variation in the amount of solar radiation that is transmitted to the Earth at the northern latitudes. These are known as Milankovitch cycles, and they have periods on the order of tens of thousands of years and upwards. There are three such astronomical cycles: changing of the tilt (obliquity) of the Earth’s axis, axis (41 kyr), precession of the Earth’s axis, axis (23 kyr), and changing of the eccentricity of the Earth’s orbit. orbit (state (100 the kyr). separate periods) Now the amplitude of these temperature changes in itself is not sufficient enough to move the climate from one state to another. (Sound familiar?) But it is possible that random temperature events may cause crossings if they are in sync with the Milankovitch cycles.

Researchers have found interesting correspondences between the actual spacing of the ice ages and the timings of these three Milankovitch cycles.

Well, That’s that as pretty much exhausts as what I’ve I have learned about this the subject, subject. so For for further information I’ll point you to to… —-.

Organization of the program

Now that we have explained the stochastic resonance model, and one of the reasons motivations why for it studying is it, studied in climate science, let’s return to our regularly scheduled topic, which is the anatomy of this program stochastic which resonance implements program. the model.

The program logic is broken into seven functions.

The top level entry point is the function initCharts, which is short function, and works by dispatching to two other functions, initControls and initSrBoard. (Key: sr = stochastic resonance, board = a graphical gizmo that contains various controls.) As Details you aside, can it see, is not hard to see that initControls is building the objects that represent the sliders.

All The the main logical content of the application is encapsulated in this second function, initSrBoard. Two curve objects are constructed there, called positionCurve and forcingCurve. The forcing curve is constructed given from by the locally defined forcingFunction, which defines the sine wave. This function reads its values from the amplitude and frequency sliders.

Next, Now a callback crucial function function, is with the innocent name of mkSrPlot (for MakeStochasticResonancePlot), gets attached to the positionCurve “update—” object, method which of makes the call positionCurve to object. the This stochastic function resonance model proper: this is the responsible call to the “mkSrPlot” (short for MakeStochasticResonancePlot) redrawing function, which is passed all four of the slider curve, values. whenever This its call defining returns parameters a get object changed. that The return value of this function contains a list of time values, and a the corresponding list of values for the output variable for X. X(t).

The algorithm

The main algorithm is clearly spelled expressed out in the function mkSrPlot. Its first step is to construct a function object, object called that “deriv,” gives which represents the derivative deterministic computation: part of the derivative:

deriv = Deriv(t,x) = SineCurve + BiStability,

where Then represents a “stepper” function is constructed, by the deterministic call component to Euler(deriv, tStep). The idea of a stepper function is simple: it takes as input the derivative. current point (t,x), and a noise sample, and returns the next point (t’,x’). The specific stepper that is built by Euler maps (t,x) to (t + tStep, x + tStep * Deriv(t,x) + noiseSample).

Then A a stepper “stepper” function is constructed, all by that is needed for the call general to toplevel Euler(deriv, loop, tStep), which returns is a implemented by the function that sdeLoop, performs to “stochastic generate Euler extrapolation,” with a step size of tStep, using the given full derivative time function. series for the output. The idea main loop of a the stepper simulator function is simple: passed: it takes as input the current stepper function, the noise amplitude (“dither”), the initial point (t,x), (t0,x0), a seed value for the randomization, and a noise number sample, of points to be generated. The loop initializes a currentPoint to (t0,x0), and returns then repeatedly applies the next point (t’,x’). The specific stepper constructed function by to Euler the just current increments point t by tStep, and increments x by tStep * Deriv(t,x) + the next noise sample. sample; the output returned is just this sequence of (t,x) values.

A stepper function of this form is all that is needed for the general toplevel loop, which is implemented by the function sdeLoop, to generate the full time series for the output. This sdeLoop function takes as arguments the stepper function, the noise ampllitude (“dither”), the initial point (t0,x0), a seed value for the randomization, and a number of points to be generated. The loop initializes a currentPoint to (t0,x0), and then repeatedly applies the stepper function to the current point and the next noise sample; the output returned is just this sequence of (t,x) values.

The noise samples are generated by taking a block of values from the (large) array normals(i), and scaling them by the dither value. The “seed” variable controls which section of the array gets used.

How to make your own version of the app

How to post it.

Problems and challenges

  • Effect of frequency

  • Design a study of the effectiveness of signal transmission, as a function of noise amplitude and signal frequency. How you define the effectiveness measure?

  • How would you restructure the code for general, statistical studies of the output time series?

  • When the sliders are moved, an event must be fired, which causes the recalculation to take place. How is this mechanism implemented in the javascript / JSXGraph application library?

  • Modify to add an exponent slider

  • Modify to show graph of expected value (add slider for nTrials) (Not enough random numbers.)

  • Add a standard deviation plot

  • If you are a climate scientist, let us know of next steps

  • Begin to study this book —-, and think of how to write programs for some of the models. Simplify! The hierarchy of models. All models that you post here will be considered as candidates for the Azimuth Code Project page. This may be a way for programmers, ultimately, to give back to the Earth.

category: blog