Цель задачи состоит в том, чтобы построить приблизительно аттрактор из логистического отображения в зависимости от его параметра г (также называется бифуркационной диаграмма ), или подобласть него. Внешний вид графика можно увидеть на следующем изображении из Википедии:
Задний план
Логистическое отображение является математической функцией , которая принимает входной х K , и отображает его на выход х к + 1 определяется как
x k + 1 = r x k (1− x k )
где r - параметр карты, предположительно лежащий в интервале [0, 4].
Учитывая г в [0,4], а начальное значение х 0 в интервале [0,1], интересно повторно применить функцию для большого числа N итераций, производя конечное значение х N . Обратите внимание, что x N также обязательно будет лежать в [0,1].
В качестве примера рассмотрим r = 3,2, N = 1000. Начальное значение x 0 = 0,01 дает x 1000 = 0,5130. Для x 0 = 0,02 результат равен x 0 = 0,7995. Для любых других начальных значений x 0 конечные значения x 1000 чрезвычайно близки либо к 0,5130, либо к 0,7995. Это видно на графике как высота двух линий в горизонтальном положении r = 3,2.
Это не означает, что при r = 3,2 каждая последовательность сходится к одному из этих двух значений. Фактически, для двух начальных значений, рассмотренных выше, последовательности являются (обратите внимание на колебательное поведение):
х 0 = 0,01, ..., х 1000 = 0,5130, х 1001 = 0,7995, х 1002 = 0,5130, ...
х 0 = 0,02, ..., х 1000 = 0,7995, х 1001 = 0,5130, х 1002 = 0,7995 ...
То , что это верно в том , что при достаточно большом N , а для почти всех начальных значений х 0 , термин х N будет близко к одному из элементов множества {0.5130, 0,7995}. Это множество называется аттрактором для этого конкретного r .
Для других значений параметра r размер набора атракторов или его элементов будет изменяться. График отображает элементы в аттракторе для каждого r .
Аттрактор для конкретного r можно оценить как
- тестирование широкого диапазона начальных значений x 0 ;
- позволяя систему Evolve для большого числа N итераций; и
- принимая к сведению окончательные значения х N , которые получены.
Соревнование
входные
N : количество итераций.
r 1 , r 2 и с . Они определяют множество R значений г , а именно R = { г 1 , г 1 + S , R 1 + 2 ые , ..., г 2 }.
Процедура
Множество X начальных значений x 0 является фиксированным: X = {0,01, 0,02, ..., 0,99}. Необязательно, 0 и 1 также могут быть включены в X .
Для каждого г в R , и каждый х 0 в X , итерации логистического отображения N раз для получения х N . Запишите полученные кортежи ( r , x N ).
Выход
Постройте каждый кортеж ( r , x N ) как точку на плоскости, где r - горизонтальная ось, а x N - вертикальная ось. Вывод должен быть графическим (не ASCII art).
Дополнительные правила
- Указанная процедура определяет требуемый результат, но не применяется. Можно использовать любую другую процедуру, которая обрабатывает тот же набор ( r , x N ) кортежей.
- Ввод гибкий, как обычно.
- Ошибки с плавающей точкой не будут храниться против ответчика.
- Графический вывод необходим в любом из принятых форматов . В частности, вывод может быть отображен на экране, или может быть создан графический файл, или может быть выведен массив значений RGB. Если вы выводите файл или массив, пожалуйста, опубликуйте пример того, как он выглядит при отображении.
- Графика может быть векторной или растровой. Для растровой графики размер изображения должен быть не менее 400 × 400 пикселей.
- Каждая точка должна отображаться как один пиксель или как метка с размером порядка одного пикселя (в противном случае график быстро загромождается).
- Диапазон оси должен быть [0,4] для r (горизонтальная ось) и [0,1] для x N (вертикальная ось); или он может быть меньше, если он включает в себя все полученные очки.
- Масштабы оси произвольны. В частности, масштаб не обязательно должен быть одинаковым для обеих осей.
- Линии сетки, метки осей, цвета и подобные элементы допустимы, но не обязательны.
- Самый короткий код в байтах побеждает.
Контрольные примеры
Нажмите на каждое изображение для версии с высоким разрешением.
N = 1000; r1 = 2.4; r2 = 4; s = 0.001;
N = 2000; r1 = 3.4; r2 = 3.8; s = 0.0002;
N = 10000; r1 = 3.56; r2 = 3.59; s = 0.00002;
Подтверждение
Спасибо @FryAmTheEggman и @AndrasDeak за их полезные комментарии, пока задача находилась в песочнице.