wxMaxima

Підручник користувача wxMaxima

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

Логотип wxMaxima

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

Основи wxMaxima

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

Що робити, якщо wxMaxima працює неправильно

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

Параметри командного рядка, підтримку яких передбачено у wxMaxima


1 Вступ до wxMaxima

1.1 Maxima і wxMaxima

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

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

1.1.1 Maxima

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

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

Extensive documentation for Maxima is available in the internet. Part of this documentation is also available in wxMaxima’s help menu. Pressing the Help key (on most systems the F1 key) causes wxMaxima’s context-sensitive help feature to automatically jump to Maxima’s manual page for the command at the cursor.

1.1.2 wxMaxima

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

Вікно wxMaxima
Вікно wxMaxima

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

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

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

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

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

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

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

При обчисленні вмісту комірки вхідних даних Maxima призначає мітку для вхідних даних (типово, таку мітку буде показано червоним кольором, вона матиме формат %i). За цією міткою можна посилатися на вміст далі у сеансі роботи з wxMaxima. Виведені Maxima дані також отримають мітку, яка починається з %o, і яку типово буде приховано, хіба що користувач надасть назву виведеними даним. Якщо надано назву, буде показано визначену користувачем мітку. Втім, можна буде користуватися і автоматично створеною Maxima міткою у стилі %o.

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

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

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

1.2.2 Комірки

The worksheet is organized in cells. wxMaxima knows the following cell types:

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

A (C-style) comment text can be part of a math cell as follows: /* This comment will be ignored by Maxima */

/*” marks the start of the comment, “*/” the end.

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

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

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

When you start wxMaxma, you will only see the blinking horizontal cursor. If you start typing, a math cell will be automatically created and the cursor will change to a regular vertical one (you will see a right arrow as “prompt”, after the Math cell is evaluated (CTRL+ENTER), you will see the labels, e.g. (%i1), (%o1)).

(blinking) horizontal cursor after wxMaxima start
(blinking) horizontal cursor after wxMaxima start

You might want to create another cell type (using the “Cell” menu), maybe a title cell or text cell, which describes, what will be done, when you start creating your worksheet.

If you navigate between the different cells, you will also see the (blinking) horizontal cursor, where you can insert a cell into your worksheet (either a math cell, by just start typing your formula - or another cell type using the menu).

(blinking) horizontal cursor between cells
(blinking) horizontal cursor between cells

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

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

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

wxMaxima contains an autocompletion feature that is triggered via the menu (Cell/Complete Word) or alternatively by pressing the key combination CTRL+SPACE. The autocompletion is context-sensitive. For example if activated within a unit specification for ezUnits it will offer a list of applicable units.

ezUnits
ezUnits

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

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

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

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

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

key greek letter key greek letter key greek letter
a альфа i йота r ро
b бета k каппа s сигма
g гамма l лямбда t тау
d дельта m мю u упсилоn
e епсилон n ню f фі
z дзета x ксі c хі
h ета om омікрон y псі
q тета p пі o омега
A Альфа I Йота R Ро
B Бета K Каппа S Сигма
G Гамма L Лямбда T Тау
D Дельта M Мю U Упсилон
E Епсилон N Ню P Фі
Z Дзета X Ксі C Хі
H Ета Om Омікрон Y Псі
T Тета P Пі O Омега

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

введений рядок математичний символ
hbar стала Планка: h із горизонтальною рискою згори
Hbar H із горизонтальною рискою згори
2 квадрат
3 куб
/2 1/2
partial знак частинної похідної (d у dx/dt)
integral символ інтеграла
sq квадратний корінь
ii уявна одиниця
ee елемент
in включається
impl implies випливає
inf нескінченність
empty порожня множина
TB великий трикутник праворуч
tb малий трикутник праворуч
and і
or або
xor виключне або
nand ні-і
nor ні-або
equiv еквівалентний
not ні
union об’єднання
inter перетин
subseteq підмножина або рівна множина
subset підмножина
notsubseteq не підмножина або рівна множина
notsubset не підмножина
approx приблизно
propto пропорційне до
neq != /= або # не рівне
+/- або pm плюс-мінус
<= або leq менше або дорівнює
>= або geq більше або дорівнює
<< або ll набагато менше
>> або gg набагато більше
qed що і слід було довести
nabla набла-оператор
sum знак суми
prod знак добутку
exists знак «існує»
nexists знак «не існує»
parallel знак «паралельно»
perp знак «перпендикулярно»
leadsto знак «випливає»
-> стрілка праворуч
–> довга стрілка праворуч

