Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка.docx
Скачиваний:
114
Добавлен:
03.05.2015
Размер:
1.02 Mб
Скачать

Контрольные вопросы

  1. Как связано множество Мандельброта с множеством Жюлиа?

  2. На каком свойстве множества Мандельброта построен алгоритм его компьютерного построения?

  3. Пользуясь определениями множеств Жюлиа и Мандельброта покажите те области изображения, которые не стремятся к бесконечности?

Лабораторная работа №2. Системы итерированных функций.

Цель работы

Ознакомиться с теорией. Изучить алгоритмы построения систем итерированных функций. Сделать лабораторную работу №2.

Методические указания

Системы итерированных функций

Подход на основе Систем Итерированных Функций (СИФ) представляет хорошую теоретическую базу для математического исследования многих классических фракталов, а также их обобщений.

Теорема о сжимающих отображениях. Пусть f: X X сжимающее отображение на полном метрическом пространстве ( X, d ). Тогда f имеет одну и только одну неподвижную точку xf X и для любого x последовательность {(x ): n }, где–n-ая итерация отображения f, сходится к xf.

Эта же теорема лежит в основе фрактального сжатия (см. Приложение №3).

Алгоритмы построения СИФ бывают:

  1. Детерминированными (ДСИФ)

  2. Рандомизированными (РСИФ)

Аттрактор

Определение. Аттрактором называется изображение, которое является единственной (что гарантируется приведённой выше теоремой о сжимающих отображениях) неподвижной точкой СИФ.

Аттракторы подразделяют на регулярные и нерегулярные.

Регулярные характеризуются неподвижной притягивающей точкой и периодической траекторией.

Нерегулярными или странными аттракторами называются некоторые аттракторы существующие в динамических системах которые включают три и более дифференциальных уравнения.

Аффинное преобразование

Определение. Аффинное преобразование T пространства Rn можно представить в матричной форме:

T( x ) = A * x + a; x Rn.

Таким образом, аффинное преобразование T: R2 R2 это преобразование вида

* +,

где a, b, c и d задают поворот и сжатие/растяжение, а e и f задают смещение.

Детерминированный алгоритм на каждой итерации выполняет все необходимые аффинные преобразования, тогда как рандомизированный только одно случайно взятое. В связи с этим в настоящее время при написании компьютерных программ создающих фракталы высокой сложности почти всегда используется второй способ, так как это существенно понижает затраты оперативной памяти. Однако использование РСИФ требует больше времени по сравнению с детерминированными, потому, что для достижения хорошей точности требуется большое количество итераций.

Результат работы любого алгоритма из этих двух никогда не зависит от выбора начальной точки (или, в случае ДСИФ, множества).

Построение рсиф в matlab

FERN = 1; CRYSTAL = 2; DRAGON = 3; FLOOR = 4; CURVE_KOCH = 5; SPIRAL = 6;

SWIRL = 7; TREE = 8; ZIGZAG = 9; BINARY = 10; LEAF = 11; TRIANGLE = 12;

CORAL = 13; DENDRIT = 14; SIERPINSKY = 15; WOLFS = 16; DIAMOND = 17; FISH = 18;

CURVE_MANDELIBROT_GIVEN = 19; PARACHUTE = 20;

M = zeros( 2, 2, 20, 10 ); B = zeros( 2, 20, 10 ); P = zeros( 20, 10 );%M-матрица аффинного преобразования из четырёх коэффициентов a,b,c,d.

%B-вектор аффинного преобразования из двух коэффициентов e,f.

%m-количество аффинных преобразований

%P-вектор вероятностей для рандомизированного алгоритма

m = zeros( 20 );

P( FERN, : ) = [ 0.85 0.07 0.07 0.01 0 0 0 0 0 0 ];

M( :, :, FERN, 1 ) = [ 0.85 0.04; -0.04 0.85 ]; B( :, FERN, 1 ) = [ 0; 1.6 ];

M( :, :, FERN, 2 ) = [ 0.20 -0.26; 0.23 0.22 ]; B( :, FERN, 2 ) = [ 0; 1.6 ];

M( :, :, FERN, 3 ) = [ -0.15 0.28; 0.26 0.24 ]; B( :, FERN, 3 ) = [ 0; 0.44 ];

M( :, :, FERN, 4 ) = [ 0 0 ; 0 0.16 ]; B( :, FERN, 4 ) = [ 0; 0 ];

