WxMaxima

1 The wxMaxima user manual

WxMaxima — графічний інтерфейс користувача до системи комп’ютерної алгебри (СКА) Maxima. За допомогою WxMaxima можна користуватися усіма функціями Maxima. Крім того, у програмі передбачено зручні допоміжні програми для доступу до найпоширеніших можливостей СКА. У цьому підручнику наведено опис деяких можливостей, які роблять WxMaxima одним із найпопулярніших графічних інтерфейсів Maxima.

Перш ніж ми перейдемо до суті, декілька зауважень щодо навігації підручником. Нижче наведено коротку таблицю змісту. Натискання будь-якого з елементів у списку переведе курсор до початку відповідного розділу підручника. Натискання пункту Зміст переведе курсор до розширеної таблиці змісту. Цією розширеною таблицею можна скористатися для точнішого переходу до окремих частин підручника. У текст буде розташовано посилання на таблицю змісту з навігаційною метою.

Основи WxMaxima

Команди, які wxMaxima додає до Maxima

What to do if wxMaxima does not work as expected?

Поширені питання та відповіді на них

The command-line arguments wxMaxima supports.

How can you contribute to the development of wxMaxima?


2 Вступ до wxMaxima

2.1 Maxima і wxMaxima

У системі програмного забезпечення з відкритим кодом великі системи, зазвичай, діляться на менші проєкти, з якими простіше працювати невеликим групам розробників. Наприклад, програма для запису компакт-дисків складається з засобу командного рядка, який, власне, виконує запис компакт-диска, і графічного інтерфейсу користувача, за допомогою користувачі можуть виконати потрібні їм дії, не запам’ятовуючи параметрів командного рядка і, загалом, взагалі не маючи справи із командним рядком. Однією із переваг цього підходу є те, що робота з розробки засобу командного рядка може бути використана багатьма програмами: той самий засіб командного рядка для запису компакт-дисків можна використати у додатку надсилання даних на компакт-диск у програмі для керування файлами, для функції «записати на компакт-диск» у музичному програвачі та для запису компакт-диска у програмі для резервного копіювання на DVD. Ще однією перевагою є поділ одного великого завдання на менші частини, що надає змогу розробникам надавати декілька інтерфейсів користувача для однієї програми.

Система комп’ютерної алгебри (СКА), подібна до Maxima, дуже добре вкладається у цю схему. СКА може надавати логіку до програми-калькулятора із довільною точністю обчислень або може виконувати автоматичні перетворення форму у фоновому режимі для більших систем (наприклад, Sage). Крім того, нею можна користуватися і безпосередньо, як самостійною системою. Доступ до Maxima можна отримати з командного рядка. Втім, часто інтерфейси, подібні до wxMaxima, є набагато ефективнішим способом доступу до програмного забезпечення, особливо для початківців.

2.1.1 Maxima

Maxima є повноцінною системою комп’ютерної алгебри (СКА). СКА — програма, яка може розв’язувати математичні задачі перетворенням формул і визначенням формули, яка розв’язує задачу, замість простого виведення числової форми результату. Іншими словами, Maxima може слугувати калькулятором, який визначає числові значення змінних, а може давати аналітичні розв’язки. Крім того, у програмі передбачено багато обчислювальних методів для аналізу рівнянь і систем рівнянь, які не може бути розв’язано аналітично.

Знімок вікна Maxima, командний рядок

Із докладною документацією до Maxima можна ознайомитися у інтернеті. Доступ до частини цієї документації можна отримати з меню «Довідка» у wxMaxima. Якщо ви натиснете клавішу довідки (у більшості систем це клавіша F1), використання контекстної довідки wxMaxima відкриє для вас сторінку підручника з Maxima із довідкою щодо команди, у якій перебуває курсор.

2.1.2 WxMaxima

wxMaxima — графічний інтерфейс користувача, який надає доступ до усіх функціональних можливостей і гнучкості Maxima. wxMaxima надає у розпорядження користувачам графічні засоби роботи та можливості, які значно спрощують роботу з Maxima. Наприклад, у wxMaxima передбачено можливість експортування вмісту будь-якої комірки (або, якщо це потрібно, будь-якої частини формули) у форматі тексту, коду LaTeX або специфікації MathML простим клацанням правою кнопкою миші. Насправді, можна експортувати увесь робочий аркуш у форматі HTML або коду LaTeX. Із документацією до wxMaxima, зокрема робочими книгами для ілюстрації аспектів користування, можна ознайомитися на сайті довідки wxMaxima, а також за допомогою меню «Довідка».

Вікно wxMaxima

Обчислення, які ви наказуєте виконати wxMaxima у фоновому режимі передаються інструментам командного рядка Maxima.

2.2 Основи роботи із книгою

Призначення більшої частини інтерфейсу wxMaxima є очевидним, але деякі речі потребують більшої уваги. На цьому сайті можна знайти декілька робочих книг, які присвячено різноманітним аспектами роботи у wxMaxima. Опрацювання деяких з цих зразків (зокрема «Десятихвилинного підручника з (wx)Maxima») надасть змогу краще ознайомитися із роботою Maxima і використанням wxMaxima для взаємодії із Maxima. У цьому ж підручнику ми зосередимо увагу на описі тих аспектів wxMaxima, які, ймовірно, є неочевидними і про які немає відомостей у інтернет-підручнику.

2.2.1 Використання робочих книг

Однією із дуже небагатьох речей, які є нестандартними у wxMaxima є те, що дані для Maxima у програмі впорядковано за комірками, які обчислюються (тобто надсилаються до Maxima) лише на запит користувача. При обчисленні комірки усі команди у ній, і лише у ній, обчислюються пакетно. (Попереднє твердження є не зовсім точним: можна позначити набір сусідніх комірок і обчислити їх разом. Крім того, можна наказати Maxima обчислити усі комірки у робочій книзі одразу.) Підхід wxMaxima до надсилання команд на виконання може спочатку видатися незвичним. Втім, він значно спрощує роботу із великими документами (у яких користувач не хоче, щоб програма автоматично вмикала повне переобчислення усього документа у відповідь на будь-яку зміну). Крім того, такий підхід є дуже зручним для усування вад.

