Previous: Введение в пакет dynamics, Up: Пакет dynamics   [Contents][Index]

47.2 Функции и переменные пакета dynamics

Функция: chaosgame ([[x1, y1]...[xm, ym]], [x0, y0], b, n, ..., options, ...);

Реализует так называемую игру хаоса: сначала изображается начальная точка (x0, y0), далее одна из m точек [x1, y1]...[xm, ym] выбирается произвольным образом. Следующая точка изображается на отрезке, соединяющем предыдущую точку со случайно выбранной, на расстоянии от случайной точки равном длине этого отрезка, умноженной на b Процедура повторяется n раз.

Функция: evolution (F, y0, n, ..., options, ...);

Изображает n+1 точек на 2-мерном графе, где горизонтальные координаты точек есть 0, 1, 2, ..., n, а вертикальные координаты есть соответствующие значения последовательности y(n), определенной рекуррентным соотношением

        y(n+1) = F(y(n))

С начальным значением y(0) равным y0. F должно быть выражением, которое зависит только от одной переменной (в примере, оно зависит от y, но может быть использована только одна переменная), y0 должно быть вещественным числом, а n должно быть положительным целым.

Функция: evolution2d ([F, G], [u, v], [u0, y0], n, ..., options, ...);

Изображает на двумерном графике первые n+1 точек последовательности, определяемой двумерной дискретной динамической системой с рекуррентными соотношениями

        u(n+1) = F(u(n), v(n))    v(n+1) = G(u(n), v(n))

С начальными значениями u0 и v0. Выражения F и G должны зависеть только от двух переменных u и v, которые должны быть явно объявлены в списке.

Функция: ifs ([r1, ..., rm], [A1, ..., Am], [[x1, y1], ..., [xm, ym]], [x0, y0], n, ..., options, ...);

Реализует метод системы повторяющихся функций (Iterated Function System). Этот метод аналогичен игре хаоса, описанной в функции chaosgame, но вместо сжатия отрезка от текущей точки до случайно выбранной, две компоненты данного отрезка умножаются на 2х2 матрицу Ai, которая соответствует случайно выбранной точке.

Случайный выбор m точек притяжения может быть осуществлен с вероятностью, определенной весами r1,...,rm. Веса могут быть заданы в кумулятивной форме, например, если есть 3 точки с вероятностями 0.2, 0.5 и 0.3, то веса r1, r2 и r3 могут быть 2, 7 и 10.

Функция: julia (x, y, ...options...)

Создает графический файл с изображением фрактала Джулия для комплексного числа (x + i y). Параметры x и y должны быть вещественными. Файл в графическом формате XPM создается в текущей директории пользователя. Работа программы занимает несколько секунд, а по окончании вычислений она печатает имя созданного файла.

Точкам, которые не принадлежат фракталу Джулия, присваиваются разные цвета в соответствии с числом итераций, необходимых последовательности, начинающейся в точке, чтобы выити из круга сходимости радиуса 2. Максимальное число итераций определяется опцией levels. Если после этого числа итераций, последовательность все еще находится в круге сходимости, то точка будет изображена цветом, определяемым опцией color.

Все цвета, используемые для изображения точек, не принадлежащих фракталу Джулия, имеют одинаковые saturation и value, но различные углю оттенков, равномерно распределенные в интервале от hue до (hue + huerange).

options – набор необязательных опций. Список допустимых опций приведен в разделе ниже.

Функция: mandelbrot (options)

Создает графический файл с изображением фрактала Мандельброта. Файл в графическом формате XPM создается в текущей директории пользователя. Работа программы занимает несколько секунд, а по окончании вычислений она печатает имя созданного файла.

Точкам, которые не принадлежат фракталу Джулия, присваиваются разные цвета в соответствии с числом итераций, необходимых последовательности, начинающейся в точке, чтобы выити из круга сходимости радиуса 2. Максимальное число итераций определяется опцией levels. Если после этого числа итераций, последовательность все еще находится в круге сходимости, то точка будет изображена цветом, определяемым опцией color.

