1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta http-equiv="Content-Style-Type" content="text/css">
<title></title>
<meta name="Generator" content="Cocoa HTML Writer">
<meta name="CocoaVersion" content="1038.35">
<style type="text/css">
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica}
p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Helvetica; min-height: 22.0px}
p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica}
p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px}
p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; min-height: 12.0px}
p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #cd1713}
p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco}
p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 9.0px Monaco; color: #000000}
span.s1 {color: #102ac3}
span.s2 {color: #008225}
span.s3 {color: #102ac2}
span.Apple-tab-span {white-space:pre}
</style>
</head>
<body>
<p class="p1"><b>Brusselator<span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span><span class="Apple-tab-span"> </span>Prigogine oscillator</b></p>
<p class="p2"><br></p>
<p class="p3"><b>Brusselator.ar( reset=0, rate=0.01, mu=1.0, gamma=1.0, initx=0.5,inity=0.5,mul, add)</b></p>
<p class="p4"><br></p>
<p class="p3">Euler ODE solver implementation of the Brusselator equations (http://en.wikipedia.org/wiki/Brusselator). <span class="Apple-converted-space"> </span></p>
<p class="p4"><br></p>
<p class="p3">x' = x^2*y - (mu+1)*x + gamma<span class="Apple-converted-space"> </span></p>
<p class="p3">y' = -x^2*y + mu*x</p>
<p class="p4"><br></p>
<p class="p3">All inputs can have .kr rate UGens plugged in.</p>
<p class="p4"><br></p>
<p class="p3">Nonlinear oscillators can blow up, treat with caution. This one is relatively stable however, converging to a fixed point, or a limit cycle, in the upper positive quadrant. for some reasonable values. Just be careful if mu gets much bigger than gamma (though making it larger is necessary to get some chaotic oscillation behaviour); you can retrigger to get back to normal, and keep the rate lower to avoid Euler integration blow-ups. You may just need to scale and push down around zero to avoid a DC offset. Fixed point is at (x,y) = (gamma, mu/gamma)</p>
<p class="p4"><br></p>
<p class="p3"><b>reset</b>- If > 0.0, restart with new initial conditions sampled from initx, inity</p>
<p class="p3"><b>rate</b>- update rate for a sample step</p>
<p class="p3"><b>mu</b>- equation constant. Set mu > (gamma**2 + 1.0) for the more fun limit cycle regions</p>
<p class="p3"><b>gamma</b>- equation constant</p>
<p class="p3"><b>initx</b>- reset value for x</p>
<p class="p3"><b>inity</b>- reset value for y</p>
<p class="p4"><br></p>
<p class="p5"><br></p>
<p class="p6">//listen to x and y output</p>
<p class="p7">{<span class="s1">Out</span>.ar(0,<span class="s1">Brusselator</span>.ar(<span class="s1">Impulse</span>.kr(<span class="s1">MouseY</span>.kr(1,50,<span class="s2">'exponential'</span>)),<span class="s1">MouseX</span>.kr(0.01,1,<span class="s2">'exponential'</span>)))}.play</p>
<p class="p5"><br></p>
<p class="p6">//avoid DC offset (default gamma is 1.0, listening to x only, so take off gamma</p>
<p class="p7">{<span class="s1">Out</span>.ar(0,<span class="s1">Pan2</span>.ar((<span class="s1">Brusselator</span>.ar(<span class="s1">Impulse</span>.kr(<span class="s1">MouseY</span>.kr(1,50,<span class="s2">'exponential'</span>)),<span class="s1">MouseX</span>.kr(0.01,1,<span class="s2">'exponential'</span>)))[0] - 1.0) )}.play</p>
<p class="p5"><br></p>
<p class="p5"><br></p>
<p class="p6">//fun time, stable oscillation with these parameters</p>
<p class="p7">{<span class="s1">var</span> mu = <span class="s1">MouseY</span>.kr(1.0,1.5); <span class="s1">Out</span>.ar(0,<span class="s1">Pan2</span>.ar(<span class="s1">Brusselator</span>.ar(0.0,<span class="s1">MouseX</span>.kr(0.01,0.1,'exponential'),mu,0.25)[0] ) )}.play</p>
<p class="p5"><br></p>
<p class="p5"><br></p>
<p class="p7">{ <span class="s3">Out</span>.ar(0,<span class="s3">Pan2</span>.ar(<span class="s3">Brusselator</span>.ar(Impulse.kr(10),<span class="s3">MouseX</span>.kr(0.01,0.1,'exponential'),1.5,0.25,MouseY.kr(-1.0,1.0),0.0)[0]) )}.play</p>
<p class="p5"><br></p>
<p class="p5"><br></p>
<p class="p8">{ <span class="s1">Out</span>.ar(0,<span class="s1">Brusselator</span>.ar(<span class="s1">Impulse</span>.kr(<span class="s1">MouseY</span>.kr(1,500,<span class="s2">'exponential'</span>)),<span class="s1">MouseX</span>.kr(0.01,0.1,<span class="s2">'exponential'</span>),1.15,0.5,0.5,1.0) )}.play</p>
</body>
</html>
|