Якщо ви почнете вводити якийсь текст у вікні wxMaxima, програма автоматично створить нову комірку робочого аркуша. Тип цієї комірки можна вибрати за допомогою панелі інструментів. Якщо створено комірку з кодом, її вміст може бути надіслано до Maxima. Результат обчислень буде показано під рядком коду. Пару таких команд показано нижче.

Комірка введення-виведення

On evaluation of an input cell’s contents the input cell Maxima assigns a label to the input (by default shown in red and recognizable by the %i) by which it can be referenced later in the wxMaxima session. The output that Maxima generates also gets a label that begins with %o and by default is hidden, except if the user assigns the output a name. In this case by default the user-defined label is displayed. The %o-style label Maxima auto-generates will also be accessible, though.

Окрім комірок для вхідних даних, у wxMaxima передбачено комірки для документації, комірки зображень, комірки заголовків, комірки глав та комірки розділів. У кожної комірки є власний буфер скасовування дій, тому дуже просто діагностувати проблеми, змінюючи значення у комірках і поступово скасовуючи внесені зміни у різних комірках. Крім того, у самого робочого аркуша також є власний буфер скасовування дій, яким може скористатися для скасовування редагувань у комірках, додавання і вилучення комірок.

На рисунку нижче показано різні типи комірок (комірки заголовків, комірки розділів, комірки підрозділів, текстові комірки, комірки введення-виведення та комірки зображення).

Приклад різних комірок wxMaxima

2.2.2 Комірки

Робочий аркуш складається з комірок. У wxMaxima передбачено такі типи комірок:

Типовою поведінкою wxMaxima при введенні тексту є автоматичне створення комірки формули. Комірки інших типів можна створити за допомогою меню «Комірка», натискання клавіатурних скорочень для пунктів з цього меню або за допомогою спадного списку на панелі інструментів. Після створення нематематичної комірки усе, що введено у файл, вважатиметься текстом.

Текст коментаря (у стилі C) може бути частиною математичної комірки ось так: /* Цей коментар буде проігноровано Maxima */

«/*» позначає початок коментаря, «*/» — його кінець.

2.2.3 Горизонтальний і вертикальний курсори

Якщо користувач намагається позначити ціле речення, текстовий процесор намагається розширити позначений фрагмент так, щоб він автоматично завершувався на початку і наприкінці слів. Так само, wxMaxima, якщо позначено декілька комірок, доповнюватиме позначений фрагмент до меж комірок.

Нестандартною особливістю є те, що у wxMaxima передбачено гнучку систему перетягування зі скиданням, у якій визначено два типи курсорів. wxMaxima автоматично перемикатиметься між ними, коли у цьому виникатиме потреба:

Після запуску wxMaxima, ви побачите лише горизонтальний курсор, який блиматиме. Якщо ви почнете щось вводити, буде автоматично створено математичну комірку, а курсор буде замінено на звичайний вертикальний (ви побачите стрілку праворуч як «запит», а після обчислення вмісту математичної комірки (Ctrl+Enter) ви побачите мітки, наприклад (%i1), (%o1)).

Горизонтальний курсор після запуску wxMaxima

Ви можете створити комірки іншого типу (за допомогою меню «Комірка»), можливо, комірку заголовка та текстову комірку, яка описуватиме виконану математичну дію, коли почнете створення вашого робочого аркуша.

Якщо ви переходитимете між різними комірками програма також показуватиме горизонтальний курсор, що блиматиме. На місці курсора ви можете вставити комірку до робочого аркуша (математичну комірку простим введенням формули або комірку іншого типу за допомогою меню).

Горизонтальний курсор між комірками

2.2.4 Надсилання комірок для обчислення у Maxima

Команду у комірці буде виконано одразу після натискання комбінацій клавіш CTRL+ENTER, SHIFT+ENTER або клавіші ENTER на клавіатурі. Типовим для wxMaxima є введення команд за допомогою CTRL+ENTER або SHIFT+ENTER, але wxMaxima можна налаштувати на виконання команд у відповідь на натискання ENTER.

2.2.5 Автоматичне доповнення команд

У wxMaxima реалізовано можливість автоматичного доповнення коду, якою можна скористатися за допомогою меню (Комірка/Доповнити слово) або натисканням комбінації клавіш CTRL+Пробіл. Автоматичне доповнення є чутливим до регістру символів. Наприклад, якщо його активувати зі специфікацією модулів для ezUnits, воно запропонує список відповідних модулів.

ezUnits

Окрім доповнення, назви файла, назви модуля або назви поточної команди чи змінної, засіб автоматичного доповнення може показувати шаблони для більшості команд, вказуючи тип (і значення) параметрів, які очікує отримати відповідна програма. Щоб задіяти цю можливість, натисніть комбінацію клавіш SHIFT+CTRL+ПРОБІЛ або виберіть відповідний пункт меню (Комірка/Показати шаблон).

2.2.5.1 Грецькі літери

Комп’ютери традиційно зберігають символи у форматі 8-бітових значень. Це уможливлює існування наборів, що складаються лише із 256 різних символів. У такий набір може бути включено усі літери, цифри та символи керування (завершення передавання, кінець рядка, лінії та кутики для малювання меню тощо) майже будь-якої європейської мови.

Втім, у більшості мов до вибраної кодової сторінки із 256 символів не можна включити додаткові символи, зокрема літери грецької абетки, які широко використовуються у математичних формулах. Щоб подолати обмеження подібного типу, було винайдено Юнікод — кодування, яке працює для латиниці, але використовує набагато більше за 256 символів.

Maxima уможливлює використання символів Юнікоду, якщо програму було зібрано за допомогою компілятора Lisp, у якому передбачено підтримку Юнікоду або такого, який є нейтральним щодо кодування символів. Оскільки, хоча б одна з цих вимог, зазвичай, справджується, у wxMaxima реалізовано спосіб введення грецьких символів з клавіатури:

key Greek letter key Greek letter key Greek letter
a alpha i iota r rho
b beta k kappa s sigma
g gamma l lambda t tau
d delta m mu u upsilon
e epsilon n nu f phi
z zeta x xi c chi
h eta om omicron y psi
q theta p pi o omega
A Alpha I Iota R Rho
B Beta K Kappa S Sigma
G Gamma L Lambda T Tau
D Delta M Mu U Upsilon
E Epsilon N Nu P Phi
Z Zeta X Xi C Chi
H Eta Om Omicron Y Psi
T Theta P Pi O Omega

