Построение графиков в wxMaxima и Maxima (перевод официальной документации)

1. Введение в построение графиков

Maxima использует внешний пакет построения графиков для их создания (смотрите секцию форматы графиков). Функции черчения рассчитывают набор точек и передают их пакету построения графиков вместе с набором команд. Эта информация может быть передана внешней программе как по трубе или вызовом программы с указанием имени файла, где были сохранены данные. Файлу данных присваивается имя maxout_xxx.format, где xxx это уникальный номер для каждого одновременно запущенного экземпляра maxima, а format – это имя формата построения графиков, который будет использоваться (gnuplot, xmaxima, mgnuplot или gnuplot_pipes).

Если график требуется сохранить в виде изображения, то в этом случае создаваемый в Maxima файл maxout_xxx.format включает команды, которые укажут внешней программе черчения сохранить результат в графический файл. Имя по умолчанию для файла с изображением maxplot.extension, где extension – это расширение, обычно используемое графическими файлами этого типа.

Файлы maxout_xxx.format и maxplot.extension создаются в директории, указанной в системной переменной maxima_tempdir. Расположение может быть изменено присвоением значения этой переменной (или переменной окружения MAXIMA_TEMPDIR) строки, которая является валидной директорией, где Maxima может создавать новые файлы. Выводом команды черчения Maxima будет список с именами созданного(ых) файла(ов), включая полный путь.

Если используемыми форматами являются gnuplot или xmaxima, в качестве внешней программы могут быть запущены gnuplot или xmaxima, чтобы снова увидеть график, предварительно созданный в Maxima, с переданным ей файлом maxout_xxx.format в качестве аргумента. Т.е. при неудачах команды построения графиков Maxima, формат может быть установлен в gnuplot или xmaxima и файл в простом текстовом формате maxout_xxx.gnuplot (или maxout_xxx.xmaxima) может быть изучен для поиска источника проблемы.

Дополнительный пакет draw обеспечивает функции схожие описанным в секции с некоторыми дополнительными возможностями. Обратите внимание, что некоторые опции построения графиков имеют одинаковые имена в обоих пакетах построения, но их синтаксис и поведение различается. Для просмотра документации по графической опции opt, напечатайте ?? opt чтобы выбрать информацию по любому из этих двух пакетов.

2. Форматы построения графиков

В Maxima в качестве графических программ может использоваться как Gnuplot так и Xmaxima. Gnuplot – это внешняя программа, которая должна быть установлена отдельно, а Xmaxima поставляется вместе с Maxima (для некоторых ОС Gnuplot также содержится в установочном файле Maxima). Есть разнообразные виды форматов для этих программ, которые можно выбрать опциями plot_format (смотрите также секцию Опции построения графиков).

Форматами построения графиков являются следующие:

  • gnuplot (по умолчанию для Windows)

Используется для запуска внешней программы gnuplot, которая должна быть установлена в вашу систему. Все команды черчения и данные сохраняются в файл maxout_xxx.gnuplot.

  • gnuplot_pipes (по умолчанию на не-Windows платформах)

Этот формат недоступен на Windows платформах. Она схожа с форматом gnuplot за исключением того, что команды отправляются gnuplot по трубе, а данные сохраняются в файл maxout_xxx.gnuplot_pipes. Один процесс gnuplot поддерживается открытым  и последующие команды черчения будут отправлены в тот же процесс, заменяя предыдущие графики, если труба gnuplot не закрыта функцией gnuplot_close. При использовании этого формата, функция gnuplot_replot может изменить график, который уже отображается на экране.

Этот формат используется только для черчения на экране; при создании графических файлов формат тихо переключается на gnuplot и команды, нужные для создания графического файла, сохраняются с данными в файл maxout_xxx.gnuplot.

  • mgnuplot

Mgnuplot это основанная на Tk обёртка вокруг gnuplot. Она включена в дистрибуцию Maxima. Mgnuplot предлагает зачаточный графический интерфейс для gnuplot, но в общей сложности имеет меньше возможностей, чем простой интерфейс gnuplot. Mgnuplot требует внешнюю установку gnuplot и, в системах Unix, Tcl/Tk систему.

  • xmaxima

Xmaxima – это Tcl/Tk графический интерфейс для Maxima который также может использоваться для отображения графиков, созданных во время запуска Maxima из консоли или из графического интерфейса. Для использования этого формата должна быть установлена программа xmaxima, которая распространяется вместе с Maxima. Если Maxima была запущена из консоли Xmaxima, данные и команды передаются в xmaxima через тот же сокет, используемый для коммуникации между Maxima и консолью Xmaxima. При использовании из терминала или из графического интерфейса отличного от Xmaxima, команды и данные сохраняются в файле maxout_xxx.xmaxima и xmaxima, запущенными с именем файла в качестве аргумента.

