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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2014, 21:33   #1
Bilymo
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 15
По умолчанию Преобразование пекаря.

Здравствуйте уважаемые Форумчане! Мне очень нужно заручиться Вашей поддержкой, по одному, весьма интересному вопросу. При построении данного алгоритма и его запуска с любыми начальными условиями, результат сходиться к одному и тому же числу... Прошу найти возможную ошибку в программе и порекомендовать, что нужно сделать, что бы результат не сходился, а продолжал хоатическим образом выдавать числа.... Пекарь


Код:
function Pekar(p:extended ; q:extended):  longint;
var
  res,j,i,n:longint;
  k1,x1:double;
begin
xm[0]:=p;
ym[0]:=q;
 
n:=1;
 // p,q лююое[0,1], а результат в p сходиться к одному...
while(xm[n]<>xm[n-1])
do begin
 
if (p<1/2) and (p>=0) then  begin
  p:=2*(p); q:=q/2;
//end;
//if (p<=1) and (p>1/2) then  begin
end
else begin
 p:=2*(p)-1; q:=(q+1)/2;
end;
      n:=n+1;
xm[n]:=p; ym[n]:=q;
end;
 
pekar:=n;
 
end;
//вывод xm[n] и ym[n]
Bilymo вне форума Ответить с цитированием
Старый 18.03.2014, 11:08   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Какое-то непонятное округление у Вас там. Зачем Вам интервал от 0 до 1? Сделайте нормальные числа, а потом уже укладывайте в единичный интервал. Зачем проверка на 0,5? Просто переложите алгоритм на язык программирования, там все легко формализуется.
Берет начальные координаты и в цикле вычисляете по первому рисунку из ссылки.
Условие выхода из цикла можно оставить прежним, если Вас интересует совпадение двух координат подряд.
Ну например, по формуле х=1, у=2
(0; 2)
(0; 1)
(0; 0,5)
(0; 0,25)
(0; 0,125)
Если построить графики в экзеле по каждой координате, и сравнить все это дело между собой визуально, то видно, что не такой уже там и хаос.

ЗЫ. На каком-то этапе икс рано или поздно вырождается в нуль (ориентировочно на 50-м шаге). Возможно это и стоит брать как точку выхода из цикла.
По ссылке:
Цитата:
Орбиты точки при преобразовании пекаря: а) цикл периода 2 (x0=2/3, y0=1/3), б) цикл периода 6 (x0=2/9,y0=4/9), в) цикл периода 3 (x0=2/7, y0=1/7), г) цикл периода 10 (x0=0,(45), y0=0,(56)) ,д) цикл периода 8 (x0=0,(12), y0=0,(23)), е) хаотическая орбита (произвольно выбранная точка вблизи периодической орбиты x0=2/3, y0=1/3).
При использовании экзель где-то на 50-м шаге все равно идет вырождение в нуль, вероятно влияет погрешность.
Цитата:
Прошу найти возможную ошибку в программе и порекомендовать, что нужно сделать, что бы результат не сходился, а продолжал хоатическим образом выдавать числа....
Повысить точность вычислений.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 18.03.2014 в 11:23.
Utkin вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование Stasiksis Общие вопросы C/C++ 2 28.02.2013 10:27
преобразование Drulya Помощь студентам 0 05.01.2011 18:17
преобразование Dimarik Общие вопросы .NET 2 20.04.2010 20:57
Преобразование в С++ Davlet M Помощь студентам 3 03.10.2009 14:30