You can also use the “Greek letters”-sidebar to enter the Greek letters.

Attention: Lookalike characters

Several Latin letters look like the Greek letters, e.g. the Latin letter “A” and the Greek letter “Alpha”. Although they look identical, they are two different Unicode characters, represented by different Unicode code points (numbers).

This might be problematic, if you assign a value to the Variable A and later use the Greek letter Alpha to do something with this variable, especially on printouts. For the greek letter my (which is also used as prefix for micro) there are also two different unicode code points.

The “Greek letters”-sidebar therefore has the option, that lookalike characters are not available (which can be changed using a right-click menu).

У той самий спосіб можна вводити різноманітні математичні символи:

keys to enter mathematical symbol
hbar Planck’s constant: a h with a horizontal bar above it
Hbar a H with a horizontal bar above it
2 squared
3 to the power of three
/2 1/2
partial partial sign (the d of dx/dt)
integral integral sign
sq square root
ii imaginary
ee element
in in
impl implies implies
inf infinity
empty empty
TB big triangle right
tb small triangle right
and and
or or
xor xor
nand nand
nor nor
equiv equivalent to
not not
union union
inter intersection
subseteq subset or equal
subset subset
notsubseteq not subset or equal
notsubset not subset
approx approximately
propto proportional to
neq != /= or # not equal to
+/- or pm a plus/minus sign
<= or leq equal or less than
>= or geq equal or greater than
<< or ll much less than
>> or gg much greater than
qed end of proof
nabla a nabla operator
sum sum sign
prod product sign
exists there exists sign
nexists there is no sign
parallel a parallel sign
perp a perpendicular sign
leadsto a leads to sign
-> a right arrow
–> a long right arrow

You can also use the “Symbols”-sidebar to enter these Mathematical symbols.

If a special symbol isn’t in the list, it is possible to input arbitrary Unicode characters by pressing ESC [number of the character (hexadecimal)] ESC. Additionally the “symbols” sidebar has a right-click menu that allow to display a list of all available unicode symbols one can add to this toolbar or to the worksheet.

Отже, ESC 61 ESC дасть «a».

Будь ласка, зауважте, що більшість цих символів (виключеннями є логічні символи) не мають спеціального значення у Maxima і тому можуть бути оброблені як звичайні символи. Якщо Maxima зібрано із Lisp, у якому не передбачено обробки символів Юнікоду, використання цих символів може призвести до показу повідомлення про помилку.

It may be the case that e.g. Greek characters or mathematical symbols are not included in the selected font, then they can not be displayed. To solve that problem, select other fonts (using: Edit -> Configure -> Style).

2.2.6 Unicode replacement

wxMaxima will replace several Unicode characters with their respective Maxima expressions, e.g. “²” with “^2”, “³” with “^3”, the square root sign with the function sqrt(), the (mathematical) Sigma sign (which is not the same unicode character as the corresponding greek letter) with sum(), etc.

2.2.7 Бічні панелі

Доступ до найважливіших команд Maxima або речей, подібних до таблиці змісту, вікон із діагностичними повідомленнями або журналу останніх виданих команд можна отримати за допомогою бічних панелей. Увімкнути бічні панелі можна за допомогою меню «Перегляд». Панелі можна пересувати як всередині вікна wxMaxima, так і ззовні. Ще однією корисною панеллю є панель введення грецьких літер за допомогою вказівника миші.

Приклад різних бічних панелей

За допомогою бічної панелі «Зміст» можна збільшити або зменшити рівень заголовка: просто клацніть на заголовку правою кнопкою миші і виберіть наступний більший або менший рівень заголовка.

Збільшення або зменшення рівня заголовка за допомогою бічної панелі «Зміст»

2.2.8 Виведення коду MathML

Several word processors and similar programs either recognize MathML input and automatically insert it as an editable 2D equation - or (like LibreOffice) have an equation editor that offers an “import MathML from clipboard” feature. Others support RTF maths. WxMaxima, therefore, offers several entries in the right-click menu.

2.2.9 Підтримка Markdown

У wxMaxima ви зможете скористатися стандартними варіантами Markdown, які не суперечать математичним позначенням. Одним із елементів розмітки є невпорядковані списки.

Звичайний текст
 * Один пункт, рівень відступу 1
 * Інший пункт на рівні відступу 1
   * Пункт на другому рівні відступу
   * Другий пункт на другому рівні відступу
 * Третій пункт на першому рівні відступу
Звичайний текст

У wxMaxima фрагменти тексту, які розпочинаються з символів > вважаються блоками цитат:

Звичайний текст
> цитата цитата цитата цитата
> цитата цитата цитата цитата
> цитата цитата цитата цитата
Звичайний текст

У коді TeX та HTML wxMaxima також розпізнається рядок =>, який програма замінює на відповідний символ Юнікод:

cogito => sum.

Іншими символами, які буде розпізнано під час експортування до HTML або TeX, є <= і >= для порівнянь, двобічна стрілка (<=>), одинарні стрілки (<->, -> і <-), а також +/- як відповідний знак. Для експортування у код TeX передбачено також підтримку перетворення << і >>.

2.2.10 Клавіатурні скорочення

Більшість клавіатурних скорочень можна знайти у тексті відповідних меню. Оскільки їх взято з тексту меню і, отже, може бути змінено під час перекладу wxMaxima так, щоб вони відповідали потребам користувачів локалізованих клавіатур, ми не наводимо їх у цьому підручнику. Втім, декілька клавіатурних скорочень все ж не документовано у меню:

2.2.11 Код TeX у експортованому TeX

Якщо текстову комірку буде розпочато з TeX: у експортованих у форматі TeX даних буде буквально відтворено текст, який вказано після позначки TeX:. За допомогою цієї можливості можна використовувати розмітку TeX у робочій книзі wxMaxima.

2.3 Формати файлів

Матеріал, який було отримано під час сеансу роботи у wxMaxima може бути збережено для наступного використання у три способи:

2.3.1 .mac

Файли .mac є звичайними текстовими файлами, які містять команди Maxima. Їх можна прочитати за допомогою команди batch() або load() Maxima або пункту меню «Файл/Пакетний файл».

Один з прикладів наведено нижче. Quadratic.mac визначає функцію і після цього створює креслення за допомогою wxdraw2d(). Далі, буде виведено вміст файла Quadratic.mac і виконано обчислення нової визначеної функції f().

