Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2016, 16:40   #1
Sashenka1
Новичок
Джуниор
 
Регистрация: 04.04.2016
Сообщений: 1
По умолчанию отследить разбегание

Помогите пожалуйста. я написала прогу. она считает ляпуновские показатели. она все считает. но когда я меняю параметры а и r значения сразу разбегаются. мне нужно отследить эти разбегания. Разбегается от того что x,y,z становятся очень большими. Дальше прямо в программе поясню.


Код:
procedure TForm1.btn1Click(Sender: TObject);
  var amin, rmin,a8,r8,a,r,amax,rmax,b,x,y,z,E,x1,xx1,yx1,zx1,y1,z1,xx,yx,zx,zz,xy,yy,zy,s,s1,s2,u,u1,u2,xx0,yx0,zx0,q,m,p,xy1,yy1,zy1,xy0,zy0,w,w1,w2,yy0,yz0,xz0,zz0,xz1,yz1,zz1,xz,yz:extended;
 i,n:integer;

procedure otobr (var x,y,z: extended);
 var x1,y1,z1:Extended;
begin
x1:=x-E*(y+z);
y1:=y+E*(x+a*y);
z1:=z+E*(b+z*(x-r));
x:=x1;
y:=y1;
z:=z1;
end;
                  procedure variat (var xx,yx,zx:extended);
                  var a,r:extended;
                     begin
                    xx1:=xx-E*(yx+zx);
                    yx1:=yx+E*(xx+a*yx);
                    zx1:=zx+E*(xx*z+(x-r)*zx);
                    xx:=xx1;
                    yx:=yx1;
                    zx:=zx1;
                  end;
begin

   E:=0.1;
   b:=0.1;
   a:=-0.5;
   r:=-1;
   n:=10000;
   x:=0;
   y:=0;
   z:=0;
   xx:=1;
   yx:=0;
   zx:=0;
   xy:=0;
   yy:=0;
   zy:=1;
   s:=0;
   s1:=0;
   s2:=0;
   amax:=0.5;
   rmax:=10;
   xx0:=0;
   yx0:=0;
   zx0:=0;
   xy0:=0;
   yy0:=0;
   zy0:=0;
   xz0:=0;
   zz0:=0;
   yz0:=0;
   xy1:=0;
   yy1:=0;
   zy1:=0;
   xz1:=0;
   yz1:=0;
   zz1:=0;
Series1.Clear;

            for i:=1 to n do begin
               otobr (x,y,z) ;
               variat (xx,yx,zx);
               variat (xy,yy,zy);
                                                   // variat (xz,yz,zz);
               m:=sqrt(xx*xx+yx*yx+zx*zx);
               xx0:=xx/m;
               yx0:=yx/m;
               zx0:=zx/m;
               xy1:=xy-(xy*xx0+yy*yx0+zy*zx0)*xx0;
               yy1:=yy-(xy*xx0+yy*yx0+zy*zx0)*yx0;
               zy1:=zy-(xy*xx0+yy*yx0+zy*zx0)*zx0;
               q:=Sqrt(xy1*xy1+yy1*yy1+zy1*zy1);
               xy0:=xy1/q;
               yy0:=yy1/q;
               zy0:=zy1/q;
                                              //xz1:=xz-(xz*xx0+yz*yx0+zz*zx0)*xx0-(xz*xy0+yz*yy0+zz*zy0)*xy0;
                                             // yz1:=yz-(xz*xx0+yz*yx0+zz*zx0)*yx0-(xz*xy0+yz*yy0+zz*zy0)*yy0;
                                               //  zz1:=zz-(xz*xx0+yz*yx0+zz*zx0)*zx0-(xz*xy0+yz*yy0+zz*zy0)*zy0;
                                                // p:=sqrt(xz1*xz1+yz1*yz1+zz1*zz1);
                                            // xz0:=xz1/p;
                                                        //  yz0:=yz1/p;
                                                 //  zz0:=zz1/p;
               w:=ln(m);
               w1:=ln(q);
                                        //  w2:=ln(p);
                                         {if ((w<0.00000001) and (w1<0.00000001)) then
                                           // memo1.Lines.Add('ïîêàçàòåëü îòðèöàòåëüíûé')
                                              else }
                //begin
                s:=s+w;
                s1:=s1+w1;
                                          // s2:=s2+w2;
                xx:=xx0;
                yx:=yx0;
                zx:=zx0;
                xy:=xy0;
                yy:=yy0;
                zy:=zy0;
                                         // xz:=xz0;
                                           //    yz:=yz0;
                                          // zz:=zz0;

                end;


    begin
  u:=s/n;
    u1:=s1/n;
                              // u2:=s2/n;

    end;
if i>00 then
  begin
mmo1.Lines.Add('u='+floattostr(u));
memo1.Lines.Add('u1='+floattostr(u1));
                                      // memo2.Lines.Add('u2='+floattostr(u2));
end;
for i:=1 to 100 do begin
Series1.Addxy(x,y);
otobr (x,y,z) ;

end;
               a:=amin;
                   while a<amax do
                   begin
               r:=rmin;
                    while r<rmax do
                   begin
                   r8:=r+0.1;
                   r:=r8;
                     for i:=1 to 10000 do
                   begin
                   if ((x>100) and (y>100) and (z>100)) then   { вот здесь мне нужно написать так, чтобы программа не вылетала, а брала другие значения x,y,z}
                   Series6.Addxy(a,r)
                   else
                    otobr (x,y,z) ;
               variat (xx,yx,zx);
               variat (xy,yy,zy);
                   if ((u<0) and (u1<0)) then   // периодичность
                   Series3.Addxy(a,r);
                   if ((abs(u)<e) and (u1<0)) then  //квазипериодичность
                   Series4.Addxy(a,r);
                   if ((u>0) and (u1<0)) then        //хаос
                   Series5.Addxy(a,r);
                   end;
                   end;
                   a8:=a+0.1;
                   a:=a8;

                   end;


                   end;

end.
пожалуйста, дайте совет, как это можно реализовать

Последний раз редактировалось Аватар; 04.04.2016 в 16:43.
Sashenka1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отследить ошибку LuxMi C# (си шарп) 5 01.02.2013 09:25
Отследить программу Михаил Юрьевич Общие вопросы Delphi 6 09.09.2012 17:06
Отследить скринсейвер kosig Общие вопросы C/C++ 1 13.01.2011 02:32
Отследить проблему giarmul JavaScript, Ajax 0 09.08.2010 20:49
Отследить стринги san72 Общие вопросы Delphi 2 30.05.2009 17:40