m( FERN ) = 4;

P( CRYSTAL, : ) = [ 0.747826 0.252174 0 0 0 0 0 0 0 0 ];

M( :, :, CRYSTAL, 1 ) = [ 0.69697 -0.481061; -0.393939 -0.662879 ]; B( :, CRYSTAL, 1 ) = [ 2.147003; 10.310288 ];

M( :, :, CRYSTAL, 2 ) = [ 0.090909 -0.443182; 0.515152 -0.094697 ]; B( :, CRYSTAL, 2 ) = [ 4.286558; 2.925762 ];

m( CRYSTAL ) = 2;

P( DRAGON, : ) = [ 0.787473 0.212527 0 0 0 0 0 0 0 0 ];

M( :, :, DRAGON, 1 ) = [ 0.824074 0.281482; -0.212346 0.864198 ]; B( :, DRAGON, 1 ) = [ -1.882290; -0.110607 ];

M( :, :, DRAGON, 2 ) = [ 0.088272 0.520988; -0.463889 -0.377778 ]; B( :, DRAGON, 2 ) = [ 0.785360; 8.095795 ];

m( DRAGON ) = 2;

P( FLOOR, : ) = [ 0.333333 0.333333 0.333333 0 0 0 0 0 0 0 ];

M( :, :, FLOOR, 1 ) = [ 0 -0.5; 0.5 0 ]; B( :, FLOOR, 1 ) = [ -1.732366; 3.366182 ];

M( :, :, FLOOR, 2 ) = [ 0.5 0; 0 0.5 ]; B( :, FLOOR, 2 ) = [ -0.027891; 5.014877 ];

M( :, :, FLOOR, 3 ) = [ 0 0.5; -0.5 0 ]; B( :, FLOOR, 3 ) = [ 1.620804; 3.310401 ];

m( FLOOR ) = 3;

P( CURVE_KOCH, : ) = [ 0.151515 0.253788 0.253788 0.151515 0.189394 0 0 0 0 0 ];

M( :, :, CURVE_KOCH, 1 ) = [ 0.307692 0; 0 0.294118 ]; B( :, CURVE_KOCH, 1 ) = [ 4.119164; 1.604278 ];

M( :, :, CURVE_KOCH, 2 ) = [ 0.192308 -0.205882; 0.653846 0.088235 ]; B( :, CURVE_KOCH, 2 ) = [ -0.688840; 5.978916 ];

M( :, :, CURVE_KOCH, 3 ) = [ 0.192308 0.205882; -0.653846 0.088235 ]; B( :, CURVE_KOCH, 3 ) = [ 0.668580; 5.962514 ];

M( :, :, CURVE_KOCH, 4 ) = [ 0.307692 0; 0 0.294118 ]; B( :, CURVE_KOCH, 4 ) = [ -4.136530; 1.604278 ];

M( :, :, CURVE_KOCH, 5 ) = [ 0.384615 0; 0 -0.294118 ]; B( :, CURVE_KOCH, 5 ) = [ -0.007718; 2.941176 ];

m( CURVE_KOCH ) = 5;

P( SPIRAL, : ) = [ 0.895652 0.052174 0.052174 0 0 0 0 0 0 0 ];

M( :, :, SPIRAL, 1 ) = [ 0.787879 -0.424242; 0.242424 0.859848 ]; B( :, SPIRAL, 1 ) = [ 1.758647; 1.408065 ];

M( :, :, SPIRAL, 2 ) = [ -0.121212 0.257576; 0.151515 0.053030 ]; B( :, SPIRAL, 2 ) = [ -6.721654; 1.377236 ];

M( :, :, SPIRAL, 3 ) = [ 0.181818 -0.136364; 0.090909 0.181818 ]; B( :, SPIRAL, 3 ) = [ 6.086107; 1.56803 ];

m( SPIRAL ) = 3;

P( SWIRL, : ) = [ 0.912675 0.087325 0 0 0 0 0 0 0 0 ];

M( :, :, SWIRL, 1 ) = [ 0.745455 -0.459091; 0.406061 0.887121 ]; B( :, SWIRL, 1 ) = [ 1.460279; 0.691072 ];

M( :, :, SWIRL, 2 ) = [ -0.424242 -0.065152; -0.175758 -0.218182 ]; B( :, SWIRL, 2 ) = [ 3.809567; 6.741476 ];

m( SWIRL ) = 2;