Loading a file with batch()

Увага! Хоча назва файла Quadratic.mac містить звичайний для Maxima суфікс (.mac), прочитати дані з нього зможе лише wxMaxima, оскільки команда wxdraw2d() є wxMaxima-розширенням до Maxima.

Ви можете використовувати файли .mac для написання власної бібліотеки макросів. Але оскільки у них не міститься достатніх даних щодо структури, їх не можна читати як сеанс wxMaxima.

2.3.2 .wxm

Файли .wxm містять дані робочого аркуша, окрім виведених даних Maxima. У версіях Maxima >5.38 їх можна прочитати за допомогою функції load() Maxima, так само, як можна прочитати файли .mac. У цьому текстовому форматі іноді є неусувна проблема — робочі аркуші із новими можливостями не є зворотно сумісними із застарілими версіями wxMaxima.

2.3.3 .wxmx

У цьому заснованому на XML форматі файлів зберігається увесь робочий аркуш, включно із даними щодо масштабу та списком спостереження. Цей формат файлів є рекомендованим.

2.4 Параметри налаштування

Для деяких типових змінних налаштувань у wxMaxima передбачено два способи налаштовування:

Налаштування wxMaxima 1

2.4.1 Типова частота кадрів анімації

Частота кадрів анімації, яка використовуватиметься для нових анімацій, зберігається у змінній wxanimate_framerate. Початкове значення цієї змінної, яке міститиметься у новому робочому аркуші, можна змінити за допомогою діалогового вікна налаштовування.

2.4.2 Типовий розмір креслення для нових сеансів maxima

Після наступного запуску креслення, які вбудовано до робочого аркуша, буде створено з цим розміром, якщо значення wxplot_size не було змінено maxima.

Щоб встановити розмір графіка для окремого графіка, можна скористатися наведеною нижче конструкцією, яка встановить значення змінної лише для одної команди:

wxdraw2d(
   explicit(
       x^2,
       x,-5,5
   )
), wxplot_size=[480,480]$

2.4.3 Перевіряти баланс дужок у тексті

За допомогою цього пункту можна увімкнути дві речі:

2.4.4 Не зберігати робочий аркуш автоматично

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

Якщо не встановлено цей параметр, wxMaxima поводиться подібно до сучасної програми для мобільних телефонів:

2.4.5 Де зберігаються налаштування?

If you are using Unix/Linux, the configuration information will be saved in a file .wxMaxima in your home directory (if you are using wxWidgets < 3.1.1), or .config/wxMaxima.conf ((XDG-Standard) if wxWidgets >= 3.1.1 is used). You can retrieve the wxWidgets version from the command wxbuild_info(); or by using the menu option Help->About. wxWidgets is the cross-platform GUI library, which is the base for wxMaxima (therefore the wx in the name). (Since the filename starts with a dot, .wxMaxima or .config will be hidden).

Якщо ви користуєтеся Windows, налаштування буде збережено у реєстрі. Записи wxMaxima можна знайти у цій гілці: HKEY_CURRENT_USER\Software\wxMaxima


3 Розширення Maxima

Основним призначенням wxMaxima є забезпечення графічного інтерфейсу до Maxima. Отже, основним завданням програми є передавання команд до Maxima і сповіщення користувача про результат виконання цих команд. Втім, у деяких випадках, wxMaxima розширює функціональні можливості Maxima. Ми вже згадували про здатність wxMaxima створювати звіти експортуванням вмісту робочої книги до файлів HTML і LaTeX. У цьому розділі ми розглянемо деякі способи, у які wxMaxima удосконалює включення графіки до сеансу.

3.1 Змінні із індексами

wxsubscripts визначає, чи wxMaxima виконуватиме автоматичне перетворення нижніх індексів у назвах змінних (і як вона це робитиме):

Якщо має значення false, функціональну можливість буде вимкнено, wxMaxima не виконуватиме автоматичного перетворення частини назв змінної після символу підкреслення.

Якщо встановлено значення all, усе після символу підкреслення буде перетворено на нижній індекс.

Якщо встановлено значення true для wxsubscripts, назви змінних у форматі x_y буде показано як літеру із нижнім індексом, якщо

Автоматичне перетворення нижніх індексів з використанням wxsubscripts

Якщо назва змінної не задовольняє ці вимоги, змінну все одно можна оголосити як змінну із нижнім індексом, за допомогою команди wxdeclare_subscript(назва_змінної); або wxdeclare_subscript([назва_змінної1,назва_змінної2,...]); Оголошення змінної як змінної із нижнім індексом можна скасувати за допомогою такої команди: wxdeclare_subscript(назва_змінної,false);

Для встановлення цих значень ви можете скористатися меню «Перегляд->Автоматичне переведення у нижній індекс».

3.2 Візуальний супровід дій користувача у смужці стану

Команди, які виконуються довго, можуть надавати користувачам інформацію на смужці стану. Цю інформацію буде замінено на будь-яку нову інформацію, яку програма надсилатиме туди (це надає змогу використовувати смужку стану як індикатор поступу), і буде вилучено, щойно буде завершено виконання поточної команди, яку надіслано до Maxima. Команду wxstatusbar() можна безпечно використовувати навіть у бібліотеках, які може бути використано у звичайній Maxima (без wxMaxima): якщо wxMaxima немає, команда wxstatusbar() просто не оброблятиметься.

for i:1 thru 10 do (
    /* Повідомляємо користувачу, наскільки далеко зайшли */
    wxstatusbar(concat("Pass ",i)),
    /* (sleep n) — функція Lisp, якою можна скористатися */
    /* із додаванням перед нею символу «?». Команда затримує */
    /* виконання програми (у нашому прикладі, на 3 секунди) */
    ?sleep(3)
)$

3.3 Креслення

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

3.3.1 Вбудовування креслення до робочого аркуша

Maxima normally instructs the external program gnuplot to open a separate window for every diagram it creates. Since many times it is convenient to embed graphs into the worksheet instead wxMaxima provides its own set of plot functions that don’t differ from the corresponding maxima functions save in their name: They are all prefixed by a “wx”.

The following plotting functions have wx-counterparts:

wxMaxima’s plot function Maxima’s plot function
wxplot2d() plot2d
wxplot3d() plot3d
wxdraw2d() draw2d
wxdraw3d() draw2d
wxdraw() draw
wximplicit_plot() implicit_plot
wxhistogram() histogram
wxscatterplot() scatterplot
wxbarsplot() barsplot
wxpiechart() piechart
wxboxplot() boxplot

If a wxm-file is read by (console) Maxima, these functions are ignored (and printed as output, as other unknown functions in Maxima).

3.3.2 Збільшення або зменшення вбудованих креслень

Як ми вже згадували вище, діалогове вікно налаштовування надає змогу змінити типові розміри креслень. Унаслідок застосування цього способу змінюється початкове значення wxplot_size. Підпрограми створення креслень wxMaxima враховують це значення, яке визначає розмір креслення у пікселях. Це значення завжди можна отримати або використати для встановлення розмірів наступних креслень:

wxplot_size:[1200,800]$
wxdraw2d(
    explicit(
        sin(x),
        x,1,10
    )
)$

Якщо потрібно змінити розміри лише одного креслення, у Maxima передбачено канонічний спосіб зміни атрибута лише для поточної комірки. У цьому випадку до команди wxdraw2d( ) додається специфікація wxplot_size = [значення1, значення2], яка не є частиною команди wxdraw2d.

wxdraw2d(
    explicit(
        sin(x),
        x,1,10
    )
),wxplot_size=[1600,800]$

Встановлення розміру вбудованого креслення за допомогою wxplot_size працює для вбудованих креслень, які використовують, наприклад, команди wxplot, wxdraw, wxcontour_plot і wximplicit_plot, і для вбудованих анімацій, які використовують команди with_slider_draw і wxanimate.

3.3.3 Креслення кращої якості

Gnuplot, здається, не надає придатного до портування на різні платформи способу визначення, чи передбачено у програмі підтримку виведення даних у форматі високоякісного растрового зображення з використанням бібліотеки cairo. У системах, де gnuplot зібрано з використанням відповідної бібліотеки, пункт pngCairo у меню налаштовування (який може бути перевизначено за допомогою змінної wxplot_pngcairo) вмикає підтримку згладжування та додаткових стилів ліній. Якщо встановлено wxplot_pngCairo без підтримки у gnuplot, результатом буде повідомлення про помилку замість графіка.

3.3.4 Відкриття вбудованих креслень в інтерактивних вікнах gnuplot

Якщо креслення було створено за допомогою команд типу wxdrawwxplot2d і wxplot3d підтримки цієї можливості не передбачено), і розмір файла базового проєкту gnuplot не є надто великим, wxMaxima пропонує контекстне меню, за допомогою якого можна відкрити креслення у інтерактивному вікні gnuplot.

3.3.5 Відкриття консолі команд gnuplot у вікнах plot

У MS Windows, якщо у змінній Maxima gnuplot_command замінити «gnuplot» на «wgnuplot», gnuplot запропонує можливість відкрити вікно консолі, у якому ви зможете вводити команди gnuplot. На жаль, вмикання цієї можливості призводить до того, що gnuplot на короткий період «викрадає» фокусування клавіатури кожного разу, коли готується креслення.

3.3.6 Вбудовування анімацій до робочого аркуша

На просторових креслення доволі важко читати кількісні дані. Альтернативним рішенням є прив’язка третього параметра до коліщатка миші. Команда with_slider_draw є версією wxdraw2d, яка готує декілька креслень і надає змогу перемикатися між ними пересуванням повзунка у верхній частині вікна. WxMaxima надає змогу експортувати анімацію у форматі анімації gif.

Першими двома аргументами with_slider_draw є назва змінної, яка покроково змінюватиметься між кресленнями, і список значень цієї змінної. Наступними аргументами є звичайні аргументи wxdraw2d:

with_slider_draw(
    f,[1,2,3,4,5,6,7,10],
    title=concat("f=",f,"Hz"),
    explicit(
        sin(2*%pi*f*x),
        x,0,1
    ),grid=true
);

Доступ до тих самих можливостей для просторових креслень можна отримати за допомогою функції with_slider_draw3d, яка надає можливість обертати просторові креслення:

wxanimate_autoplay:true;
wxanimate_framerate:20;
with_slider_draw3d(
    α,makelist(i,i,1,360,3),
    title=sconcat("α=",α),
    surface_hide=true,
    contour=both,
    view=[60,α],
    explicit(
        sin(x)*sin(y),
        x,-π,π,
        y,-π,π
    )
)$

Якщо важливою є загальна форма креслення, може бути достатнім трошки пересунути креслення з метою зробити його просторову природу інтуїтивно зрозумілою:

wxanimate_autoplay:true;
wxanimate_framerate:20;
with_slider_draw3d(
    t,makelist(i,i,0,2*π,.05*π),
    title=sconcat("α=",α),
    surface_hide=true,
    contour=both,
    view=[60,30+5*sin(t)],
    explicit(
        sin(x)*y^2,
        x,-2*π,2*π,
        y,-2*π,2
    )
)$

Для тих, хто знайомий більше з plot, аніж з draw, другий набір функцій:

Зазвичай, анімації відтворюються і експортуються із частотою кадрів, яку можна вибрати у налаштуваннях wxMaxima. Щоб встановити швидкість відтворення окремої анімації, можна скористатися змінною wxanimate_framerate:

wxanimate(a, 10,
    sin(a*x), [x,-5,5]), wxanimate_framerate=6$

Функції анімації використовують команду maxima makelist і тому мають спільну ваду — значення змінної повзунка замінюється на вираз, лише якщо змінна є безпосередньо видимою у виразі. Тому такий приклад не працюватиме:

f:sin(a*x);
with_slider_draw(
    a,makelist(i/2,i,1,10),
    title=concat("a=",float(a)),
    grid=true,
    explicit(f,x,0,10)
)$

А якщо Maxima явно попросити підставити значення повзунка, креслення працюватиме як слід:

f:sin(a*x);
with_slider_draw(
    b,makelist(i/2,i,1,10),
    title=concat("a=",float(b)),
    grid=true,
    explicit(
        subst(a=b,f),
        x,0,10
    )
)$

3.3.7 Відкриття декількох креслень у вікнах одночасно