Якщо спеціального символу немає у списку, ви можете ввести його як довільний символ Юнікод натисканням послідовності клавіш ESC [номер символу (шістнадцятковий)] ESC.

Отже, 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).

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

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

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

In the “table of contents” side pane one can increase or decrease a heading, just click on the heading with the right mouse button and select the next higher or lower heading type.

Increase or decrease headings in the TOC side pane
Increase or decrease headings in the TOC side pane

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

Деякі текстові процесори і подібні програми або розпізнають вхідні дані MathML і автоматично вставляють їх до придатного для редагування рівняння, або (подібно до LibreOffice 5.1) мають у складі редактор рівнянь, у якому передбачено можливість імпортування даних MathML з буфера обміну даними. У інших редакторах передбачено підтримку формул у RTF. Через це у wxMaxima передбачено декілька відповідних пунктів у контекстному меню.

1.2.8 Підтримка Markdown

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

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

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

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

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

cogito => sum.

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

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

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

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

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

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

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

1.3.1 .mac

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

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

Завантаження файла .mac за допомогою batch()
Завантаження файла .mac за допомогою batch()

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

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

1.3.2 .wxm

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

1.3.3 .wxmx

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Якщо ви користуєтеся Unix/Linux, дані налаштувань буде збережено до файла .wxMaxima у вашому домашньому каталозі (якщо ви користуєтеся wxWidgets < 3.1.1), або .config/wxMaxima.conf ((стандартний каталог XDG), якщо використано wxWidgets >= 3.1.1). Визначити версію wxWidgets можна за допомогою команди wxbuild_info(); або пункту меню «Довідка -> Про програму». wxWidgets є бібліотекою графічного інтерфейсу користувача, яка працює на багатьох платформах і є основою wxMaxima (звідси wx у назві програми). (Оскільки назви файлів починається з крапки, файл .wxMaxima і каталог.config є прихованими).

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


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

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

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

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

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

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

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

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

2.3 Креслення

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

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

Зазвичай, Maxima наказує зовнішній програмі gnuplot відкривати окреме вікно для кожної створеної програмою діаграми. Оскільки набагато зручніше вбудовувати графіки безпосередньо до робочого аркуша, у wxMaxima передбачено власний набір команд для креслення, які не відрізняються від відповідних функцій maxima майже нічим, окрім назви: в усіх цих командах використано префікс «wx». Наприклад, команда wxplot2d відповідає команді plot2d, команда wxplot3d — команді plot3d, команда wxdraw — команді draw, а команда wxhistogram — команді histogram.

2.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]$

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

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

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

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

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

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

2.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
    )
)$

2.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))
     );

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

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

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

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

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

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

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

2.3.8.3 Вираз

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

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

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

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

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

2.3.8.6 Точки

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

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

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

2.3.8.8 Вісь

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

2.3.8.9 Контур

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

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

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

2.3.8.11 Колір лінії

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

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

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

2.3.8.13 Сітка

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

2.3.8.14 Точність

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

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

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

show_image("man.png");

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

Internally most modern XML-based formats are ordinary zip-files. wxMaxima doesn’t turn on compression, so the contents of .wxmx files can be viewed in any text editor.

If the zip signature at the end of the file is still intact after renaming a broken .wxmx file to .zip most operating systems will provide a way to extract any portion of information that is stored inside it. This can be done when there is the need of recovering the original image files from a text processor document. If the zip signature isn’t intact that does not need to be the end of the world: If wxMaxima during saving detected that something went wrong there will be a .wxmx~ file whose contents might help.

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

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

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

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

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

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

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

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

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

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

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

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

playback();

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

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

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

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

3.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
sbcl memory

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

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

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

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

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

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

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

3.12 Креслення

3.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)
);

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

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

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

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

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

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

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

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

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

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

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

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

4.4 Especially when testing new locale settings, a message box “locale ‘xx_YY’ can not be set” occurs

Locale warning
Locale warning

(The same problem can occur with other applications too).The translations seem okay after you click on ‘OK’. wxMaxima does not only use it’s own translations, but the translations of the wxWidgets framework too.

These locales may be not present on the system. On Ubuntu/Debian systems they can be generated using: dpkg-reconfigure locales


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

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

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