Мета завдання полягає в тому, щоб побудувати приблизно аттрактор з логістичного відображення в залежності від його параметра г (також називається бифуркационной діаграма ), або подобласть нього. Зовнішній вигляд графіка можна побачити на наступному зображенні з Вікіпедії:
Фон
Логістичне відображення є математичною функцією , яка приймає вхідний х 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 кожна послідовність сходить до одного з цих двох значень. Насправді для двох розглянутих вище початкових значень послідовності є (зверніть увагу на коливальну поведінку):
x 0 = 0,01, ..., x 1000 = 0,5130, x 1001 = 0,7995, x 1002 = 0,5130, ...
x 0 = 0,02, ..., x 1000 = 0,7995, x 1001 = 0,5130, x 1002 = 0,7995 , ...
Те , що це вірно в тому , що при досить великому N , а для майже всіх початкових значень х 0 , термін х N буде близько до одного з елементів множини {0.5130, 0,7995}. Цей набір називається аттрактором для даного конкретного r .
Для інших значень параметра r розмір набору атракторів або його елементів зміниться. Графік розміщує елементи в атракторі для кожного r .
Атрактор для конкретного r можна оцінити за
- тестування широкого діапазону початкових значень x 0 ;
- дозволяти системі розвиватися для великої кількості N ітерацій; і
- приймаючи під увагу кінцевих значень х N , які отримані.
Змагання
Вхідні дані
N : кількість ітерацій.
r 1 , r 2 і s . Вони визначають множину R значень r , а саме R = { r 1 , r 1 + s , r 1 + 2 s , ..., r 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).
Додаткові правила
- Вказана процедура визначає необхідний результат, але не застосовується. Будь-яка інша процедура, яка передбачає той самий набір ( 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 за корисні коментарі, поки виклик був у пісочниці.