Тема:  Математика

Автор: А.В. Никитин, В.Ю.Ипатов

Содержание темы: Ищем хаос… -2

В начале было…... 2

Вариации на тему... 4

Мы строили, строили…... 6

О программе…... 8

Заключение. 14

 

 

Мы ищем хаос… - 2.

 

Мы продолжаем публикацию результатов исследования разностного логистического уравнения, затронутого в нашей статье [10].  Хотелось бы сразу отметить, что графики, показанные, как результат вычислений по заданной формуле последовательности несколько приукрашены. Они лишены первичных колебаний значений, неизбежных при подходе к режиму стабилизации.

Но, это было сделано с той же целью, с которой то же самое делали и остальные авторы публикаций – необходимо было отразить основной процесс фрактализации результатов вычислений, не зарываясь в частности подхода к этому. Пока, не зарываясь…, показать основу, главный результат – фрактал.

У нас была и дополнительная цель – выяснить влияние «шума», ошибки вычисления  на пределе возможности компьютера, апериодической составляющей на результирующий график. До существенного влияния «шума» на результат мы так и не добрались. Широкий скейлинг (скользящее масштабирование) по различным областям графика на уровне точности программы сильного влияния не выявил. Обещанного хаоса за С=3,57 мы так и не увидели…

В начале было…

А.Пайс  [5] призрачно намекает, что при изменении начального значения х основной график логистического уравнения  претерпевает незначительные изменения. Какие?

Если использовать методику отражения только стабилизированных значений вычислений, как это и делали авторы многих публикаций, то … при любом начальном х график стоит как вкопанный, никаких особых изменений незаметно. Но, тогда, какой смысл смотреть на эту застывшую картину бесконечной фрактализации…? Изменения проявляются, если каждый раз, при взятии нового значения х1 отражать все точки вычислений. Вот тогда видны изменения в подходе к зонам стабилизации результата.

 

01     05

Рис.1 Графики при х=0,1 (слева)  и х=0,5 ( справа)

Для примера на рис.1. покажем, как меняется вид графика при изменении начального значения х . Взяты значения х=0,1, как один из вариантов подхода к оптимальному значению и оптимальное значение х=0,5, при котором квадратичная функция х(1-х) достигает максимума. При х=0,5, как мы видим, количество точек за пределами основного графика минимально.

При переходе через максимум при х=0,5 отмечается симметричность картины. Вот, на рис.2. показаны сформированные графики при х=0,4 и х=0,6. Что называется, найдите разницу…

 0406

Рис.2. Графики при х=0,4(слева) и х=0,6 (справа)

 

Более интересен подход  начального значения переменной х к границе диапазона изменения. На рис. 3. показаны графики сверху вниз при х=0,1; х=0,01; х=0,00001 и х= 0,00000001 соответственно.

01

001

00001

00000001

Рис.3. Графики при х=0,1; х=0,01; х=0,00001; х=0,00000001

(сверху вниз)

Как мы видим, при всех изменениях начального значения х основной график существенных изменений не претерпевает. Меняются лишь подходы к точкам стабилизации, которые и составляют основной график. При подходе к границе х=1 картина будет аналогичная.

По мере приближения к границе диапазона возникают новые точки стабилизации, например, при х=0,00000001, как мы видим, возникли уже две относительно стабильные точки, соединяющие в единую линию точку пересечения фрактальных образований («звезду») с начальной линией роста до входа в фрактальную область. Эта линия и дальше  хорошо прослеживается на основном графике при соответствующем изменении масштаба отображения…

 Да, запланированного, вроде бы, хаоса или апериодического изменения очередного вычисленного хn в процессе подхода к точке стабилизации и здесь что-то не видно…

 

Вариации на тему...

 

Механизм образования фракталов при вычислениях значений хn  по формуле разностного логистического уравнения  хорошо изложен в работах Митчелла Фейгенбаума [1], основного исследователя этого и других уравнений подобного типа,  и потому возвращаться к этому мы не будем.

 По всей видимости, разностное логистическое уравнение вида:

 

хn+1 = rxn(1-xn)

(1)

 

является основным уравнением для уравнений вида:

хn+1 = rxn(k-xn)

(2)

 

 

где k может принимать любое положительное значение. Это верхняя граница изменения переменной х.

При этом начальная точка образования общего графика r1 при х=0,  может быть вычислена как r1=1/k, а конечная точка, соответственно, как rк=4/k, при достижении которой значения хn выходят за пределы диапазона изменения х.

Для примера можно взять k=Ф, где Ф = 1,618…, золотая пропорция или число Фидия.

Уравнение принимает вид:

 

хn+1 = rxn(Ф-xn)

(3)

 

Где: 0<xn<1,618…

Точка начала графика r1=1/Ф = 0,618…, конечная точка графика rк =4/Ф = 2,4721359…

Построение графика при х1=0,618… на рис.4. подтверждает полученные результаты предварительных расчетов диапазона изменения r.

FF1

Рис.4. График, построенный по формуле (3).

 

Как мы видим, форма графика при расчетном масштабировании никаких заметных изменений не претерпевает.

Изменения графика появляются при преобразовании формулы (2)  до вида:

 

хn+1 = rxn(k-xn)m

(4)

 

Например, модифицируем формулу(3) до вида:

хn+1 = rxn(Ф-xn)2

(5)

На рис.5. показан график, построенный по формуле (5). Как мы видим, график значительно изменился. Появились новые фракталообразующие щели. Изменился ход линий высокой вероятности. Начальная точка графика сместилась к r1=0,38, конечная точка rn=3,43. Изменился и диапазон изменения переменной х от 0 до значения 2,23.

 

FN2-1

Рис.5. График, построенный по формуле (5).

Изменим уравнение до вида:

хn+1 = rxn(Ф-xn)3

(6)

Увеличение степени приводит к новому изменении графика. Например, на рис.6. видно, что  при диапазоне изменения х от 0 до Ф, начало графика сместилось до r1= 0,236, а конечная точка сместилась к rn=2,236..

FFN1

Рис.6. График, построенный по формуле (6).

Теперь модифицируем уравнение до вида:

хn+1=rxnm(1-x)

(7)

При этом график уравнения изменился. На рис.7. слева график  по формуле (7) при m=2, справа при m=3, соответственно. Начальное значение х1 =0,9 в обоих случаях.

 

X2(1-X) X3(1-X)

Рис.7. Графики по формуле (7) при m=2 (слева), m =3 (справа).

При увеличении степени m происходит увеличение области отображения, но общая картина меняется незначительно.

На этом эксперименты с модификациями уравнений, сконструированными на основе разностного логистического уравнения можно бы и закончить, но … нас несколько озадачил исторически ограниченный аспект проведенных ранее исследований.

Мы строили, строили…

Изначально, уравнение (1) было предложено, как формула расчета колебаний средней численности какой-то популяции какого-то биологического вида, в замкнутом объеме за несколько периодов, в зависимости от благоприятности условий размножения r (или С).

Далее вводятся необходимые ограничения. При r<1 численность популяции стремится к 0, т.е. к вымиранию, стабильное развитие возможно только при r>1. При увеличении r до какого-то значения рост популяции идет стабильно, но, далее вдруг возникают колебания численности. При дальнейшем росте коэффициента r непрерывная линия графика рвется. Сначала возникают две точки стабилизации, потом четыре, и т.д. Удвоение точек бифуркации продолжается недолго, и уже  после нарастания таких точек до какого-то из 2n значений за одно очередное колебание общей линии графика переходит в апериодический характер изменений.  Количество точек бифуркации на предполагаемой линии графика принимается за количество периодов изменения численности, а весь период очередного колебания этой линии графика интерпретируется как период измерения при заданном изменении r. Понятно, что всё построение зависит от взятого шага изменения r в исследуемом диапазоне изменения. Чем меньше шаг, тем плавнее начальный изгиб общей линии колебаний. Но, уравнение квадратное, и колебания все время ускоряются, переходя в апериодическое изменение.   Да и привычной линии графика нет, одни точки, которые можно привязать к любой умозрительно взятой линии.

Это и заставило построить общий график, примерно такой, как на рис.1.

