4 @c OriginalRevision=1.15
5 @c TranslatedBy: (c) 2008-02 Vadim V. Zhytnikov <vvzhyt@gmail.com>
9 * Введение в пакет dynamics::
10 * Функции и переменные пакета dynamics::
13 @node Введение в пакет dynamics, Функции и переменные пакета dynamics, Пакет dynamics, Пакет dynamics
14 @section Введение в пакет dynamics
16 Пакет @code{dynamics} включает несколько функций, предназначенных
17 для создания различных графических представлений дискретных
18 динамических систем и фракталов, и реализацию метода Рунге-Кутта 4-го порядка
19 для численного решения систем дифференциальных уравнений.
21 Для того, чтобы использовать функции данного пакета, его нужно сначала загрузить командой
22 @code{load("dynamics")}.
24 @b{Изменения введенные в Maxima 5.12}
26 Начиная с версии Maxima 5.12 пакет dynamics использует для построения
27 графиков функцию @code{plot2d}. Команды, строящие графики
28 (исключая @code{julia} и @code{mandelbrot}), принимают любые опции
29 команды @code{plot2d}, включая опции выбора различных графических интерфейсов,
30 выбора стилей и цвета, и представления одной или обеих осей в логарифмической шкале.
31 Старые опции @var{domain}, @var{pointsize}, @var{xcenter}, @var{xradius},
32 @var{ycenter}, @var{yradius}, @var{xaxislabel} и @var{yaxislabel},
33 начиная с этой версии не действуют.
35 Все программы теперь принимают произвольные имена переменных, а не только @var{x}
36 и @var{y}, как в старых версиях. Обязательные параметры изменились в двух
37 программах: @code{evolution2d} теперь требует список, называющий явным образом
38 две независимые переменные, а горизонтальный предел для @code{orbits}
39 больше не требует указание размера шага. Теперь предел задает
40 имя переменной, минимальное и максимальное значения.
41 Размер шага теперь может быть изменен с помощью опции @var{nticks}.
44 @opencatbox{Категории:}
45 @category{Динамические системы}
46 @category{Пакеты библиотеки share}
47 @category{Пакет dynamics}
50 @node Функции и переменные пакета dynamics, , Введение в пакет dynamics, Пакет dynamics
51 @section Функции и переменные пакета dynamics
53 @deffn {Функция} chaosgame (@code{[[}@var{x1}, @var{y1}@code{]}...@code{[}@var{xm}, @var{ym}@code{]]}, @code{[}@var{x0}, @var{y0}@code{]}, @var{b}, @var{n}, ..., options, ...);
55 Реализует так называемую игру хаоса: сначала изображается начальная точка (@var{x0},
56 @var{y0}), далее одна из @var{m} точек
57 @code{[}@var{x1}, @var{y1}@code{]}...@code{[}@var{xm}, @var{ym}@code{]}
58 выбирается произвольным образом. Следующая точка изображается на отрезке,
59 соединяющем предыдущую точку со случайно выбранной, на расстоянии от случайной точки
60 равном длине этого отрезка, умноженной на @var{b}
61 Процедура повторяется @var{n} раз.
63 @opencatbox{Категории:}
64 @category{Пакет dynamics}
70 @deffn {Функция} evolution (@var{F}, @var{y0}, @var{n}, ..., options, ...);
72 Изображает @var{n+1} точек на 2-мерном графе, где горизонтальные
73 координаты точек есть 0, 1, 2, ..., @var{n}, а вертикальные
74 координаты есть соответствующие значения последовательности @var{y(n)},
75 определенной рекуррентным соотношением
85 С начальным значением @var{y(0)} равным @var{y0}. @var{F} должно быть
86 выражением, которое зависит только от одной переменной (в примере,
87 оно зависит от @var{y}, но может быть использована только одна переменная),
88 @var{y0} должно быть вещественным числом, а @var{n} должно быть положительным целым.
90 @opencatbox{Категории:}
91 @category{Пакет dynamics}
97 @deffn {Функция} evolution2d (@code{[}@var{F}, @var{G}@code{]}, @code{[}@var{u}, @var{v}@code{]}, @code{[}@var{u0}, @var{y0}@code{]}, @var{n}, ..., options, ...);
99 Изображает на двумерном графике первые @var{n+1} точек последовательности,
100 определяемой двумерной дискретной динамической системой с
101 рекуррентными соотношениями
104 u(n+1) = F(u(n), v(n)) v(n+1) = G(u(n), v(n))
108 $$\cases{u_{n+1} = F(u_n, v_n) &\cr v_{n+1} = G(u_n, v_n)}$$
111 С начальными значениями @var{u0} и @var{v0}. Выражения @var{F} и @var{G} должны
112 зависеть только от двух переменных @var{u} и @var{v},
113 которые должны быть явно объявлены в списке.
115 @opencatbox{Категории:}
116 @category{Пакет dynamics}
122 @deffn {Функция} ifs (@code{[}@var{r1}, ..., @var{rm}@code{]}, @code{[}@var{A1}, ..., @var{Am}@code{]}, @code{[[}@var{x1}, @var{y1}@code{]}, ..., @code{[}@var{xm}, @var{ym}@code{]]}, @code{[}@var{x0}, @var{y0}@code{]}, @var{n}, ..., options, ...);
124 Реализует метод системы повторяющихся функций (Iterated Function System).
125 Этот метод аналогичен игре хаоса, описанной в функции @code{chaosgame},
126 но вместо сжатия отрезка от текущей точки до случайно выбранной,
127 две компоненты данного отрезка умножаются на 2х2
128 матрицу @var{Ai}, которая соответствует случайно выбранной точке.
130 Случайный выбор @var{m} точек притяжения может быть осуществлен
131 с вероятностью, определенной весами
132 @var{r1},...,@var{rm}. Веса могут быть заданы в кумулятивной форме,
133 например, если есть 3 точки с вероятностями 0.2, 0.5 и 0.3,
134 то веса @var{r1}, @var{r2} и @var{r3} могут быть 2, 7 и 10.
136 @opencatbox{Категории:}
137 @category{Пакет dynamics}
143 @deffn {Функция} julia (@var{x}, @var{y}, ...@var{options}...)
145 Создает графический файл с изображением фрактала Джулия для комплексного числа (@var{x} + i @var{y}).
146 Параметры @var{x} и @var{y} должны быть вещественными.
147 Файл в графическом формате XPM создается в текущей директории пользователя.
148 Работа программы занимает несколько секунд, а по окончании вычислений она печатает
149 имя созданного файла.
151 Точкам, которые не принадлежат фракталу Джулия, присваиваются разные цвета
152 в соответствии с числом итераций, необходимых последовательности,
153 начинающейся в точке, чтобы выити из круга сходимости радиуса 2.
154 Максимальное число итераций определяется опцией @var{levels}.
155 Если после этого числа итераций, последовательность все еще
156 находится в круге сходимости, то точка будет изображена
157 цветом, определяемым опцией @var{color}.
159 Все цвета, используемые для изображения точек, не принадлежащих
160 фракталу Джулия, имеют одинаковые @var{saturation} и @var{value},
161 но различные углю оттенков, равномерно распределенные
162 в интервале от @var{hue} до (@var{hue} + @var{huerange}).
164 @var{options} -- набор необязательных опций. Список допустимых опций приведен
167 @opencatbox{Категории:}
168 @category{Пакет dynamics}
174 @deffn {Функция} mandelbrot (@var{options})
176 Создает графический файл с изображением фрактала Мандельброта.
177 Файл в графическом формате XPM создается в текущей директории пользователя.
178 Работа программы занимает несколько секунд, а по окончании вычислений она печатает
179 имя созданного файла.
181 Точкам, которые не принадлежат фракталу Джулия, присваиваются разные цвета
182 в соответствии с числом итераций, необходимых последовательности,
183 начинающейся в точке, чтобы выити из круга сходимости радиуса 2.
184 Максимальное число итераций определяется опцией @var{levels}.
185 Если после этого числа итераций, последовательность все еще
186 находится в круге сходимости, то точка будет изображена
187 цветом, определяемым опцией @var{color}.
189 Все цвета, используемые для изображения точек, не принадлежащих
190 фракталу Джулия, имеют одинаковые @var{saturation} и @var{value},
191 но различные углы оттенков, равномерно распределенные
192 в интервале от @var{hue} до (@var{hue} + @var{huerange}).
194 @var{options} -- набор необязательных опций. Список допустимых опций приведен
197 @opencatbox{Категории:}
198 @category{Пакет dynamics}
204 @deffn {Функция} orbits (@var{F}, @var{y0}, @var{n1}, @var{n2}, [@var{x}, @var{x0}, @var{xf}, @var{xstep}], ...options...);
206 Изображает диаграмму траекторий семейства одномерных
207 дискретных динамических систем с одним параметром @var{x}.
208 Такой тип диаграмм используется при изучении бифуркации одномерных
211 Функция @var{F(y)} определяет последовательность с начальным значением @var{y0},
212 также как в случае функции @code{evolution}, но в данном случае функция
213 еще зависит от параметра @var{x}, принимающего значения в интервале от
214 @var{x0} до @var{xf} с шагом @var{xstep}.
215 Каждое значение параметра @var{x} изображается на горизонтальной оси.
216 На вертикальной оси изображаются @var{n2} значений последовательности
217 @var{y(n1+1)},..., @var{y(n1+n2+1)}, полученных поле @var{n1}
220 @opencatbox{Категории:}
221 @category{Пакет dynamics}
227 @deffn {Функция} rk (@var{ODE}, @var{var}, @var{initial}, @var{domain})
228 @deffnx {Функция} rk ([@var{ODE1},...,@var{ODEm}], [@var{v1},...,@var{vm}], [@var{init1},...,@var{initm}], @var{domain})
230 Первая форма численно решает одно обычное дифференциальное
231 уравнение первого порядка, а вторая форма решает систему m
232 подобных уравнений, с использованием метода Рунге-Кутта 4-го порядка.
233 @var{var} -- зависимая переменная. @var{ODE} -- должно быть выражением, которое
234 зависит только от независимой и зависимой переменных и определяет
235 производную зависимой переменной по независимой.
237 Независимая переменная задается параметром @code{domain}, который должен быть списком
238 четырех элементов. Например:
242 первый элемент списка есть независимая переменная,
243 второй и третий элементы есть начальное и конечное значения этой переменной,
244 и последний элемент задает шаг для данного интервала.
246 Если предстоит решить @var{m} уравнений, то должно быть @var{m}
247 зависимых переменных @var{v1}, @var{v2}, ..., @var{vm}.
248 Начальные значения для этих переменных будут @var{init1}, @var{init2}, ..., @var{initm}.
249 При этом все равно остается только одна зависимая переменная, задаваемая @code{domain},
250 как в предыдущем случае.
251 @var{ODE1}, ..., @var{ODEm} -- выражения, определяющие производную каждой
252 из зависимых переменных по независимой.
253 Эти выражения могут зависеть только от зависимых переменных и независимой переменной.
254 Важно задать производные @var{ODE1}, ..., @var{ODEm} в списке точно в том порядке,
255 что и зависимые переменные. Т.е. третий элемент списка будет
256 интерпретирован как производная третьей зависимой переменной.
258 Программа пытается проинтегрировать уравнения от начального значения
259 независимой переменной до конечного значения с использованием
260 постоянного приращения.
261 Если на каком-либо шаге значение одной из зависимых переменных
262 становится слишком большим по абсолютной величине, то интегрирование прекращается.
263 Результат является списком с числом элементов равным числу итераций.
264 Каждый элемент сам является списком с @var{m}+1 элементами:
265 значение зависимой переменной с последующими значениями зависимых переменных
266 в соответствующей точке.
268 @opencatbox{Категории:}
269 @category{Пакет dynamics}
270 @category{Дифференциальные уравнения}
271 @category{Численные методы}
276 @deffn {Функция} staircase (@var{F}, @var{y0}, @var{n}, ...options...);
278 Строит лестничную диаграмму для последовательности,
279 заданной рекуррентным соотношением
289 Интерпретация и допустимые значения параметров аналогичны таковым для команды @code{evolution}.
290 Лестничная диаграмма состоит из графика функции @var{F(y)} вместе с прямой @var{G(y)} @code{=} @var{y}.
291 Из точки (@var{y0}, @var{y0}) на этой прямой строится вертикальный отрезок
292 до переcечения с функцией @var{F}. Из этой точки строится горизонтальный отрезок до
293 точки пересечения с прямой в точке (@var{y1}, @var{y1}).
294 Процедура повторяется @var{n} раз до достижения точки (@var{yn}, @var{yn}).
296 @opencatbox{Категории:}
297 @category{Пакет dynamics}
305 Каждая опция есть список из двух или более элементов. Первый элемент -- имя опции,
306 остальные -- аргументы опции.
308 Допустимые опции функций @code{evolution}, @code{evolution2d},
309 @code{staircase}, @code{orbits}, @code{ifs} и @code{chaosgame} те же самые, что
310 у функции @code{plot2d}. Функция @code{orbits}
311 допускает дополнительную опцию @var{pixels}, которая задает максимальное
312 число точек по вертикали.
314 Следующие опции допускаются функциями @code{julia} и @code{mandelbrot}:
318 @dfn{size} имеет один или два аргумента. Если задан только один аргумент,
319 то ширина и высота создаваемого графика в пикселях будут равны этому значению.
320 Если заданы два агрумента, то они определяют ширину и высоту соответственно.
321 Значение по умолчанию равно 400 для ширины и для высоты.
322 Если два параметра не равны, то график будет искаженным.
325 @dfn{levels} определяет максимальное число итераций, которое также
326 равно числу цветов, используемых для раскраски не принадлежащих фракталу точек.
327 Значение по умолчанию равно 12. Большее значение приводят к большему времени
331 @dfn{huerange} определяет диапазон углов оттенков, используемых
332 для раскраски не принадлежащих фракталу точек.
333 Значение по умолчанию 360, что означает -- весь диапазон оттенков.
334 Значения больше 360 означает повторяющиеся оттенки,
335 а отрицательное значение позволяет уменьшать углы оттенков с
336 увеличением числа итераций.
339 @dfn{hue} задает оттенок в градусах для первого цвета,
340 используемого для раскраски не принадлежащих фракталу точек.
341 Значение по умолчанию 300, что соответствует цвету маджента.
342 Значения для некоторый других стандартных цветов:
343 0 -- красный, 45 -- оранжевый, 60 -- желтый, 120 -- зеленый, 180 -- циан и
344 240 -- синий. См. также опцию @var{huerange}.
347 @dfn{saturation} задает значение насыщенности цвета для не принадлежащих
348 фракталу точек. Оно должно быть в пределах от 0 до 1.
349 Значение по умолчанию 0.46.
352 @dfn{value} задает яркость цвета для не принадлежащих
353 фракталу точек. Оно должно быть в пределах от 0 до 1.
354 Чем больше значение, тем ярче цвет.
357 @dfn{color} должна иметь три параметра, задающих оттенок,
358 насыщенность и яркость. Значение по умолчанию 0 для всех трех параметров,
359 что соответствует черному цвету.
360 Для объяснения допустимых значений см. опции
361 @var{hue}, @var{saturation} и @var{value}.
364 @dfn{center} должна иметь два вещественных параметра, задающих
365 на комплексной плоскости точку центра изображаемой области.
366 Значение по умолчанию 0 для обеих координат (начало координат).
369 @dfn{radius} задает радиус наибольшего круга внутри изображаемой квадратной области.
370 Значение по умолчанию 2.
373 @dfn{filename} задает имя файла, в котором будет сохранен результирующий график.
374 Расширение .xpm добавляется к имени файла. Если файл уже существует,
375 то он будет замене на новый.
376 Значение по умолчанию есть julia для фрактала Джулия и mandelbrot
377 для фрактала Мандельброта.
383 Графическое представление лестничной диаграммы для последовательности:
384 2, cos(2), cos(cos(2)),...
387 (%i1) load("dynamics")$
389 (%i2) evolution(cos(y), 2, 11);
391 (%i3) staircase(cos(y), 1, 11, [y, 0, 1.2]);
395 @image{@value{figuresfolder}/dynamics1,8cm}
396 @image{@value{figuresfolder}/dynamics2,8cm}
399 Если ваша система медленна, следует уменьшить число итераций в следующих примерах.
400 Если точки кажутся слишком маленькими на мониторе, то можно
401 попробовать другой стиль, например
402 @code{[}@var{style}, @code{[}@var{points}, 0.8 @code{]]}.
404 Диаграмма траекторий для квадратичного отображения с параметром @var{a}.
411 $$x_{n+1} = a + x_n^2$$
415 (%i4) orbits(x^2+a, 0, 50, 200, [a, -2, 0.25], [style, dots]);
419 @image{@value{figuresfolder}/dynamics3,8cm}
422 Для того, чтобы увеличить область вблизи нижней бифуркации около x @code{=} -1.25 используем:
424 (%i5) orbits(x+y^2, 0, 100, 400, [a,-1,-1.53], [x,-1.6,-0.8],
425 [nticks, 400], [style,dots]);
429 @image{@value{figuresfolder}/dynamics4,8cm}
432 Эволюция двумерной системы, приводящая к фракталу:
435 (%i6) f: 0.6*x*(1+2*x)+0.8*y*(x-1)-y^2-0.9$
437 (%i7) g: 0.1*x*(1-6*x+4*y)+0.1*y*(1+9*y)-0.4$
439 (%i8) evolution2d([f,g], [x,y], [-0.5,0], 50000, [style,dots]);
443 @image{@value{figuresfolder}/dynamics5,8cm}
446 Увеличение небольшой области фрактала:
449 (%i9) evolution2d([f,g], [x,y], [-0.5,0], 300000, [x,-0.8,-0.6],
450 [y,-0.4,-0.2], [style, dots]);
454 @image{@value{figuresfolder}/dynamics6,8cm}
457 График треугольника Серпинского, полученный как игра хаоса:
460 (%i9) chaosgame([[0, 0], [1, 0], [0.5, sqrt(3)/2]], [0.1, 0.1], 1/2,
461 30000, [style, dots]);
465 @image{@value{figuresfolder}/dynamics7,8cm}
468 Фрактал папоротник (Barnsley's fern) полученный при помощи
469 системы повторяющихся функций (Iterated Function System):
472 (%i10) a1: matrix([0.85,0.04],[-0.04,0.85])$
474 (%i11) a2: matrix([0.2,-0.26],[0.23,0.22])$
476 (%i12) a3: matrix([-0.15,0.28],[0.26,0.24])$
478 (%i13) a4: matrix([0,0],[0,0.16])$
488 (%i18) w: [85,92,99,100]$
490 (%i19) ifs(w, [a1,a2,a3,a4], [p1,p2,p3,p4], [5,0], 50000, [style,dots]);
494 @image{@value{figuresfolder}/dynamics8,8cm}
497 Чтобы создать файл @emph{dynamics9.xpm} с графическим изображением
498 фрактала Мандельброта с 12 цветами, выполним:
501 mandelbrot([filename,"dynamics9"])$
505 @c commented out, image is missing... @image{@value{figuresfolder}/dynamics9,8cm}
508 Для фрактала Джулия с числом (-0.55 + i 0.6):
510 julia(-0.55, 0.6, [levels, 36], [center, 0, 0.6], [radius, 0.3],
511 [hue, 240], [huerange, -180], [filename, "dynamics10"])$
514 Граф будет сохранен ф файле @emph{dynamics10.xpm} и будет изображать область
515 от -0.3 до 0.3 по оси x, и от 0.3 до 0.9 по оси y.
516 Используется 36 цветов, начиная с синего и заканчивая желтым.
519 @c commented out, image is missing @image{@value{figuresfolder}/dynamics10,8cm}
522 Чтобы решить дифференциальное уравнение
530 $${{dx}\over{dt}} = t - x^2$$
533 с начальным значением x(t=0) = 1, в интервале t от 0 до 8 с шагом 0.1, используем команду:
536 (%i20) results: rk(t-x^2,x,1,[t,0,8,0.1])$
539 Результат сохраняется в списке @code{results}.
541 Чтобы численно решить систему:
545 dx/dt = 4-x^2-4*y^2 dy/dt = y^2-x^2+1
549 $$\cases{{\displaystyle{dx}\over\displaystyle{dt}} = 4-x^2-4y^2 &\cr &\cr {\displaystyle{dy}\over\displaystyle{dt}} = y^2-x^2+1}$$
552 для t от 0 до 4, и с значениями -1.25 и 0.75 для x и y в t=0:
555 (%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])$