P( TREE, : ) = [ 0.05 0.4 0.4 0.15 0 0 0 0 0 0 ];

M( :, :, TREE, 1 ) = [ 0 0; 0 0.50 ]; B( :, TREE, 1 ) = [ 0; 0 ];

M( :, :, TREE, 2 ) = [ 0.42 -0.42; 0.42 0.42 ]; B( :, TREE, 2 ) = [ 0; 0.2 ];

M( :, :, TREE, 3 ) = [ 0.42 0.42; -0.42 0.42 ]; B( :, TREE, 3 ) = [ 0; 0.2 ];

M( :, :, TREE, 4 ) = [ 0.1 0; 0 0.1 ]; B( :, TREE, 4 ) = [ 0; 0.2 ];

m( TREE ) = 4;

P( ZIGZAG, : ) = [ 0.888128 0.111872 0 0 0 0 0 0 0 0 ];

M( :, :, ZIGZAG, 1 ) = [ -0.632407 -0.614815; -0.545370 0.659259 ]; B( :, ZIGZAG, 1 ) = [ 3.840822; 1.282321 ];

M( :, :, ZIGZAG, 2 ) = [ -0.036111 0.444444; 0.210185 0.037037 ]; B( :, ZIGZAG, 2 ) = [ 2.071081; 8.330552 ];

m( ZIGZAG ) = 2;

P( BINARY, : ) = [ 0.333333 0.333333 0.333333 0 0 0 0 0 0 0 ];

M( :, :, BINARY, 1 ) = [ 0.5 0; 0 0.5 ]; B( :, BINARY, 1 ) = [ -2.563477; -0.000003 ];

M( :, :, BINARY, 2 ) = [ 0.5 0; 0 0.5 ]; B( :, BINARY, 2 ) = [ 2.436544; -0.000003 ];

M( :, :, BINARY, 3 ) = [ 0 -0.5; 0.5 0 ]; B( :, BINARY, 3 ) = [ 4.873085; 7.563492 ];

m( BINARY ) = 3;

P( LEAF, : ) = [ 0.06 0.37 0.36 0.21 0 0 0 0 0 0 ];

M( :, :, LEAF, 1 ) = [ 0.14 0.01; 0 0.51 ]; B( :, LEAF, 1 ) = [ -0.08; -1.31 ];

M( :, :, LEAF, 2 ) = [ 0.43 0.52; -0.45 0.50 ]; B( :,LEAF, 2 ) = [ 1.49; -0.75 ];

M( :, :, LEAF, 3 ) = [ 0.45 -0.49; 0.47 0.47 ]; B( :,LEAF, 3 ) = [ -1.62; -0.74 ];

M( :, :, LEAF, 4 ) = [ 0.49 0; 0 0.51 ]; B( :,LEAF, 4 ) = [ 0.02; 1.62 ];

m( LEAF ) = 4;

P( TRIANGLE, : ) = [ 0.23 0.36 0.06 0.36 0 0 0 0 0 0 ];

M( :, :, TRIANGLE, 1 ) = [ -0.4 0; 0 -0.4 ]; B( :, TRIANGLE, 1 ) = [ 0.24; 0.37 ];

M( :, :, TRIANGLE, 2 ) = [ 0.5 0; 0 0.5 ]; B( :, TRIANGLE, 2 ) = [ -1.37; 0.25 ];

M( :, :, TRIANGLE, 3 ) = [ 0.21 0; 0 0.21 ]; B( :, TRIANGLE, 3 ) = [ 1; 1.47 ];

M( :, :, TRIANGLE, 4 ) = [ 0.5 0; 0 0.5 ]; B( :, TRIANGLE, 4 ) = [ 0.76; -1.16 ];

m( TRIANGLE ) = 4;

P( CORAL, : ) = [ 0.40 0.15 0.45 0 0 0 0 0 0 0 ];

M( :, :, CORAL, 1 ) = [ 0.307692 -0.531469; -0.461538 -0.293706 ]; B( :, CORAL, 1 ) = [ 5.401953; 8.655175 ];

M( :, :, CORAL, 2 ) = [ 0.307692 -0.076923; 0.153846 -0.447552 ]; B( :, CORAL, 2 ) = [ -1.295248; 4.152990 ];

M( :, :, CORAL, 3 ) = [ 0 0.545455; 0.692308 -0.195804 ]; B( :, CORAL, 3 ) = [ -4.893637; 7.269794 ];