Хоча wxMaxima не надає доступу до цієї можливості, ця функція Maxima (у конфігураціях, де передбачено її підтримку) іноді є дуже зручною. Наведений нижче приклад походить із допису Маріо Родрігеса (Mario Rodriguez) у списку листування Maxima:

    load(draw);

    /* Парабола у вікні 1 */
    draw2d(terminal=[wxt,1],explicit(x^2,x,-1,1));

    /* Парабола у вікні 2 */
    draw2d(terminal=[wxt,2],explicit(x^2,x,-1,1));

    /* Параболоїд у вікні 3 */
    draw3d(terminal=[wxt,3],explicit(x^2+y^2,x,-1,1,y,-1,1));

Також можна накреслити декілька креслень в одному вікні:

    wxdraw(
        gr2d(
            key="sin (x)",grid=[2,2],
            explicit(sin(x),x,0,2*%pi)),
        gr2d(
        key="cos (x)",grid=[2,2],
        explicit(cos(x),x,0,2*%pi))
     );

3.3.8 Бічна панель «Накреслити за допомогою Draw»

Бічна панель «Накреслити за допомогою Draw» приховує простий генератор коду, який уможливлює створення сцен, які використовують певну гнучкість пакунка draw, з яким постачається maxima.

3.3.8.1 Двовимірний

Створює каркас команди draw(), яка малює плоску сцену. Цю сцену пізніше може бути заповнено за допомогою команд, які створюють вміст сцени, наприклад, за допомогою кнопок у рядках під кнопкою «Плоский».

Однією з корисних можливостей кнопки «Плоский» є те, що вона надає змогу налаштувати сцену як анімацію, у якій змінна (типовою змінною є t) має різне значення для кожного з кадрів: часто динамічне плоске креслення надає змогу простіше інтерпретувати дані за ті самі у формі нерухомого просторового креслення.

3.3.8.2 Тривимірний

Створює каркас команди draw(), яка малює просторову сцену. Якщо не налаштовано ні двовимірну, ні тривимірну сцену, усі інші кнопки налаштовуватимуть двовимірну сцену, яка містить команду, яку створює кнопка.

3.3.8.3 Вираз

Додає стандартне креслення виразу, подібного до sin(x), x*sin(x) або x^2+2*x-4 до команди draw(), у якій зараз перебуває курсор. Якщо команди draw немає, буде створено двовимірну сцену із кресленням. Кожну сцену можна заповнити довільною кількістю креслень.

3.3.8.4 Графік неявної функції

Спробувати знайти усі точки, у яких справджуються вирази, подібні до y=sin(x), y*sin(x)=3 або x^2+y^2=4, і накреслити криву-результат за допомогою команди draw() у поточній позиції курсора. Якщо команди draw виявлено не буде, буде створено плоску сцену із кресленням.

3.3.8.5 Графік параметричної функції

Покроково проходить змінну від нижньої межі до верхньої межі і використовує два виразу, подібні до t*sin(t) і t*cos(t) для створення координат точок x, y (у просторових кресленнях використовується і z) кривої, які буде передано до поточної команди draw.

3.3.8.6 Точки

Малює точки, які, якщо вказано, буде з’єднано. Координати точок буде взято зі списку списків, двовимірного масиву або списку масивів для кожної з осей.

3.3.8.7 Заголовок діаграми

Малює заголовок у верхній частині діаграми,

3.3.8.8 Вісь

Налаштовує вісі.

3.3.8.9 Контур

(Лише для просторових креслень) Додає контурні лінії, подібні до тих, які можна знайти на карті висот, до команд креслення, які йдуть за нею у поточній команді «draw()» і/або до площини основи діаграми. Крім того, цей майстер надає змогу повністю пропустити малювання кривих і показати лише контурне креслення.

3.3.8.10 Назва графіка

Додає запис умовних позначень із назвою наступного креслення на панель умовних позначень діаграми. Порожнє значення назви вимикає створення записів умовних позначень для наступних креслень.

3.3.8.11 Колір лінії

Встановлює колір лінії для наступних креслень у поточній команді малювання.

3.3.8.12 Колір заповнення

Встановлює колір заповнення для наступних креслень у поточній команді малювання.

3.3.8.13 Сітка

Відкриває допоміжне вікно, за допомогою якого можна налаштувати лінії сітки.

3.3.8.14 Точність

Надає змогу вибрати адекватну позицію у компромісному питанні «швидкість чи точність?», яке є частиною будь-якої програми для креслення.

3.4 Вбудовування графіків

Якщо використано формат файлів .wxmx, вбудовування файлів до проєкту wxMaxima можна виконати простим перетягуванням зі скиданням. Але іноді (наприклад, якщо вміст зображення може бути змінено згодом протягом роботи у сеансі), краще наказати програмі завантажувати файл зображення при обробці команд:

show_image("man.png");

3.5 Файли запуску

У діалоговому вікні налаштовування wxMaxima передбачено можливість редагування двох файлів із командами, які виконуються під час запуску програми:

Ці файли зберігаються у каталозі користувача Maxima (зазвичай, каталозі maxima у Windows, .maxima/ у інших системах) у домашній теці користувача. Розташування файлів можна визначити за допомогою такої команди: maxima_userdir;

3.6 Спеціальні змінні wx…

3.7 Структурний друк двовимірних даних

Функція table_form() показує двовимірний список у формі, яка є зручнішою для читання, за виведені дані типової підпрограми виведення даних Maxima. Вхідними даними є список одного або декількох списків. Подібно до команди друку, ця команда виводить дані, навіть якщо її завершити символом долара. Завершення команди символом крапки з комою призводить до виведення тієї самої таблиці разом із інструкцією «done».

table_form(
    [
        [1,2],
        [3,4]
    ]
)$

Як показує наступний приклад, списки, які зібрано командою table_form, можна створювати до виконання команди.

Третій приклад таблиці

Крім того, оскільки матриця — список списків, матриці можна перетворювати на таблиці у подібний же спосіб.

Ще один приклад table_form

3.8 Звітування про вади

У wxMaxima передбачено декілька функцій, які збирають дані щодо поточної системи для звітування щодо вад:

3.9 Як зробити так, щоб виведені дані було показано червоним кольором?

Команда box() Maxima призводити до того, що wxMaxima виводить її аргумент червоним кольором, якщо другим аргументом команди є текст highlight.


4 Вирішення проблем

