Maxima graph

  1. Запуск ядра з командного рядка [ правити ]
  2. Команди побудови графіків [ правити ]
  3. Види функцій і приклади їх графіків [ правити ]
  4. Явна функція в полярних координатах [ правити ]
  5. Дискретні функції [ правити ]
  6. Читання і запис даних в файл [ правити ]
  7. Запис графіка в файл [ правити ]
  8. Опції оформлення [ правити ]
  9. Стилі графіків [ правити ]
  10. Згладжування графіків [ правити ]

Журнал ALT-review

Стаття-шпаргалка по побудові 2D графіків в системі комп'ютерної математики wxMaxima У цій замітці коротко описано побудову простих двовимірних графіків за допомогою системи комп'ютерної алгебри Maxima
Автор: And Розділ: практика Випуск: 01

Основу системи утворюють три стандартні програми:

  • maxima - математичне ядро з інтерфейсом командного рядка;
  • wxMaxima - графічний інтерфейс користувача;
  • gnuplot - потужна утиліта для побудови наукових графіків.

Розглянемо як з ними працювати.

Запуск ядра з командного рядка [ правити ]

Програма maxima, запущена з терміналу, не підтримує редагування набраних команд і прокручування історії, як, наприклад, інтерпретатор bash або python. Для зручності використання слід викликати її в readline-обгортці: rlwrap maxima. Обгортка rlwrap запускає maxima як дочірній процес, фільтрує введення-виведення і перенаправляє сигнали, реалізуючи відсутню функціональність.

Команди побудови графіків [ правити ]

Побудова графіків здійснює команда plot2d з аргументами у вигляді списку функцій, координат і необов'язкових опцій побудови:

plot2d ([f1, f2], [x, xmin, xmax], [y, ymin, ymax], [опція 1], [опція 2], [і т. Д.])

Графік виводиться в новому вікні засобами утиліти gnuplot. Щоб побудувати декількох графіків всередині документа wxMaxima, служить інша команда wxplot2d з тими ж опціями.

Функції f можуть бути:

  • явними виразами виду f (x);
  • залежними від параметра виду [parametric, x (t), y (t), [t, tmin, tmax]];
  • дискретним набором точок [discrete, point_list].

Види функцій і приклади їх графіків [ правити ]

Явна функція в прямокутних координатах [ правити ]

Намалюємо графіки функцій десяткового логарифма, косинуса, тангенса і кубічного кореня на відрізку від 0 до 2,5π:

(% I1) / * Визначимо десятковий логарифм через натуральний * / log10 (x): = log (x) / log (10) $ (% i2) / * Будуємо графіки * / plot2d ([log10 (x), cos (x ), tan (x), x ^ (1/3)], [x, 0, 2.5 *% pi], [y, -2, 3]) $

Результат показаний на Рис 1А. За замовчуванням кольору графіків зі списку функцій наступні:

1 - синій (blue), 2 - червоний (red), 3 - зелений (green), 4 - пурпурний (magenta), 5 - чорний (black), 6 - блакитний (cyan).

При більшій кількості графіків їх кольору циклічно повторюються.

Явна функція в полярних координатах [ правити ]

Для побудови треба визначити зв'язок між полярними радіусом r і кутом φ, а також використовувати опцію gnuplot set polar:

(% I1) r (ph): = sin (4 * ph); (% I2) plot2d ([r (ph)], [ph, 0, 2 *% pi], [x, -1,1], [y, -1,1], [gnuplot_preamble, "set polar"] );

Результат показаний на Рис. 1Б.


Кусково-лінійна функція може бути задана за допомогою оператора if then else виду:

if условіе1 then вираження1 else вираженіе2.

Наприклад, побудуємо графіки функцій Наприклад, побудуємо графіки функцій   і g (x) = sin (5x) -1: і g (x) = sin (5x) -1:

(% I1) f (x): = if x <- 2 then 8 else if x <0 then - x ^ 3 else x ^ 3 $ g: sin (5 * x) - 1 $ plot2d ([g, f] , [x, - 5, 2], [y, - 3, 10]);

Результат показаний на рис.2.

Функція, задана параметрично, будується за допомогою опції parametric.

Побудуємо фігуру Ліссажу в колі.

  • Рівняння кола x = 5 * cos (t), y = 5 * sin (t);
  • Рівняння фігури x = 3 * cos (4t), y = 3 * sin (3t).

