Attribute VB_Name = "Module2" Public x As Double, r As Double, dr As Double '*************************************************************************** '* FRACTALS: VERHULST DIAGRAM * '* ----------------------------------------------------------------------- * '* TUTORIAL: * '* * '* The dynamic process that allows to very simply simulate "chaos" has the * '* following mathematical form: * '* x = f (x , C ). * '* n+1 n * '* The only condition is that the relation between input x n and output * '* x n+1 be non linear. If this iterative process starts with an arbitrary * '* value x0, it will give a series of values: x1, x2,...,x n... The long * '* term behaviour of this series is interesting. * '* * '* Let us consider the classical example of the growth of a population over* '* several years. Let be an initial population x0 which after n years has * '* become x n. The growth ratio is: * '* r = ( x n+1 - x n ) / x n. * '* If this ratio remains constant, the dynamic law is: * '* * '* x n+1 = ( 1 + r ) x n * '* * '* After n years, the population will be: x n = ( 1 + r ) x0. * '* * '* To clarify the situation, let us consider the case where x0 = 0,001. * '* If the growth ratio equals 5%, the population will roughly double * '* every 15 years. As a matter of fact: * '* * '* x0 = 0,001 x1 = 0,00105 x2 = 0,0011025 * '* x3 = 0,00115763 x4 = 0,00121551 x5 = 0,00127628 * '* x6 = 0,00134010 x7 = 0,00140710 x8 = 0,00147746 * '* x9 = 0,00155133 x10 = 0,00162889 x11 = 0,00171034 * '* x12 = 0,00179586 x13 = 0,00188565 x14 = 0,00197993 * '* x15 = 0,00207893 ... * '* * '* This kind of growth is exponential. But this dynamic law is linear, * '* which is not judicious. Actually, the real growth of a poulation is * '* necessarily limited by the ressources of its habitat, which are not in * '* infinite quantity, such as food, for example. The belgian Verhulst was * '* one of the first to study this phenomenon in 1845. * '* He advised to consider a variable growth ratio r, taking the form * '* r = r - C x n. The dynamic law of growth then takes the form: * '* * '* x n+1 = ( 1 + r ) x n - C x² n * '* * '* By having C = r / X, the population increases up to the value X, then * '* stabilizes at this value. At least, this remains true so long as the * '* growth ratio is < 200 %. A human population has never such a high growth* '* ratio, but in the case of insects, for example, this can be quite * '* possible. For a growth ratio even higher, one can observe surprising * '* results (see verhulst.pas program). * '* * '* The calculation begins at x0 = 0,1 X. * '* * '* Case r = 1.8 * '* * '* The response curve climbs up rapidly and after some oscillations reaches* '* a limit that is an "attractor". * '* * '* Case r = 2.3 * '* * '* The curve oscilates rapidly between two levels that frame the value X. * '* The suite has two attractors. * '* * '* Case r = 2.5 * '* * '* The suite has four attractors. * '* * '* Case r = 3.0 * '* * '* The numbers x jump from one value to another one, without having twice * '* the same value. Such a behaviour can be qualified as "chaotic". * '* * '* See also program chaos.bas (Feigenbaum diagram). * '* ----------------------------------------------------------------------- * '* From "Graphisme dans le plan et dans l'espace avec Turbo Pascal 4.0 * '* By R. Dony - MASSON, Paris 1990, pages 189-192" [BIBLI 12]. * '* * '* Microsoft Visual Basic 4.0 release by J-P Moreau * '* (Project must include verhulst.frm and Gr2D.bas) * '* (www.jpmoreau.fr) * '*************************************************************************** Sub Verhulst() Dim i As Integer Dim bord As Integer bord = 150 Form1.AutoRedraw = False Form1.Cls 'Subroutines of gr2d.bas: Fenetre 0, 170, 0, 1.5 'define window in physical coor. Cloture 5 * bord, MaxX - bord, bord, MaxY - bord 'define window in pixels Grid 10, 0.1 'draw grid, step 10 in Ox, 0,1 in Oy Axes 'draw axes if visible Graduate 20, 0.2 'graduate axes, step 20 in Ox, 0,2 in Oy Bordure 'draw frame around curve s$ = InputBox("Input value for R (maxi 3):", "DATA", "2.95") r = Val(s$) Form1.Font.Bold = True Form1.Font.Size = 12 Display 6 * bord, bord + 50, "VERHULST DIAGRAM" Form1.Font.Bold = False Form1.Font.Size = 9 'main loop of Verhulst diagram x = 1#: xx = 0.1 MoveXY 0#, xx Do x = x + 1# xx = (1 + r) * xx - r * xx * xx LineXY x, xx Loop Until x > 165 'print r value in bottom right corner s$ = "R= " & Str(r) Display MaxX - 6 * bord, MaxY - 3 * bord, s$ 'change label of button "Go" Form1.Command2.Caption = "Continue" End Sub