The Standard Logistics Difference Equation

This program exercises the difference equation x = rx(1 - x) for different values of r [r was renamed c in the applet]. For r < 2.1 it produces the familiar sigmoid curve used to represent the growth of populations, market demand and a myriad other things. For 2.1 < r < 2.9 the curve climbs to a maximum then follows a dying oscillation which eventually settles to a constant value. For 2.9 < r < 3.4 the curve climbs as usual but settles down to a regular oscillation. For 3.4 < r < 3.6 the oscillation becomes increasingly complex, at one point adopting a kind of waltz rhythm. From 3.7 < r < 4 regular oscillations give way to chaotic behaviour. For r > 4 this becomes so extreme that the 'population' soon hits zero and thus destroys itself.
'StdLog.BAS
screen 9,3 : color 7,1 : window (-50,-200) - (+350,+200)
xy = 4/5           'aspect ratio of IBM PC CGA screen
bias1 =  42
bias2 = -150
s = 4
gosub FrameSub

a:
  locate 17,40 : input"r = ",r$ : if r$="" then end
  LOCATE 18,40 : input"x = ",x$ : if x$ = "" then x$ = ".001"
  gosub FrameSub
  r = val(r$)
  OldX = val(x$)

  for k = 0 to 350 step s           'for 350/s generations...
    NewX = r * OldX * (1 - OldX)    'update the value of x
    if OldX > 0 and NewX > 0 then   'If population not died out..
      y = (NewX - OldX) / OldX      'update the value of x-dashed
    else
      NewX = 0                      'population has all died out
    end if
    xNew = 150 * NewX           'new x-pixel co-ordinate
    yNew =  50 * y              'new y-pixel co-ordinate
    if k > 0 then
      pset((k - s) * xy, xOld + bias1), 7   'Draw time graph's
      line-( k * xy, xNew + bias1), 7       'line increment.
      pset(yOld * xy, xOld + bias2), 7      'Draw phase-graph's
      line-(yNew * xy, xNew + bias2), 7     'line increment.
    end if
    OldX = NewX    'set up the value of OldX ready for next pass
    xOld = xNew    'set up new x-pixel as next pass's old x-pixel
    yOld = yNew    'set up new y-pixel as next pass's old y-pixel
  next
goto a             'go back to accept another value of r

FrameSub:
cls
locate 11,31 : print"TIME SERIES DIAGRAM"
locate 1,10 : print "x"
locate 10,68 : print"t"
LOCATE 23,12 : PRINT"PHASE-SPACE DIAGRAM"
LOCATE 22,36 : print"dx"
LOCATE 23,36 : print"dt"
locate 13,10 : print"x"
line(-40 * xy, bias1)-(+350 * xy, bias1)
line(-40 * xy, bias2)-(+150 * xy, bias2)
line(0, bias2)-(0, bias2 + 150)
line(0, bias1)-(0, bias1 + 150)
locate 15,38 : print "Exercise formula: x = rx(1 - x)"
locate 17,40 : print "r = ";r$
locate 18,40 : print "x = ";x$
locate 4.1
return

This page's parent within this Web Site. About this Web Site. Its home page. Email its Author.