m( CORAL ) = 3;

P( DENDRIT, : ) = [ 0.5 0.5 0 0 0 0 0 0 0 0 ];

M( :, :, DENDRIT, 1 ) = [ 0.5 0.5; 0.5 -0.5 ]; B( :, DENDRIT, 1 ) = [ 0; 0 ];

M( :, :, DENDRIT, 2 ) = [ 0.6 -0.2; -0.2 -0.6 ]; B( :, DENDRIT, 2 ) = [ 0.4; 0.2 ];

m( DENDRIT ) = 2;

P( SIERPINSKY, : ) = [ 0.333333 0.333333 0.333333 0 0 0 0 0 0 0 ];

M( :, :, SIERPINSKY, 1 ) = [ 0.5 0; 0 0.5 ]; B( :, SIERPINSKY, 1 ) = [ 0; 0.5 ];

M( :, :, SIERPINSKY, 2 ) = [ 0.5 0; 0 0.5 ]; B( :, SIERPINSKY, 2 ) = [ -0.25; 0 ];

M( :, :, SIERPINSKY, 3 ) = [ 0.5 0; 0 0.5 ]; B( :, SIERPINSKY, 3 ) = [ 0.25; 0 ];

m( SIERPINSKY ) = 3;

P( WOLFS, : ) = [ 0.5 0.5 0 0 0 0 0 0 0 0 ];

M( :, :, WOLFS, 1 ) = [ 0.5 0.5; -0.5 0.5 ]; B( :, WOLFS, 1 ) = [ -1; 0 ];

M( :, :, WOLFS, 2 ) = [ 0.5 0.5; 0.5 -0.5 ]; B( :, WOLFS, 2 ) = [ 0; 1 ];

m( WOLFS ) = 2;

P( DIAMOND, : ) = [ 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0.125 0 0 ];

M( :, :, DIAMOND, 1 ) = [ 0.5 0; 0.4 0.1 ]; B( :, DIAMOND, 1 ) = [ 1; 1.2 ];

M( :, :, DIAMOND, 2 ) = [ 0.5 0; 0 0.1 ]; B( :, DIAMOND, 2 ) = [ 1; 2 ];

M( :, :, DIAMOND, 3 ) = [ 0.5 0; -0.4 0.1 ]; B( :, DIAMOND, 3 ) = [ 1; 2.8 ];

M( :, :, DIAMOND, 4 ) = [ 0.5 0; 0 0.1 ]; B( :, DIAMOND, 4 ) = [ -1; 2 ];

M( :, :, DIAMOND, 5 ) = [ 0.5 0; 0.4 0.1 ]; B( :, DIAMOND, 5 ) = [ -1; 2.8 ];

M( :, :, DIAMOND, 6 ) = [ 0.5 0; -0.4 0.1 ]; B( :, DIAMOND, 6 ) = [ -1; 1.2 ];

M( :, :, DIAMOND, 7 ) = [ 0 0.1; 0.4 0 ]; B( :, DIAMOND, 7 ) = [ -0.22; 1.42 ];

M( :, :, DIAMOND, 8 ) = [ 0 0.1; 0.4 0 ]; B( :, DIAMOND, 8 ) = [ -0.22; 3.02 ];

m( DIAMOND ) = 8;

P( FISH, : ) = [ 0.19 0.24 0.19 0.19 0.19 0 0 0 0 0 ];

M( :, :, FISH, 1 ) = [ 0.5 0; 0.4 0.1 ]; B( :, FISH, 1 ) = [ 1; 1 ];

M( :, :, FISH, 2 ) = [ 1.2 0; 0 0.1 ]; B( :, FISH, 2 ) = [ -0.4; 2 ];

M( :, :, FISH, 3 ) = [ 0.5 0; -0.4 0.1 ]; B( :, FISH, 3 ) = [ 1; 3 ];

M( :, :, FISH, 4 ) = [ 0.5 0; 0.4 0.1 ]; B( :, FISH, 4 ) = [ -1; 3 ];

M( :, :, FISH, 5 ) = [ 0.5 0; -0.4 0.1 ]; B( :, FISH, 5 ) = [ -1; 1 ];

m( FISH ) = 5;

P( CURVE_MANDELIBROT_GIVEN, : ) = [ 0.166666 0.166666 0.166666 0.166666 0.166666 0.166666 0 0 0 0 ];