4.1 Не вдається з’єднатися із Maxima

Оскільки Maxima (програма, яка виконує самі обчислення) і wxMaxima (програма, яка надає простий у користуванні інтерфейс користувача) є окремими програмами, які обмінюються даними за допомогою з’єднання локальною мережею. Тому найімовірнішою причиною є те, що це з’єднання чомусь не працює. Наприклад, брандмауер може бути налаштовано таким чином, що він не просто запобігає неуповноваженим з’єднання з інтернету (і, можливо, також перехоплює з’єднання із інтернетом), але і блокує обмін даними між процесами на тому самому комп’ютері. Зауважте, що оскільки Maxima виконується процесором Lisp, процес. із яким блокується обмін даними, не обов’язково називається «maxima». Типовими назвами програм, які відкривають з’єднання мережі, можуть бути sbcl, gcl, ccl, lisp.exe або щось подібне.

У системах Unix іншою можливою причиною є те, що петльову мережу, яка забезпечує з’єднання мережі між двома програмам, які працюють на одному комп’ютері, не налаштовано належним чином.

4.2 Як зберегти дані із пошкодженого файла .wxmx

На внутрішньому рівні більшість сучасних форматів на основі XML є звичайними файлами zip. wxMaxima не увімкнула стискання, що робить вміст файлів .wxmx придатним до перекладу у будь-якому текстовому редакторі.

Якщо підпис zip наприкінці файла є неушкодженим після перейменовування пошкодженого файла .wxmx на .zip, у більшості операційних систем передбачено спосіб видобування будь-якої частини даних, яка у ньому зберігається. Виконати таке видобування можна, якщо потрібно відновити початкові файли зображень з документа текстового процесора. Якщо підпис zip пошкоджено, це ще не кінець світу: якщо wxMaxima під час збереження виявила якусь помилку, має ще бути файл .wxmx~, чий вміст може допомогти у відновленні даних.

І навіть якщо такого файла не існує — якщо встановлено параметр налаштування для оптимізації файлів .wxmx для системи керування версіями, можна перейменувати файл .wxmx на файл .txt і скористатися текстовим редактором для відновлення частини XML із вмісту файла (він починається з <?xml version="1.0" encoding="UTF-8"?> і завершується </wxMaximaDocument>. До і після цього фрагмента тексту у текстовому редакторі ви побачите непридатні до читання двійкові дані).

Якщо текстовий файл, що містить ці дані (наприклад скопійовані і вставлені як текст до звичайного файла), збережено як файл із суфіксом назви .xml, wxMaxima відомий спосіб відновлення тексту документа з цього файла.

4.3 Хочу бачити діагностичні відомості на екрані, перш ніж команда завершить свою роботу

Зазвичай, wxMaxima очікує, доки буде передано усю двовимірну формулу, перш ніж починає виводити дані. Таким чином заощаджується час, який могло б бути витрачено на постійні спроби вивести незавершену формулу. Втім, існує команда disp, яка може виводити діагностичні дані негайно, не очікуючи на завершення поточної команди Maxima:

for i:1 thru 10 do (
   disp(i),
   /* (sleep n) — функція Lisp, якою можна скористатися */
   /* із додаванням перед нею символу «?». Команда затримує */
   /* виконання програми (у нашому прикладі, на 3 секунди) */
   ?sleep(3)
)$

4.4 На кресленні показано лише закриту порожню обгортку із повідомленням про помилку

Це означає, що wxMaxima не вдалося прочитати файл, який Maxima мала наказати створити gnuplot.

Можливими причинами цієї помилки є такі:

4.5 Спроба накреслити анімацію призводить до повідомлення «помилка: невизначена змінна»

Значення змінної повзунка, типово, буде підставлено до виразу для креслення, лише якщо воно є видимим у цьому виразі. Використання команди subst, яка підставляє змінну повзунка до рівняння, яке слід накреслити, має усунути проблему. Наприкінці розділу Вбудовування анімацій до робочого аркуша наведено приклад.

4.6 Втрачено вміст комірок і скасовування дій не допомагає

У програмі передбачено окремі функції скасовування дій для дій з комірками і для дій усередині комірок, тому така подія має бути дуже рідкісною. Якщо таке все ж сталося, існує декілька способів відновити дані:

playback();

4.7 wxMaxima запускається із повідомленням «Процес Maxima несподівано перервав роботу.»

Однією з можливих причин є те, що Maxima не вдалося знайти у каталозі, який вказано на сторінці «Maxima» діалогового вікна налаштовування wxMaxima, а отже, програму взагалі не запущено. Встановлення адреси коректного виконуваного файла Maxima має виправити цю проблему.

4.8 Maxima висне при обчислення і не відповідає на команди

Теоретично можливий випадок, коли wxMaxima не може розпізнати момент завершення обчислень у Maxima і тому ніколи не дізнається про те, що може надсилати нові дані до Maxima. У цьому випадку команда виконання обчислення може відновити синхронізацію між двома програмами.

4.9 Версії Maxima на основі SBCL не вистачає оперативної пам’яті

Компілятор Lisp SBCL типово позначається із обмеженням на використання пам’яті, яке надає змогу запускати його на слабких комп’ютерах. При компіляції великих пакунків програмного забезпечення, зокрема lapack, або роботі з великими списками або формулами це обмеження може заважати нормальній роботі. Щоб зняти обмеження, SBCL можна передати параметр --dynamic-space-size, який вказуватиме SBCL, скільки мегабайтів пам’яті слід зарезервувати. У 32-бітовому Windows-SBCL можна зарезервувати до 999 мегабайтів. У 64-бітовій версії SBCL, яку запущено у Windows, можна наказати програмі використовувати понад близько 1280 мегабайтів, чого має бути достатньо для збирання lapack.

Одним зі способів передати Maxima (а отже, SBCL) параметри командного рядка є поле «Додаткові параметри для Maxima» вікна налаштовування wxMaxima.

sbcl memory

4.10 При введенні даних програма уповільнюється або пропускає символи в Ubuntu