Теперь стало возможным решать обратную задачу, определять изменения r для получения заданного колебания переменной х.  Уравнение стало логистическим

Область применения уравнения для решения практических задач резко расширилась. Но, историческое ограничение области изменения фактора r от 0 до 4 так и осталось. 

Если ограничение увеличения r до 4 математически обоснованы, то изменение r  в область отрицательных значений ничем другим, кроме исторически сложившегося представления о применении уравнения, не ограничены.

Для такого расширения диапазона изменения r необходимо ввести и отрицательные значения хn . Пока при положительном начальном х1. Результат на рис.8.

 

POLN-1G2

Рис.8. Полный график логистического разностного уравнения.

График получен при начальном значении х1=0,5. Диапазон изменения r от -2 до 4, диапазон изменения хn от -1 до 1,6. За границами этого диапазона r построение графика срывается. При отрицательном  начальном значении х1 построение графика у нас не получилось…

Как мы видим, график содержит две группы фрактальных образований, одна нам уже известна, вторая располагается в отрицательной области значений r и захватывает диапазон изменения хn от -1 до 1,5. Видимо, эта область требует отдельного исследования, специалистами, к коим мы себя причислить не можем…

 

А вот, на рис.9. результат построения графика по экзотической, смоделированной нами формуле:

хn+1= xn  Logфr (ф-хn)

(8)

 

Где Logфr = Ln r/Lnф ;

 

LF-1

Рис.9. График, построенный по формуле (8).

Как мы видим, общая форма графика остается стабильной. Это, видимо говорит об общем характере графической картины результатов вычислений этого класса уравнений.

О программе…

Программа написана  на языке Турбо Паскаль версии Borland Pascal with Objects 7.0 выпуска еще 90-х годов прошлого века…

Приводим полный листинг программы:

{Программа

Графический вывод результатов расчета логистического уравнения Xn+1 = Cn*Xn*(1-Xn)}

 

Uses  Crt, Graph;

 

Const  Esc = #27;

 

Var Gd, Gm,  C, X, Cs, Xs, Cp, Xp, NC, NX, DatXp, i, j, n, d: Integer;

C0, Ck, X0, Xk, mC, mX, dC, dX, Xn, Xn0, Cn: Double;

Color, Xt: integer;

 

s, s1, s2, G: string;

 

f: file of char;

ch, ch1, ch2, ch3, Ch4: char;

n1, n2, n3: char;

bmp: array [1..40] of char;

 

function OutNumIn (L: Integer) : string; {подпрограмма вывода целых чисел}

var

  S: string;

  begin

    Str (L, S);

    OutNumIn:= S;

  End;

 

function OutNumRe (L: Double) : string; {подпрограмма вывода вещественных чисел}

var

  S: string;

  begin

    Str (L, S);

    OutNumRe:= S;

  End;

 

label  start;

 

 

Begin

Randomize;

 

         n:= 1;     {Начальные значения программы при первом запуске: } 

       Xn0:= -0.5;

 

        C0:= -2;  { Начальное значение коэффициента С, задаваемое для расчета }

        Ck:= 4;  { Конечное значение коэффициента С, задаваемое для расчета }

 

        X0:= -1.6;    { Начальное значение Х, задаваемое для графика  }

        Xk:= 1.5;    { Конечное значение Х, задаваемое для графика  }

 

        NC:= 1000;    {Число задаваемых значений С для расчета  }

        NX:= 1000;    { Число вычисляемых значений X - итерации}

     DatXp:= 1000;    { Число выводимых на экран значений X  до конечного NX }

 

     Ch:= #0;

 

  Cs:= 620;    { размер экрана по горизонтали }

  Xs:= 460;    { размер экрана по вертикали }

 

  n1:= #0;   

  n2:= #227;   

  n3:= #255;   

 

  bmp[1]:=  #66; bmp[2]:=  #77; bmp[3]:=  #54;  bmp[4]:=  #16;   

  bmp[5]:=  #14; bmp[6]:=  #0;  bmp[7]:=  #0;   bmp[8]:=  #0;

  bmp[9]:=  #0;  bmp[10]:= #0;  bmp[11]:= #54;  bmp[12]:= #0;

  bmp[13]:= #0;  bmp[14]:= #0;  bmp[15]:= #40;  bmp[16]:= #0;

  bmp[17]:= #0;  bmp[18]:= #0;  bmp[19]:= #128; bmp[20]:= #2;

  bmp[21]:= #0;  bmp[22]:= #0;  bmp[23]:= #224; bmp[24]:= #1;

  bmp[25]:= #0;  bmp[26]:= #0;  bmp[27]:= #1;   bmp[28]:= #0;

  bmp[29]:= #24; bmp[30]:= #0;  bmp[31]:= #0;   bmp[32]:= #0;

  bmp[33]:= #0;  bmp[34]:= #0;  bmp[35]:= #0;   bmp[36]:= #16;

  bmp[37]:= #14; bmp[38]:= #0;  bmp[39]:= #0;   bmp[40]:= #0;

 

 

 