(% I1) plot2d ([[parametric, 3 * cos (4 * t), 3 * sin (3 * t), [t, - 10, 10], [nticks, 300]], [parametric, 5 * cos (t), 5 * sin (t), [t, -% pi,% pi]]], [x, - 8, 8], [y, - 8, 8], [gnuplot_preamble, "set size ratio 1 "]) $

Результат показаний на рис.2б. Тут використані дві необов'язкові опції. Перша - nticks, яка задає число точок графіка, і друга опція програми gnuplot - set size ratio 1, що встановлює однакові масштаби по осях графіка (в іншому випадку замість окружності малюється еліпс).

Дискретні функції [ правити ]

Для виведення дискретних даних служить опція discrete. Дані можна задавати або у вигляді 2-х окремих списків аргументів [xi] і значень [yi] або у вигляді вкладеного списку з координатами точок [xi, yi]:

(% I1) xlist: [1,2,3,4,5,6,7] $ ylist: [0, 2, 2.6, 3, 2.5, 2, 1.8] $ xy: [[1, - 1], [2, 1], [3, 1.6], [4, 2], [5, 1.5], [6, 1], [7, 0.8]] $ (% i2) plot2d ([[discrete, xlist, ylist ], [discrete, xy]], [style, points, linespoints], [gnuplot_term, "png size 300, 200"], [gnuplot_out_file, "data. png"]);

Опція style задає вигляд графіків: у вигляді ліній, точок або ліній з точками.

Опція gnuplot_term з вибраними параметрами зберігає зображення в графіческескій файл формату png розміром 300 на 200 пікселів, gnuplot_out_file задає ім'я файлу.

Читання і запис даних в файл [ правити ]

Для запису списку даних в файл служить функція write_data (список, адреса, роздільник). Роздільником може бути кома - comma, вертикальна риса - pipe, крапка з комою - semicolon і пробіл - space (він прийнятий за замовчуванням). Наприклад, команда write_data (xy, "./ data.txt") запише в поточний каталог текстовий файл з ім'ям data.txt, що містить список координат точок, які будуть розділені пробілами.

Щоб отримати дані, служить функція read_nested_list (адреса, роздільник). Вона читає файл як список вкладених списків, утворених елементами чергового рядка. Простий список створюється командою read_list.

(% I3) data: read_nested_list ( "./ data.txt"); [[1, - 1], [2, 1], [3, 1.6], [4, 2], [5, 1.5], [6, 1], [7, 0.8]] (% i4) single: read_list ( "./ data.txt"); [1, - 1, 2, 1, 3, 1.6, 4, 2, 5, 1.5, 6, 1, 7, 0.8]

Зауважимо, що якщо вказати формат файлу csv (стандартний формат прийнятий для числових даних), то роздільником за замовчуванням стане кома, а не пробіл.

Запис графіка в файл [ правити ]

Для цього треба вказати тип графічного терміналу [gnuplot_term, тип] і ім'я вихідного фала [gnuplot_out_file, "ім'я"]. Тип може бути або ps (формат post script) або один з графічних форматів png, jpg і т.п. Якщо не вказувати ім'я вихідного файлу, то буде застосовано стандартне ім'я maxplot.

[Gnuplot_term, ps], [gnuplot_out_file, "data.eps"] - виводить зображення в форматі post script в файл data.eps [gnuplot_term, jpg] - зберігає зображення стандартного розміру в файл з ім'ям maxplot.jpg [gnuplot_term, "gif size 400,400 "], [gnuplot_out_file," data.gif "]) - створює gif файл розміром 400 на 400 піскселей.

Опції оформлення [ правити ]

Написи і заголовки [ правити ]

Назва графіка задається командою gnuplot всередині опції gnupot_preamble. Команди gnuplot пишуться всередині загальних лапок і відокремлюються один від одного крапкою з комою:

[gnuplot_preamble, "set title 'ім'я графіка';"];

Назви осей [xlabel, "ім'я для осі x"], [ylabel, "ім'я для осі у"];

Підписи кривих (легенда) [legend, "крива 1", "крива 2", "і т. Д."].

Легенда виводяться в правому верхньому куті, змінити її положення можна командою gnuplot set key:

set key bottom - внизу;

set key top left - угорі ліворуч;

set key bottom center outside - внизу по центру за межами графіка.

Пара зауважень про виведення російських написів при роботі wxMaxima в ALT Linux.

Кириличні літери в легенді значно збільшують її розміри, а команда wxplot2d не може відобразити російські літери, тому що не знаходить шрифт Arial. Для усунення останньої проблеми треба встановити в систему шрифти Microsoft, скомандував у консолі (від імені root): apt-get install fonts-ttf-ms.