В предыдущих версиях этот формат назывался openmath; старое имя всё ещё работает как синоним для xmaxima.

3. Функции и переменные для построения графиков

Функция: contour_plot (выражение, x_диапазон, y_диапазон, опции, …)

Она строит контуры (кривые соответствующей величины) выражения в  области x_range и y_range. Любые дополнительные аргументы обрабатываются также, как и в plot3d.

Эта функция работает только когда формат графика gnuplot либо gnuplot_pipes. Дополнительный пакет implicit_plot, который работает в любом графическом формате, также может использоваться для черчения контуров, но для каждого контура должны быть даны отдельные выражения.

Пример: 

contour_plot (x^2 + y^2, [x, -4, 4], [y, -4, 4])$

01

Вы можете добавить любые опции, принимаемые в plot3d; например, опция legend со значением false, для удаления подписи. По умолчанию, Gnuplot выбирает и отображает 3 контура. Для увеличения количества контуров необходимо использовать gnuplot_preamble с пользовательским значением как в следующем примере:

contour_plot (u^3 + v^2, [u, -4, 4], [v, -4, 4],
              [legend,false],
              [gnuplot_preamble, "set cntrparam levels 12"])$

02

Функция: get_plot_option (keyword, index)

Возвращает текущее значение по умолчанию опции называемой keyword, которая является списком. Опциональный аргумент index должен быть положительным целым числом, которое может использоваться для извлечения только одного элемента из списка (элемент 1 – это имя опции).

Смотрите также set_plot_option, remove_plot_option и секцию в Опциях рисования графиков.

Системная переменная: gnuplot_command

Эта переменная сохраняет имя используемой команды для запуска программы gnuplot когда форматом черчения является gnuplot. Значение по умолчанию в Windows это "wgnuplot", а в других системах — "gnuplot". Если программа gnuplot не находится без полного пути или если вы хотите попробовать другую её версию, вы можете изменить значение этой переменной. Например,

gnuplot_command: "/usr/local/bin/my_gnuplot"$

Системная переменная: gnuplot_file_args

Если графический файл будет создан с использованием gnuplot, эта переменная используется для указания пути имени файла для передачи в gnuplot. Значением по умолчанию является "~s", что означает, что имя файла будет передано напрямую. Содержимое этой переменной может быть изменено для добавления опций для программы gnuplot, добавления этих опций перед директивой формата "~s".

Системная переменная: gnuplot_view_args

Эта переменная используется для разбора аргумента, который будет передан в программу gnuplot когда форматом черчения является gnuplot. Значением по умолчанию является "-persist ~s", где "~s" будет заменено именем файла, где были записаны команды gnuplot (обычно "maxout_xxx.gnuplot"). Опция -persist говорит gnuplot выйти без закрытия окна с графиком после того, как будут выполнены эти команды.

Тем, кто знаком с gnuplot, может понадобиться изменить значение этой переменной. Например, изменить его на:

gnuplot_view_args: "~s -"$

gnuplot не будет закрыт после выполнения команд в файле; т.е. окно с графиком сохранится как и интерактивный шелл gnuplot, где могут быть введены другие команды для изменения графика.

В Windows версии Gnuplot старше чем 4.6.3 поведение "~s -" и "-persist ~s" были противоположны; а именно, "-persist ~s" делали сохраняющееся окно графика и интерактивный шелл gnuplot, при этом "~s -" закрывал оболочку gnuplot для сохранения окна графика. Следовательно, при использовании более старых верси gnuplot в Windows, может оказаться необходимым отрегулировать значение gnuplot_view_args.

Функция: implicit_plot

implicit_plot (expr, x_range, y_range)  

implicit_plot ([expr_1, …, expr_n], x_range, y_range)

Отображает график функции на вещественной плоскости, определяемой неявно выражением ехрг. Область в плоскости определяется x_range и y_range. На одном графике может быть представлено несколько функций, список выражений, которые их определяет выглядит [expr_1, …, expr_n]. Эти функции используют глобальный формат опции, установленных set_plot_option. Дополнительные опции могут быть переданы как дополнительные аргументы для команды implicit_plot.

Метод, используемый implicit_plot, состоит в отслеживании изменения знака на данной плоскости и может потерпеть неудачу для сложных выражений.

load(implicit_plot) Загружает эту функцию.

Пример:

load(implicit_plot)$
implicit_plot (x^2 = y^3 - 3*y + 1, [x, -4, 4], [y, -4, 4])$

03

Функции: julia (x, y, …опции…)

Создает графическое представление множества Жюлиа для комплексного числа (x + i y). Два обязательных параметра x и y должны быть реальными. Эта программа часть дополнительного пакета dynamics, но этот пакет необязательно загружать; при первом использовании julia, он будет загружен автоматически.