start:

 

  Gd:=Detect;

  InitGraph(Gd, Gm, ''); { открытие графического режима }

 If GraphResult <> grOk Then Halt(1);

 

 

    dC:= Ck-C0;   

    mC:= dC/NC;    { масштаб для вывода С  }

    dX:= Xk-X0;   

    mX:= dX/NX;    { масштаб для вывода X  }

 

    for C:= 0 to NC  do    { цикл изменяемых значений для С }

     begin

 

      Cn:= C0+C*mC;

      Xn:= Xn0;

 

      For X:= 0 to NX do    { цикл изменяемых значений для Х }

       begin

 

Вот здесь надо сделать остановку. Это основная вычислительная часть программы:

 

        Xn:= Cn*{(1-(1-Random(2))/50)*}Xn*(1-Xn);    { вычисление Xn+1 }

 

Уравнение корректиректируется в зависимости от  поставленных задач. Сейчас это логистическое уравнение с элементом случайного распределения ( он временно выключен из уравнения).

 

        If X > (NX-DatXp) then

           begin

 

           Cp:=Round((Cn-C0)/dC*Cs+10);    {координата пиксела по горизонтали  }

 

           If (Xn >= X0) and (Xn <= Xk) then

 

             Xp:=Round(Xs*(1-(Xn-X0)/dX) + 10) Else Xp:=500;  { координата пиксела по вертикали }

 

             Color:=GetPixel(Cp, Xp);    { проверка предыдущего пиксела с экрана}

 

             If Color > 0 Then

             Color:=Color+1 else Color:=1;

             If Color > 15 then

             Color:=15;

             PutPixel (Cp, Xp, Color);    { запись пиксела на экран }

 

           end;

       end;

     end;

 

 

       S:= '  Press any key - to continy, or Esc - to quit. Please, white 20..40 seconds';

 

       OutTextXY (1, 1, S);    { вывод текста на экран в графическом режиме }

 

        S:= 'Xn0 =';

        OutTextXY (10, 450, S);

        S:= OutNumRe(Xn0);

        OutTextXY (50, 450, S);

 

        S:= 'C0 =';

        OutTextXY (10, 460, S);

        S:= OutNumRe(C0);

        OutTextXY (50, 460, S);

 

        S:= 'Ck =';

        OutTextXY (10, 470, S);

        S:= OutNumRe(Ck);

        OutTextXY (50, 470, S);

 

        S:= ' X0 =';

        OutTextXY (260, 460, S);

        S:= OutNumRe(X0);

        OutTextXY (310, 460, S);

 

        S:= ' Xk =';

        OutTextXY (260, 470, S);

        S:= OutNumRe(Xk);

        OutTextXY (310, 470, S);

 

        S:= '   NC =';

        OutTextXY (520, 450, S);

        S:= OutNumIn(NC);

        OutTextXY (590, 450, S);

 

        S:= '   NX =';

        OutTextXY (520, 460, S);

        S:= OutNumIn(NX);

        OutTextXY (590, 460, S);

 

        S:= 'DatXp =';

        OutTextXY (520, 470, S);

        S:= OutNumIn(DatXp);

        OutTextXY (590, 470, S);

 

       If n>1 then    { условие записи графики при повторных проходах программы}

       begin

       assign (f,s2); { открытие графического файла }

       rewrite (f);

 

       for i:= 1 to 40 do    { запись установочных кодов формата графического файла  }

 

         Write (f, bmp[i]);

 

         Write (f, ch);

         Write (f, ch);

 

         For j:= 479 downto 10 do    { цикл записи ?строка за строкой? }

         begin

 

          For i:= 0 to 639 do    { цикл записи ?пиксел за пикселом? }

          begin

 

          Color:= GetPixel (i,j);    { запись пиксела в файл }

 

          If Color=0  then

           begin ch1:= n1; ch2:= n1; ch3:=n1; end; { замена цвета пиксела из файла *.pas  в формат файла *.bmp }

          If Color=1  then

           begin ch1:= n2; ch2:= n1; ch3:=n1; end;

          If Color=2  then

           begin ch1:= n3; ch2:= n1; ch3:=n1; end;

          If Color=3  then

           begin ch1:= n2; ch2:= n1; ch3:=n2; end;

          If Color=4  then

           begin ch1:= n2; ch2:= n1; ch3:=n3; end;

          If Color=5  then

           begin ch1:= n1; ch2:= n2; ch3:=n2; end;

          If Color=6  then

           begin ch1:= n1; ch2:= n3; ch3:=n1; end;

          If Color=7  then

           begin ch1:= n3; ch2:= n1; ch3:=n3; end;

          If Color=8  then

           begin ch1:= n3; ch2:= n2; ch3:=n1; end;

          If Color=9  then

           begin ch1:= n2; ch2:= n3; ch3:=n1; end;

          If Color=10 then

           begin ch1:= n1; ch2:= n2; ch3:=n3; end;

          If Color=11 then

           begin ch1:= n3; ch2:= n2; ch3:=n1; end;

          If Color=12 then

           begin ch1:= n2; ch2:= n3; ch3:=n3; end;

          If Color=13 then

           begin ch1:= n3; ch2:= n3; ch3:=n2; end;

          If Color=14 then

           begin ch1:= n3; ch2:= n2; ch3:=n3; end;

          If Color=15 then

           begin ch1:= n3; ch2:= n3; ch3:=n3; end;

 

             Write (f, ch1);   

             Write (f, ch2);

             Write (f, ch3);

 

          end;

         end;

 

           For j:= 9 downto 0 do   

         begin

 

           For i:= 0 to 639 do   

           begin

             Write (f, ch);

             Write (f, ch);

             Write (f, ch);

           end;

 

         end;

 

         For n:= 1 to 12 do Write (f, ch);   

 

       Close(f);    { закрытие графического файла }

       end;

 

        inc(n);

      Repeat

      Until KeyPressed;

 

     CloseGraph; { закрытие графического режима }

 

     Ch4:= ReadKey;

     If Ch4 = #0 then Ch4:= ReadKey;

     If Ch4 <> Esc then

       begin

 

    Write ('0 <Xn0< 1 = ',Xn0,'  ');{вывод значений на экран в текстовом режиме и ввод новых значений}

    Readln (Xn0);

    Writeln;

 

    Write ('0 <C0< 4 = ',C0,'  ');

      Readln (C0);

    Write ('0 <Ck< 4 = ',Ck,'  ');

      Readln (Ck);

      Writeln;

 

    Write ('0 <X0< 1 = ',X0,'  ');

      Readln (X0);

    Write ('0 <Xk< 1 = ',Xk,'  ');

      Readln (Xk);

      Writeln;

 

    Write ('100 <NC< 20000 = ',NC,'  ');

      Readln (NC);

    Write ('100 <NX< 20000 = ',NX,'  ');

      Readln (NX);

    Write ('0 <DatXp< NX  =  ',DatXp,'  ');

      Readln (DatXp);

    Writeln;

 

    Write ('Enter filename ( *.bmp): ',s2,'  '); { вывод имени графического файла на экран  и ввод нового имени }

      Readln (s2);                               {  }

 

     Goto start    { возврат на повторение программы }

 

   end;

 end.