Все цвета, используемые для изображения точек, не принадлежащих фракталу Джулия, имеют одинаковые saturation и value, но различные углы оттенков, равномерно распределенные в интервале от hue до (hue + huerange).

options – набор необязательных опций. Список допустимых опций приведен в разделе ниже.

Функция: orbits (F, y0, n1, n2, [x, x0, xf, xstep], ...options...);

Изображает диаграмму траекторий семейства одномерных дискретных динамических систем с одним параметром x. Такой тип диаграмм используется при изучении бифуркации одномерных дискретных систем.

Функция F(y) определяет последовательность с начальным значением y0, также как в случае функции evolution, но в данном случае функция еще зависит от параметра x, принимающего значения в интервале от x0 до xf с шагом xstep. Каждое значение параметра x изображается на горизонтальной оси. На вертикальной оси изображаются n2 значений последовательности y(n1+1),..., y(n1+n2+1), полученных поле n1 начальных итераций.

Функция: rk (ODE, var, initial, domain)
Функция: rk ([ODE1,...,ODEm], [v1,...,vm], [init1,...,initm], domain)

Первая форма численно решает одно обычное дифференциальное уравнение первого порядка, а вторая форма решает систему m подобных уравнений, с использованием метода Рунге-Кутта 4-го порядка. var – зависимая переменная. ODE – должно быть выражением, которое зависит только от независимой и зависимой переменных и определяет производную зависимой переменной по независимой.

Независимая переменная задается параметром domain, который должен быть списком четырех элементов. Например:

[t, 0, 10, 0.1]

первый элемент списка есть независимая переменная, второй и третий элементы есть начальное и конечное значения этой переменной, и последний элемент задает шаг для данного интервала.

Если предстоит решить m уравнений, то должно быть m зависимых переменных v1, v2, ..., vm. Начальные значения для этих переменных будут init1, init2, ..., initm. При этом все равно остается только одна зависимая переменная, задаваемая domain, как в предыдущем случае. ODE1, ..., ODEm – выражения, определяющие производную каждой из зависимых переменных по независимой. Эти выражения могут зависеть только от зависимых переменных и независимой переменной. Важно задать производные ODE1, ..., ODEm в списке точно в том порядке, что и зависимые переменные. Т.е. третий элемент списка будет интерпретирован как производная третьей зависимой переменной.

Программа пытается проинтегрировать уравнения от начального значения независимой переменной до конечного значения с использованием постоянного приращения. Если на каком-либо шаге значение одной из зависимых переменных становится слишком большим по абсолютной величине, то интегрирование прекращается. Результат является списком с числом элементов равным числу итераций. Каждый элемент сам является списком с m+1 элементами: значение зависимой переменной с последующими значениями зависимых переменных в соответствующей точке.

Функция: staircase (F, y0, n, ...options...);

Строит лестничную диаграмму для последовательности, заданной рекуррентным соотношением

        y(n+1) = F(y(n))

Интерпретация и допустимые значения параметров аналогичны таковым для команды evolution. Лестничная диаграмма состоит из графика функции F(y) вместе с прямой G(y) = y. Из точки (y0, y0) на этой прямой строится вертикальный отрезок до переcечения с функцией F. Из этой точки строится горизонтальный отрезок до точки пересечения с прямой в точке (y1, y1). Процедура повторяется n раз до достижения точки (yn, yn).

Опции

Каждая опция есть список из двух или более элементов. Первый элемент – имя опции, остальные – аргументы опции.

Допустимые опции функций evolution, evolution2d, staircase, orbits, ifs и chaosgame те же самые, что у функции plot2d. Функция orbits допускает дополнительную опцию pixels, которая задает максимальное число точек по вертикали.

Следующие опции допускаются функциями julia и mandelbrot:

Примеры

Графическое представление лестничной диаграммы для последовательности: 2, cos(2), cos(cos(2)),...

(%i1) load("dynamics")$

(%i2) evolution(cos(y), 2, 11);