Каждому пикселю в сетке задается цвет, соответствующий количеству итераций, которое принимает последовательность, начинающаяся в точке сходимости круга радиусом 2 с центром в начале координат. Количество пикселей в сетке контролируется опцией графика grid (по умолчанию 30 на 30).

Максимальное количество итераций устанавливается опцией iterations. Программа использует свою собственную палитру по умолчанию: пурпурный, фиолетовый, синий, голубой, зеленый, желтый, оранжевый, красный, коричневый и черный, но она может быть изменена путем добавления в команде явной опции palette.

Используемая область по умолчанию простирается от -2 до 2 по обоим осям и может быть изменена опциями x и y. По умолчанию, показываются две оси в одинаковом масштабе, если не используется опция yx_ratio или оппция same_xy отключена. Другие обычные опции графиков также принимаются.

Следующий пример показывает множество Жулиа для числа -0.55 + i0.6. Опция color_bar_tics используется чтобы не дать Gnuplot настроить поле цвета до 40, в этом случае точки, соответствующие максимум 36 итерациями не были бы чёрными.

julia (-0.55, 0.6, [iterations, 36], [x, -0.3, 0.2],
      [y, 0.3, 0.9], [grid, 400, 400], [color_bar_tics, 0, 6, 36])$

01

Функция: make_transform ([var1, var2, var3], fx, fy, fz)

Возвращает функцию, подходящую для использования в опции transform_xy для plot3d. Три переменные var1, var2, var3 – это три фиктивных имени переменных, которые представляют 3 переменные, данные командой plot3d (первые две независимые переменные и затем функция, которая зависит от этих двух переменных). Эти три функции fx, fy, fz должны зависить только от этих трёх переменных и давать соответствующие координаты x, y и z, которые должны быть начерчены. Есть две трансформации, заданные по умолчанию: polar_to_xy и spherical_to_xyz.

Функция: mandelbrot (опции)

Создает графическое представление Множества Мандельброта. Эта программа является частью дополнительного пакета dynamics, но этот пакет не нужно загружать; первый раз, когда используется mandelbrot, пакет будет загружен автоматически.

Эту программу можно вызвать без каких-либо аргументов, в этом случае она будет использовать значение по умолчанию в 9 итераций на точку, сетку с размерами, установленными опцией графика grid (по умолчанию 30 на 30) и область, которая простирается от -2 до 2 по обоим осям. Эти опции такие же, какие принимает plot2d, плюс опция iterations для изменения числа итераций.

Каждый пиксель в сетке – это данный цвет, соответствующий количеству итераций, которое необходимо последовательности, начинающейся с нуля для выхода из круга сходимости радиусом 2, с центром в начале координат. Максимальное число итераций установлено опцией iterations. Программа использует свою собственную палитру по умолчанию: пурпурный, фиолетовый, синий, голубой, зеленый, желтый, оранжевый, красный, коричневый и черный, но она может быть изменена путем добавления явного опции palette в команде. По умолчанию, две оси показаны в том же масштабе, если не используется опция yx_ratio или опция same_xy отключена.

Пример: 

mandelbrot ([iterations, 30], [x, -2, 1], [y, -1.2, 1.2],
            [grid,400,400])$

02

Системная функция: polar_to_xy

Она может быть передана в качестве значения для опции transform_xy option в plot3d. Её эффект будет в интерпретации двух независимых переменных в plot3d как расстояние от оси z и азимутальным углом (полярные координаты), и трансформирует их в координаты x и y.

Функция: plot2d 

    plot2d (plot, x_range, …, опции, …)  
    plot2d ([plot_1, …, plot_n], …, опции, …)  
    plot2d ([plot_1, …, plot_n], x_range, …, опции, …) 

Где plot, plot_1, …, plot_n могут быть как выражениями, так и именами функций или списком с любыми формами: [discrete, [x1, …, xn], [y1, …, yn]], [discrete, [[x1, y1], …, [xn, …, yn]]] или [parametric, x_expr, y_expr, t_range].

Отображает график одного или нескольких выражений как функций одной переменной или параметра.

plot2d отображает один или несколько графиков в двух измерениях. Когда выражения или имя функции используются для определения графиков, они должны все зависеть только от одной переменной var и использование x_range будет обязательным, для указания имени переменной и её минимальной и максимальной величин; синтаксис для x_range: [variable, min, max].