Можно только повторить, мы не специалисты в программировании, и потому сначала решали только основную задачу – вычисление с выводом результата на экран в графическом режиме. Мы отказались от вывода в файл всех результатов вычислений, так как программа нацелена на эксперимент, оперативный поиск интересных областей и  их границ в пространстве графика, и потому данные вычислений нас пока не очень интересовали. Тем более, что такой вывод делается очень быстро на любом этапе исследований.

     Остальные блоки программы разрабатывались по мере необходимости в силу наших знаний и умения. Конечно, программа нуждается в большой доработке и оптимизации. Специалисты только усмехнутся, глядя на такой уровень программирования, но … уж, извините, решали задачу, как умели. 

 

   

Заключение.

Да, приходится констатировать, что на всех этапах проведенного исследования никакого особого влияния погрешность компьютерного вычисления на общую картину получаемого графика не оказывает. Обещанного хаоса мы так и не обнаружили. Скейлинг (скользящее масштабирование) на отдельных участках графика также пока не выявил серьезного влияния «шумовой» составляющей на общую картину. 

Пришлось ввести «хаос» искусственно. На рис.10. результат введения  случайной вероятности по формуле:

 

Xn:= Cn*(1-(2-Random(2))/4)*Xn*(1-Xn);

(9)

 

Полученная картинка разительно отличается от всех ранее построенных графиков. Теперь это только линии высокой вероятности  с четкими точками пересечений, а не расплывчатыми зонами, как могло бы представляться.  Фракталов нет. Только плавные изгибы множества линий.  Такой запланированный «хаос» влияет  вполне определенно.

 