M( :, :, CURVE_MANDELIBROT_GIVEN, 1 ) = [ 0.330097 -0.014383; 0 0.333333 ]; B( :, CURVE_MANDELIBROT_GIVEN, 1 ) = [ 0.001280; 0.293333 ];

M( :, :, CURVE_MANDELIBROT_GIVEN, 2 ) = [ -0.009709 -0.209817; 0.524272 -0.003236 ]; B( :, CURVE_MANDELIBROT_GIVEN, 2 ) = [ -0.092826; 0.719288 ];

M( :, :, CURVE_MANDELIBROT_GIVEN, 3 ) = [ 0 0.222222; -0.524272 0.021755 ]; B( :, CURVE_MANDELIBROT_GIVEN, 3 ) = [ 0.062222; 0.692564 ];

M( :, :, CURVE_MANDELIBROT_GIVEN, 4 ) = [ -0.330097 0.014383; 0 -0.351852 ]; B( :, CURVE_MANDELIBROT_GIVEN, 4 ) = [ 0.318720; 0.594815 ];

M( :, :, CURVE_MANDELIBROT_GIVEN, 5 ) = [ -0.339806 0.008270; 0 -0.351852 ]; B( :, CURVE_MANDELIBROT_GIVEN, 5 ) = [ -0.363736; 0.594815 ];

M( :, :, CURVE_MANDELIBROT_GIVEN, 6 ) = [ -0.339806 0.026789; 0 -0.314815 ]; B( :, CURVE_MANDELIBROT_GIVEN, 6 ) = [ -0.031884; 1.118518 ];

m( CURVE_MANDELIBROT_GIVEN ) = 6;

P( PARACHUTE, : ) = [ 0.143 0.143 0.143 0.143 0.143 0.143 0.143 0 0 0 ];

M( :, :, PARACHUTE, 1 ) = [ 0.336735 0; 0 0.330097 ]; B( :, PARACHUTE, 1 ) = [ -0.161633; 0.610194 ];

M( :, :, PARACHUTE, 2 ) = [ 0.326531 0; 0 0.330097 ]; B( :, PARACHUTE, 2 ) = [ 0.143265; 0.610194 ];

M( :, :, PARACHUTE, 3 ) = [ 0.091837 -0.281553; 0.336735 0.106796 ]; B( :, PARACHUTE, 3 ) = [ -0.247188; 0.551960 ];

M( :, :, PARACHUTE, 4 ) = [ 0.275510 -0.174757; 0.214286 0.271845 ]; B( :, PARACHUTE, 4 ) = [ -0.061759; 0.370832 ];

M( :, :, PARACHUTE, 5 ) = [ 0.265306 0.184466; -0.204082 0.262136 ]; B( :, PARACHUTE, 5 ) = [ 0.041585; 0.372231 ];

M( :, :, PARACHUTE, 6 ) = [ 0.102041 0.300971; -0.336735 0.097087 ]; B( :, PARACHUTE, 6 ) = [ 0.222962; 0.545807 ];

M( :, :, PARACHUTE, 7 ) = [ 0.326531 0; 0.010204 0.339806 ]; B( :, PARACHUTE, 7 ) = [ -0.006735; 0.104714 ];

m( PARACHUTE ) = 7;

axis( [ -3 3 -10 10 ] ); %определяем, что график ограничен областью -3 < X < 3, 0 < Y <10, а все, что за областью ограничения, не изображается

fn = SWIRL;%задаём тип фрактала

n = 50000; %количество точек

X = zeros( n, 20 ); %формируем массив под первую координату

Y = zeros( n, 20 ); %формируем массив под вторую координату

Pos = [ 0.5; 0.5 ]; %задаем координаты начальной точки

for i = 1:n

sum = 0;

r = rand;

for j = 1:m( fn )%выбираем одно из четырех афинных преобразований.

if ( ( r >= sum ) && ( r < sum + P( fn, j ) ) )

Pos = M( :, :, fn, j ) * Pos + B( :, fn, j );

end

sum = sum + P( fn, j );

end

X( i, fn ) = Pos( 1 );

Y( i, fn ) = Pos( 2 );

end

plot( X( :, fn ), Y( :, fn ), '.g','MarkerSize', 1 ) %вывод графика

set( gcf, 'color', 'white', 'menubar', 'none', 'numbertitle', 'off', 'name', 'Fractal' ) %меняет фоновый цвет графического окна от изначально серого до белого

axis off %убирает оси