(%i3) staircase(cos(y), 1, 11, [y, 0, 1.2]);
./figures/dynamics1 ./figures/dynamics2

Если ваша система медленна, следует уменьшить число итераций в следующих примерах. Если точки кажутся слишком маленькими на мониторе, то можно попробовать другой стиль, например [style, [points, 0.8 ]].

Диаграмма траекторий для квадратичного отображения с параметром a.

        x(n+1) = a + x(n)^2
(%i4) orbits(x^2+a, 0, 50, 200, [a, -2, 0.25], [style, dots]);
./figures/dynamics3

Для того, чтобы увеличить область вблизи нижней бифуркации около x = -1.25 используем:

(%i5) orbits(x+y^2, 0, 100, 400, [a,-1,-1.53], [x,-1.6,-0.8],
             [nticks, 400], [style,dots]);
./figures/dynamics4

Эволюция двумерной системы, приводящая к фракталу:

(%i6) f: 0.6*x*(1+2*x)+0.8*y*(x-1)-y^2-0.9$

(%i7) g: 0.1*x*(1-6*x+4*y)+0.1*y*(1+9*y)-0.4$

(%i8) evolution2d([f,g], [x,y], [-0.5,0], 50000, [style,dots]);
./figures/dynamics5

Увеличение небольшой области фрактала:

(%i9) evolution2d([f,g], [x,y], [-0.5,0], 300000, [x,-0.8,-0.6],
                  [y,-0.4,-0.2], [style, dots]);
./figures/dynamics6

График треугольника Серпинского, полученный как игра хаоса:

(%i9) chaosgame([[0, 0], [1, 0], [0.5, sqrt(3)/2]], [0.1, 0.1], 1/2,
                 30000, [style, dots]);
./figures/dynamics7

Фрактал папоротник (Barnsley’s fern) полученный при помощи системы повторяющихся функций (Iterated Function System):

(%i10) a1: matrix([0.85,0.04],[-0.04,0.85])$

(%i11) a2: matrix([0.2,-0.26],[0.23,0.22])$

(%i12) a3: matrix([-0.15,0.28],[0.26,0.24])$

(%i13) a4: matrix([0,0],[0,0.16])$

(%i14) p1: [0,1.6]$

(%i15) p2: [0,1.6]$

(%i16) p3: [0,0.44]$

(%i17) p4: [0,0]$

(%i18) w: [85,92,99,100]$

(%i19) ifs(w, [a1,a2,a3,a4], [p1,p2,p3,p4], [5,0], 50000, [style,dots]);
./figures/dynamics8

Чтобы создать файл dynamics9.xpm с графическим изображением фрактала Мандельброта с 12 цветами, выполним:

mandelbrot([filename,"dynamics9"])$

Для фрактала Джулия с числом (-0.55 + i 0.6):

julia(-0.55, 0.6, [levels, 36], [center, 0, 0.6], [radius, 0.3],
      [hue, 240], [huerange, -180], [filename, "dynamics10"])$

Граф будет сохранен ф файле dynamics10.xpm и будет изображать область от -0.3 до 0.3 по оси x, и от 0.3 до 0.9 по оси y. Используется 36 цветов, начиная с синего и заканчивая желтым.

Чтобы решить дифференциальное уравнение

          dx/dt = t - x^2

с начальным значением x(t=0) = 1, в интервале t от 0 до 8 с шагом 0.1, используем команду:

(%i20) results: rk(t-x^2,x,1,[t,0,8,0.1])$

Результат сохраняется в списке results.

Чтобы численно решить систему:

        dx/dt = 4-x^2-4*y^2     dy/dt = y^2-x^2+1

для t от 0 до 4, и с значениями -1.25 и 0.75 для x и y в t=0:

(%i21) sol: rk([4-x^2-4*y^2,y^2-x^2+1],[x,y],[-1.25,0.75],[t,0,4,0.02])$

Previous: Введение в пакет dynamics, Up: Пакет dynamics   [Contents][Index]