RAND1

Рис.10. Введение  случайности в результат вычислений по формуле (9).

 

Понятно, «псевдохаос», он предсказуем…, хотя бы отчасти.

На этом мы закончили наши  исследования логистического уравнения с вариациями на вольную тему.  Их результаты перед Вами.   Как нам представляется, это только малый шаг на пути к пониманию. Возможно, эти материалы помогут специалистам в настоящих исследованиях логистического уравнения.  

Последнее слово еще не сказано…

 

г. Екатеринбург

Сентябрь 2008г.

 

 

 

Литература:

1.   М. Фейгенбаум  Универсальность в поведении нелинейных систем. (Feigenbaum M. J. Universal Behavior in Nonlinear Systems.Los Alamos Science. 1980, v. 1, No. 1, pp. 4–27.) Перевод С. Г. Тиходеева. http://ega-math.narod.ru/Nquant/Feigen.htm#note

2.   Антон Никифоров    Метод расчета скейлинговых констант Фейгенбаума для одномерных дискретных отображений по точкам сверхустойчивых циклов.

3.   Введение в фракталы    Информатика .http.//inf.1september.ru/2000/6/fract/

4.   О фракталах и их алгоритмах. http://fract.narod.ru/about.htm

5.   А. Пайс. Гении науки (Перевод с англий­ского Е. И. Фука­ло­вой. Под редак­цией к.ф.-м.н. С. Г. Ново­кше­нова).М.: Инсти­тут ком­пьютер­ных иссле­дова­ний, 2002, 448 с. ISBN 5-93972-168-0 (Abraham Pais. The Genius of Science (A Portrait Gallery). Oxford Univer­sity Press, 2000). http://ega-math.narod.ru/Reid/Pais.htm

6.   ЛОГИСТИЧЕСКОЕ ОТОБРАЖЕНИЕ. http://www.math.rsu.ru/mexmat/kvm/MME/dsarch/logist.html

7.   С.В.Поршнев  Моделирование хаотического поведения динамических систем.
http://www.nsu.ru/matlab/Exponenta_RU/educat/systemat/porshnev/chaos/chaos.asp.htm

8.   Моделирование развития леса. http://www.keldysh.ru/pages/forest/forest/25.htm

9.   Сложная динамика схемы на переключаемых конденсаторах: Учебно-методическое пособие. http://window.edu.ru/window_catalog/pdf2txt?p_id=13195&p_page=2

10. А.В.Никитин, В.Ю.Ипатов. Мы ищем хаос…

 

 

 

 

Hosted by uCoz