График также может быть определён в дискретной или параметрической формах. Дискретная форма используется для начертания набора точек по данным координатам. Дискретный график определяется списком, начинающимся с ключевого слова discrete, за которым следует один или два списка величин. Если дано два списка, они должны быть одинаковой длины; первый список будет интерпретироваться как x координата точек для нанесения, а второй список – как y координаты. Если дан только один список после ключевого слова discrete, каждый элемент списка может быть также списком из двух значений, которые соответствуют координатам точек x и y, или это может быть последовательность цифровых величин, который будет начертан как последовательные целые значения (1,2,3,…) на оси x.

Параметрический график определяется списком, начинающимся с ключевого слова parametric, за которым следуют два выражения или имена функций и диапазон для параметра. Этот диапазон для параметра должен быть списком с именем параметра, за которым следует его минимальное и максимальное значения: [param, min, max]. График покажет путь, проходимый точкой с координатами, заданными двумя выражения или функциями как param возрастающий от min до max.

Диапазон для вертикальной оси – это опциональный аргумент в формате: [y, min, max] (для вертикальной оси всегда используется ключевое слово y). Если используется эта опция, график покажет точный вертикальный диапазон, независимо от значений, достигаемых графиком. Если вертикальный диапазон не указан, он будет установлен в соответствии со значениями минимума и максимума второй координаты точек графика.

Все другие опции должны быть списками, начинающимся с ключевого слова за которым следует одна или больше величин. Смотрите plot_options.

Если нужно нарисовать несколько графиков, можно добавить подпись, для идентификации каждого выражения. Используемые для этого подписи передаются с опции legend. Если эта опция не используется, Maxima создаст подписи из выражений или имён функции.

Пример:

График популярной функции:

plot2d (sin(x), [x, -%pi, %pi])$

11

Если функция возрастает слишком быстро, может понадобиться ограничить значения по вертикальной оси, используя опцию y:

plot2d (sec(x), [x, -2, 2], [y, -20, 20])$

12

Если вывод обрамления графика отключён, то на осях не создаются подписи. В этом случае вместо использования xlabel и ylabel для настройки имён осей, лучше использовать опцию label, которая добавляет гибкости. Опция yx_ratio используется для изменения прямоугольной формы графика по умолчанию; в этом примере график будет заполнять квадрат.

plot2d ( x^2 - 1, [x, -3, 3], [box, false], grid2d,
      [yx_ratio, 1], [axes, solid], [xtics, -2, 4, 2],
      [ytics, 2, 2, 6], [label, ["x", 2.9, -0.3],
      ["x^2-1", 0.1, 8]], [title, "A parabola"])$

13

График с логарифмической шкалой по вертикальной оси:

plot2d (exp(3*s), [s, -2, 2], logy)$

14

Черчение функции по имени:

F(x) := x^2 $
:lisp (defun |$g| (x) (m* x x x))
$g
H(x) := if x < 0 then x^4 - 1 else 1 - x^5 $
plot2d ([F, G, H], [u, -1, 1], [y, -1.5, 1.5])$

15

График кривой в форме бабочки, заданный параметрически:

r: (exp(cos(t))-2*cos(4*t)-sin(t/12)^5)$
plot2d([parametric, r*sin(t), r*cos(t), [t, -8*%pi, 8*%pi]])$

16

График круга с использованием параметрического представления, вместе с функцией -|x|. Круг будет выглядить как круг если масштаб по обоим осям одинаковый, что достигается с помощью опции same_xy.

plot2d([[parametric, cos(t), sin(t), [t,0,2*%pi]], -abs(x)],
         [x, -sqrt(2), sqrt(2)], same_xy)$

17

Чертёж 200 случайных цифр между 0 и 9:

plot2d ([discrete, makelist ( random(10), 200)])$

18

График дискретного набора точек, раздельно заданных координатами x и y:

plot2d ([discrete, makelist(i*%pi, i, 1, 5),
                            [0.6, 0.9, 0.2, 1.3, 1]])$

19

В следующем примере таблица с тремя колонками сохраняется в файл "data.txt", который затем читается, и вторая и третья колонки выводятся по двум осям:

(%i1) with_stdout ("data.txt", for x:0 thru 10 do
                             print (x, x^2, x^3))$
(%i2) data: read_matrix ("data.txt")$
(%i3) plot2d ([discrete, transpose(data)[2], transpose(data)[3]],
  [style,points], [point_type,diamond], [color,red])$

20

График точек по дискретным данным вместе с непрерывной функцией:

xy: [[10, .6], [20, .9], [30, 1.1], [40, 1.3], [50, 1.4]]$
plot2d([[discrete, xy], 2*%pi*sqrt(l/980)], [l,0,50],
        [style, points, lines], [color, red, blue],
        [point_type, asterisk],
        [legend, "experiment", "theory"],
        [xlabel, "pendulum's length (cm)"],
        [ylabel, "period (s)"])$

21

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Добавить комментарий

Ваш адрес email не будет опубликован.

Поиск по сайту