Шкали й лінії сітки можна змінювати за допомогою наступних команд gnuplot [1]:

set grid - відображає сітку;

set grid polar df - задає радіальну сітку в полярній системі координат, df кут між її лініями в радіанах;

set xtics dx; set ytics dy - вказівка кроку між основними лініями сітки (по x крок = dx, по y крок = dy);

set border 3; set xtics nomirror - прибирає відображення осі х зверху;

set mxtics n - розбиває основні ділення шкали по осі х на n інтервалів;

set size ratio m - малює розмір осі y в m разів більше розміру осі х;

set log x; set log y - відображає шкали на осі координат в логарифмічному масштабі.

Приклад. Побудуємо графіки деяких спеціальних функцій: інтегрального косинуса Ci (x), інтегрального синуса Si (x), функції помилок erf (x) і додаткової функції помилок erfc (x):

(% I1) plot2d ([expintegral_ci (x), expintegral_si (x), erf (x), erfc (x)], [x, - 6, 6], [y, - 3, 3], [gnuplot_preamble, " set grid; set title 'Графіки спеціальних функцій'; set key bottom; set border 3; set xtics nomirror; set ytics nomirror; set mxtics 2; "], [xlabel," Аргумент x "], [ylabel," Значення y " ], [legend, "Ci (x)", "Si (x)", "erf (x)", "erfc (x)"]) $

Стилі графіків [ правити ]

Криві можна будувати у вигляді ліній lines, ліній з точками linespoints і точок points. Кольори можуть задаватися словесно або кодом згідно з таблицею:

Синій Червоний Зелений Пурпурний Чорний Блакитний blue red green magenta black cyan 1 2 3 4 5 6

Тип точок також може здаватися словесно або кодом:

● ○ + X * ■ □ ▲ Δ ▼ ∇ ♦ ◊ bullet circle plus times asterisk box square triangle delta wedge nabla diamond lozenge 1 2 3 4 5 6 7 8 9 10 11 12 13

Стиль кривої можна задавати словесно через послідовність опцій color, style, point_type або коротко за допомогою кодових параметрів.

Приклад: [color, red, black], [style, lines, points], [point_type, plus].

Лінії мають 2 параметра - товщина, колір.

У точки 3 параметра - розмір, колір, тип точки.

У ліній з точками 4 параметра - товщина лінії, розмір точки, колір, тип точки.

Той же приклад: [style, [lines, 1,2], [points, 3, 5, 3]].

Згладжування графіків [ правити ]

При побудові графіків у вигляді ліній з точками мітки часто розташовані занадто густо і криві виходять «волохатими». Це можна виправити підібравши параметри nticks (задає початкове число точок) і adapt_depth (число проходів алгоритму згладжування).

Для прикладу намалюємо графік іспускательной здатності (потужності випромінюваної одиницею поверхні в одиничному інтервалу частот) абсолютно чорного тіла r (T, ν).

Відповідно до формули Планка:

де T - температура, ν - частота, з - швидкість світла, h - постійна Планка, k - постійна Больцмана.

(% I1) / * Фізичні константи і формула * / k: 1.38e-23 $ h: 6.6e-34 $ c: 3e8 $ r (T, v): = 2 *% pi * h * v ^ 3 / ( c ^ 2 * (exp (h * v / (k * T)) - 1)); (% 2) plot2d ([r (3e2, v), r (1e3, v), r (6e3, v)], [v, 1e12,1e16], [y, 1e-15,1e-6], [ xlabel, "Частота, Гц"], [ylabel, "r (T, v), Дж / м ^ 2"], [legend, "T = 300 K", "T = 1000 K", "T = 6000 K "], [color, black], [style, linespoints], [point_type, bullet, circle, plus], [nticks, 50], [adapt_depth, 2], [gnuplot_preamble," set log x; set log y; set mxtics 10; set grid; set key left; set title 'іспускательной здатність абсолютно чорного тіла'; "]);

По можливості слід уникати розрахунків і побудов з дуже великими або малими величинами. В іншому випадку можуть виникнути проблеми з переповненням розрядів. Якщо в даному прикладі задати логарифмический масштаб не через опції gnuplot, а безпосередньо, як [logx], [logy], то Maxima відмовиться будувати графік внаслідок помилки переповнення.

  1. Е.А. Чічкарев. Комп'ютерна математика з Maxima. Керівництво для школярів і студентів. http://www.altlinux.org/Books:Maxima
  1. Записки Дебіанщіка. http://mydebianblog.blogspot.ru/search/label/гнуплот