Встановлення пакунка ibus-gtk має усунути проблему. Докладніше про це на сторінці (https://bugs.launchpad.net/ubuntu/+source/wxwidgets3.0/+bug/1421558).

4.11 wxMaxima припиняє роботу, коли Maxima обробляє грецькі символи або умляути

Якщо вашу Maxima засновано на SBCL, слід додати такі рядки до вашого файла .sbclrc:

(setf sb-impl::*default-external-format* :utf-8)

Тека, у якій має бути розташовано цей файл залежить від системи та способу встановлення. Втім, будь-яка Maxima на основі SBCL, яка вже виконала обчислення у якійсь комірці протягом поточного сеансу, без проблем повідомить, де його можна знайти, у відповідь на таку команду:

:lisp (sb-impl::userinit-pathname)

4.12 Креслення

4.12.1 Чи можна зробити так, щоб wxMaxima виводила дані одразу до файлів зображень і до вбудованих до аркуша креслень?

До робочого аркуша вбудовуються файли .png. wxMaxima дозволяє користувачу вказати, де має бути створено ці файли:

wxdraw2d(
    file_name="test",
    explicit(sin(x),x,1,10)
);

Якщо має бути використано якийсь інший формат зображень, простіше створити зображення окремо, а потім імпортувати їх до робочого аркуша:

load("draw");
pngdraw(name,[contents]):=
(
    draw(
        append(
            [
                terminal=pngcairo,
                dimensions=wxplot_size,
                file_name=name
            ],
            contents
        )
    ),
    show_image(printf(false,"~a.png",name))
);
pngdraw2d(name,[contents]):=
    pngdraw(name,gr2d(contents));

pngdraw2d("Test",
        explicit(sin(x),x,1,10)
);

4.12.2 Чи можна встановити співвідношення розмірів зображення креслення?

Не безпосередньо, за допомогою Maxima. Але для цього є команди gnuplot:

wxdraw2d(
    proportional_axis=xy,
    explicit(sin(x),x,1,10)
),wxplot_size=[1000,1000];

4.12.3 Після оновлення до MacOS 13.1 у відповідь на команди plot і/або draw програма виводить повідомлення про помилки, подібні до таких:


1 HIToolbox 0x00007ff80cd91726 _ZN15MenuBarInstance22EnsureAutoShowObserverEv + 102
2 HIToolbox 0x00007ff80cd912b8 _ZN15MenuBarInstance14EnableAutoShowEv + 52
3 HIToolbox 0x00007ff80cd35908 SetMenuBarObscured + 408
...

Це може бути проблемою операційної системи. Вимикання приховування смужки меню (SystemSettings => Стільниця і панель => Смужка меню) може усунути проблему. Див. вада у wxMaxima 1746 for more information.


5 FAQ

5.1 Чи є якийсь спосіб умістити більше тексту на сторінку LaTeX?

Так. Скористайтеся пакунком LaTeX «geometry» для визначення розмірів полів.

Ви можете додати такий рядок до преамбули LaTeX (наприклад, за допомогою відповідного поля у діалоговому вікні налаштовування («Експорт->Додаткові рядки до преамбули TeX») для встановлення розміру полів у 1 см):

\usepackage[left=1cm,right=1cm,top=1cm,bottom=1cm]{geometry}

5.2 Чи передбачено у програмі «темний» режим?

Якщо бібліотека wxWidgets є достатньо новою, wxMaxima автоматично працюватиме у темному режимі, якщо у ньому працює решта операційної системи. Сам робочий аркуш типово має світле тло. Втім, колір тла можна змінити. Крім того, ви можете скористатися пунктом меню «Перегляд/Інвертувати яскравість робочого аркуша», за допомогою якого можна швидко перетворити робочий аркуш з темного на світлий, і навпаки.

5.3 wxMaxima іноді повисає на декілька секунд під час першої хвилини роботи

wxMaxima передає певні складні завдання, зокрема завдання з обробки підручника з Maxima, який складається з понад 1000 сторінок, фоновим завданням, що, зазвичай, відбувається зовсім непомітно. Втім, у момент, коли може знадобитися результат виконання такого завдання, wxMaxima може знадобитися декілька секунд для відновлення нормальної роботи.

5.4 З’являється повідомлення «Неможливо встановити локаль “xx_YY”», особливо під час тестування параметрів нової локалі

Попередження про локаль

(Таке саме може статися із іншими програмами.) Переклад може працювати після натискання кнопки «Гаразд». wxMaxima не просто використовує власні переклади, але і переклади з бібліотеки wxWidgets.

Локалі може не бути у системі. У системах Ubuntu/Debian локалі можна створити за допомогою такої команди: dpkg-reconfigure locales

5.5 Якщо скористатися символами множин дійсних чисел, натуральних чисел (ℝ, ℕ) тощо?

Ці символи можна знайти на бічній панелі Unicode (пошукайте «великі літери із подвійним контуром»). Втім, підтримку цих символів має бути передбачено у вибраному шрифті. Якщо програма не показує символи належним чином, виберіть інший шрифт.


6 Параметри командного рядка

Usually you can start programs with a graphical user interface just by clicking on a desktop icon or desktop menu entry. WxMaxima - if started from the command line - still provides some command-line switches, though.

Замість символу мінуса у деяких операційних системах перед перемикачами командного рядка використовується тире.


7 Про програму, участь у розробці wxMaxima

wxMaxima is mainly developed using the programming language C++ using the wxWidgets framework, as build system we use CMake, a small part is written in Lisp. You can contribute to wxMaxima, join the wxMaxima project at https://github.com/wxMaxima-developers/wxmaxima, if you have knowledge of these programming languages and want to help and contribute to the open source project wxMaxima.

But not only programmers are necessary! You can also contribute to wxMaxima, if you help to improve the documentation, find and report bugs (and maybe bugfixes), suggest new features, help to translate wxMaxima or the manual to your language (read the Readme in the locale subdirectory how wxMaxima and the manual can be translated).

Or answer questions of other users in the discussion forum.

Початковий код wxMaxima документовано за допомогою системи Doxygen тут.

Програма є майже самодостатньою, тому, окрім системних бібліотек (та бібліотеки wxWidgets), ніяких зовнішніх залежностей (зокрема графічних файлів або частини Lisp (файла wxmathML.lisp) не потрібно, ці файли включено до виконуваного файла програми.

Якщо ви є розробником, можете спробувати внести зміни до wxmathML.lisp без перезбирання усього. Можна скористатися параметром командного рядка --wxmathml-lisp=<рядок>, щоб наказати програмі використати інший файл Lisp, замість включеного до її складу.