Attribute VB_Name = "Module2" Public V() As Double, vmini As Double, vmaxi As Double Dim 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 verhulst1.frm and Graph2D.bas, * '* Here scales in Ox and Oy are automatic). * '* (www.jpmoreau.fr) * '*************************************************************************** Sub Verhulst1() Dim i As Integer Dim Bord As Integer Bord = 150 Form1.AutoRedraw = False Form1.Cls 'init graph with auto scales (see graph2d.bas) EchAuto = 1 InitWindow False, 10, 0, 170, 0, 1.4 Legends 0, 10, "VERHULST DIAGRAM", "X", "Y" s\$ = InputBox("Input value for R (maxi 3):", "DATA", "2.95") r = Val(s\$) '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 0, X, xx Loop Until X > 165 'print r value in bottom right corner s\$ = "R= " & Str(r) Display 0, MaxX - 6 * Bord, MaxY - 3 * Bord, s\$ 'change label of button "Go" Form1.Command2.Caption = "Continue" End Sub