Maximo свойства системы история значений. Функции в Maxima

В Максима реализована возможность задания математических функций. Но я начну с того, что расскажу о встроенных функциях. Как правило, эти функции записываются аналогично математике.

Только вот математика эта американская, а не отечественная. Поэтому привычные нам со школы tg следует заменять на tan. Вот список тех функций, которые я смог обнаружить самостоятельно:

Функция в Maxima

Функция в математике

Гиперболический синус.

Гиперболический косинус.

Гиперболический тангенс.

Натуральный логарифм.

Арктангенс

Арксинус

acos(x) Арккосинус

Примечание: А вы знали, что если взять арксинус/арккосинус от числа больше 1, то у вас получится комплексное значение?

Наверняка встроенных функций куда больше. Если вам еще что-то нужно, то попробуйте обратиться к руководству по wxMaxima/Maxima. Там много интересного для начинающего любителя численных вычислений.

Рисунок 8: Встроенные функции в Maxima.

Если вы введете функцию, которая программе не известна, то она покажет вам точно такую же строку, как вы ввели. Но будьте внимательны! Если у вас установлен флаг numeric в дефолтное положение, то она поведет себя точно так же и с заданной функцией. Так что если вы намерены все же получить свой ответ, то переключите флаг, или передавайте функции вещественный параметр.

Теперь о том, как задавать собственные функции. Как и в математике, функция может быть определена выражением. Чтобы задать функцию, вы должны воспользоваться следующим оператором:

После определения вы можете использовать ее также, как и встроенные функции: f(3)

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

Рисунок 9: Собственные функции в wxMaxima

Как вы видите, ничего сложного. Используйте функции для упрощения ваших расчетов. Если вы последовательно посчитаете свои данные используя функцию, то у вас уже получится красивая табличка.

Циклическая обработка данных.

Это пожалуй самая сложная часть руководства, потому что она использует малопонятные непрограммистам циклы. Но если вы будете аккуратно вводить команды и не ошибаться, то все будет пучком.

Допустим, у вас имеется список A, который вы ввели по правилам, приведенным в разделе о вводе. Допустим, в нем находятся амплитудные значения тока. Тогда, чтобы получить действительные значения, вам необходимо каждое из них поделить на 2 .

for I in A do ldisp(I/sqrt(2))

По порядку. Здесь for - это ключевое слово, обозначающее цикл. I это временная переменная, которая соответствует одному из элементов списка. A это массив, который уже был введен вами ранее. Ключевое слово do говорит максиме что надо делать, проходя массив. Проход массива осуществляется поочередно, то есть действие после do выполняется столько раз, сколько находится элементов в массиве, а переменная I принимает на каждой итерации(итерация - одно выполнение цикла) значения a,a,...,a[n]. Дальше идет хитрая функция ldisp, которая позволяет нам увидеть, что она там такого насчитала. А параметром этой функции служит выражение. Если вы ничего не поняли, то не вдавайтесь в эти описания. А просто попробуйте сами дать эту команду, и поизменять ее параметры.

Примечание: Имена переменных и других объектов в максима регистрозависимы. Это значит, что I и i это две разные переменные.

Рисунок 10: Команда циклической обработки.

Этот способ подходит вам, если вы хотите посмотреть расчетные значения и затем записать их куда-нибудь к себе в лабник. А если вам требуется произвести над ними какие-то расчеты, то очевидно, их надо представить в удобном для этого виде. Например можно занести данные в список, аналогичный исходному. Для начала, нужно создать пустой список, чтобы потом в него можно было добавлять данные циклично. Это достигается командой:

Теперь можно заполнять:

for i in a do b:append(b, )

Этот цикл похож на предыдущий, но в него потребовалось внести некоторые

изменения, адекватно задаче. Теперь каждую итерацию цикла, в нем происходит переприсвоение списка b. Его присваивается список, составленный функцией append из прошлого состава списка b и еще одного списка, в котором находится лишь одно значение, нового рассчитанного элемента. Результатом является заполненный список b, которым вы можете оперировать, как будто бы сами ввели его. Чтобы посмотреть, что в нем есть, просто введите команду

Вы увидите ваш список.

Рисунок 11: Расчет с сохранением результатов.

Всего сказанного уже достаточно, чтобы посчитать обычную лабораторную работу. Особенно, если вы все это прочитали. Последовательность действий ваша должна быть примерно такой:

1. Ввести список исходных экспериментальных значений.

2. Задать функции для расчета значений.

3. Дать команды на циклический обсчет списков.

4. Занести данные в ваш лабник.

5. Закрыть лабник, и идти пить пиво на парапет, или куда-нибудь еще.

А теперь я расскажу о некоторых дополнительных фишках, которые могут вам помочь при подготовке к сдаче работы.

Maxima - еще одна программа для выполнения математических вычислений, символьных преобразований, а также построения разнообразных графиков. Сложные вычисления оформляются в виде отдельных процедур, которые затем могут быть использованы при решении других задач. Система Maxima распространяется под лицензией GPL и доступна как пользователям ОС Linux, так и пользователям MS Windows.

Для работы с данной системой в ОС Linux следует в окне shell набрать команду maxima или xmaxima для запуска ее графической оболочки. Другим удобным инструментом для работы с системой Maxima является программа texmacs . На панели инструментов этой программы располагается кнопка с изображением монитора, нажатиe на которую открывает меню выбора интерактивной сессии. Выбор пункта maxima позволит начать сеанс работы с этой программой.

При отображении результатов вычислений эта оболочка использует стандартные математические обозначения, в то время как xmaxima или maxima - только символы из таблицы ASCII-кодов.

При старте выводится некоторая информация о системе и "метка" (C1). Каждый ввод и вывод помечаются системой и затем могут быть использованы снова. Символ C (от command) используется для обозначения команд, введенных пользователем, а D (от display) - при выводе результатов вычислений.

Для инициализации процесса вычислений следует ввести команду, затем символ; (точка с запятой) и нажать клавишу Enter. Если не требуется вывод полученной информации на экран, то вместо точки с запятой используется символ $. Обратиться к результату последней команды можно с помощью символа %. Для повтора ранее введенной команды, скажем (C2), достаточно ввести два апострофа и затем метку требуемой команды, например, ""C2.

Система Maxima не обращает внимание на регистр введенных символов в именах встроенных констант и фунций. Запись sin(x) эквивалентна записи SIN(x), но при выводе результатов в текстовом режиме используются заглавные буквы. Регистр букв, однако, важен при использовании переменных, например, Maxima считает x и Xразными переменными.

Для стандартных математических констант используются следующие обозначения: %e (или %E) для основания натуральных логарифмов, %i (%I) для мнимой единицы (квадратный корень из числа -1) и %pi (%PI) для числа
.

Присваивание значения какой-либо переменной осуществляется с помощью знака : (двоеточие), а символ = (равно) используется при задании уравнений или подстановок.

(C1) x:2; (D1) 2 (C2) y:3; (D2) 3 (C3) x + y; (D3) 5

Функция kill аннулирует присвоенные ранее значения переменных. Параметр all этой функции приводит к удалению значения всех переменных, включая метки Ci и Di.

(C8) kill(x); (D8) DONE (C9) x + y; (D9) x + 3 (C10) kill(all); (D0) DONE (C1) x + y; (D1) y + x

Для завершения работы с системой применяется функция quit(); , а прерывание процесса вычислений осуществляется путем нажатия комбинации клавиш Ctrl+c (после чего следует ввести:q для возврата в обычный режим работы).

Справка о той или иной функции выводится по команде describe (имя функции). При работе в графической оболочке XMaxima, можно воспользоваться пунктом меню help. Процедура example (имя функции) демонстрирует примеры использования функции.

Все команды вводятся в поле ВВОД, разделителем команд является символ; (точка с запятой). После ввода команды необходимо нажать клавишу Enter 2В wxMaxima нужно нажать Shift+Enter . для её обработки и вывода результата. В ранних версиях Maxima и некоторых её оболочках (например, xMaxima ) наличие точки с запятой после каждой команды строго обязательно. Завершение ввода символом $ (вместо точки с запятой) позволяет вычислить результат введённой команды, но не выводить его на экран. В случае, когда выражение надо отобразить, а не вычислить, перед ним необходимо поставить знак " (одинарная кавычка). Но этот метод не работает, когда выражение имеет явное значение, например, выражение заменяется на значение равное нулю.

Две одинарных кавычки последовательно, применённые к выражению во входной строке, приводят к замещению входной строки результатом вычисления вводимого выражения.

Пример:

(%i3) sqrt(aa)+bb;

(%i4) "(sqrt(aa)+bb);

2.5.1 Обозначение команд и результатов вычислений

После ввода, каждой команде присваивается порядковый номер. В рассмотренном примере, введённые команды имеют номера 1–5 и обозначаются соответственно (%i1), (%i2) и т.д.

Результат вычисления также имеет порядковый номер, например и т.д., где i - сокращение от англ. input (ввод), а о - англ. output (вывод). Этот механизм позволяет избежать в последующих вычислениях повторения полной записи уже выполненных команд, например (%i1)+(%i2) будет означать добавление к выражению первой команды - выражения второй и последующего вычисления результата. Также можно использовать и номера результатов вычислений, например . Для последней выполненной команды в Maxima есть специальное обозначение - .

Пример:

Вычислить значение производной функции :

(%i1) diff(x^2*exp(-x),x);

(%i2) f(x):=""%;

Двойная кавычка перед символом предыдущей операции позволяет заместить этот символ значением, т.е. текстовой строкой, полученной в результате дифференцирования.

Другой пример (с очевидным содержанием):

2.6 Числа, операторы и константы

2.6.1 Ввод числовой информации

Правила ввода чисел в Maxima точно такие, как и для многих других подобных программ. Целая и дробная часть десятичных дробей разделяются символом точка. Перед отрицательными числами ставится знак минус. Числитель и знаменатель обыкновенных дробей разделяется при помощи символа / (прямой слэш). Обратите внимание, что если в результате выполнения операции получается некоторое символьное выражение, а необходимо получить конкретное числовое значение в виде десятичной дроби, то решить эту задачу позволит применение флага . В частности он позволяет перейти от обыкновенных дробей к десятичным. Преобразование к форме с плавающей точкой осуществляет также функция .

(%i2) 3/7+5/3, float;

(%i3) 3/7+5/3, numer;

(%i4) float(5/7);

2.6.2 Арифметические операции

Обозначение арифметических операций в Maxima ничем не отличается от классического представления: + , - , * , /. Возведение в степень можно обозначать несколькими способами: ^, ^^, **. Извлечение корня степени n записываем, как степень . Операция нахождение факториала обозначается восклицательным знаком, например 5!. Для увеличения приоритета операции, как и в математике, используются круглые скобки: (). Список основных арифметических и логических операторов приведён в табл. 2.1 и табл. 2.2 ниже.

Таблица 2.2. Логические операторы
< оператор сравнения меньше
> оператор сравнения больше
<= оператор сравнения меньше или равно
>= оператор сравнения больше или равно
# оператор сравнения не равно
= оператор сравнения равно
and логический оператор и
or логический оператор или
not логический оператор не

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

Используемый стиль обозначений позволяет при дальнейшей записи команд сослаться на ранее полученные результаты, например, таким образом (% o 1)*(% o 2) – результаты требуется перемножить.

Для последнего ответа в Maxima есть специальное обозначение%. А для последней команды _ (знак подчёркивания).

Пример : Вычислить значение функции в точках x = a , и вычислить .

Команда (%i1) была выполнена (появился результат %о1) и была определена функция . Поэтому следующие две команды (%i2) и (%i3) вызывали (хотя и по-разному) эту функцию, чтобы рассчитать значения в заданных точках. Из (%i4) видно, что ссылку на строку результата (%о2) можно писать и без скобок ().

Основные математические операции в Maxima обозначаются обычным образом: +, –, *, /. Возведение в степень для удобства предусмотрено записывать тремя разными способами ^, ^^, **. Знак присвоения – это двоеточие «: », команду для Maxima «а:2;» следует читать следующим образом: «переменной а присвоить число 2». В конце команды кроме точки с запятой «; » допустимо ставить знак доллара $. При наличии точки с запятой результат выводится на экран, при наличии доллара результат не выводится на экран, исключение составляют команды для вывода графиков, заканчивающиеся долларом, но выводящие на экран график.

3.1. Переменные в Максима

Переменные в Maxima могут хранить символы, аналитические выражения, определения функций, логические значения «true», «false», списки, уравнения, строки текста, заключенного в двойные кавычки, в составе которого имеются кириллические символы, и, конечно же, числа: целые, рациональные дроби, вещественные фиксированной точности и вещественные с плавающей точкой неограниченной точности типа %pi.

Из следующего примера видно, что Maxima вполне законченный математик, для неё переменная х и нечто – никому непонятный объект ″Петя″ – ничем не отличаются. Maxima

В этом примере Maxima разделила (″Петя″2–4)/(″Петя″–2) и получила ″Петя″+2. Затем из ″Петя″+2 Maxima отняла ″Петя″ и в итоге получила целое число 2.

3.2. Возможные ошибки вычислений

Из следующего примера следует, что в операциях с числами Maxima «ручается» только за 16 значащих цифр и «ничто компьютерное ей не чуждо», у неё тоже имеются чисто вычислительные проблемы (см. %о3) с округлением при вычислениях.

Дело в том, что в приведённых примерах Maxima производит вычисления не целыми числами, а с приближенными. Расчеты производятся не в десятичной системе и не путем формальной замены деления введением множителя 10 –5 . Деление производится реально в двоичной системе. Приближенные числа имеют стандартную длину, плавающую запятую. Результаты округляются так, чтобы оставались 16 значащих цифр.

В данном примере появившаяся неожиданная ″ добавка ″ незначительна и составляет всего 0,3*10 –21 .

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

За счет реального выполнения арифметических вычислений, результаты оказываются неточными: ответы %о3 и %о4 отличаются от нуля.

3.3. Записьуравнений

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

3.4. Неопределённая форма выражений

Выражения в Maxima могут иметь две формы: действующую и неопределённую . В тех случаях, когда выражение надо лишь отобразить, а не вычислить (неопределённая форма ) , перед ним следует поставить знак (одинарная кавычка). Например, мы пожелали отобразить то самое задание, которое мы увидели первым в окне XMaxima , поэтому скопируем текст задания, добавим кавычку, и вызовем интерпретатор. Получим

откуда видим, что первый пример в окне XMaxima посвящен вычислению представленного здесь интеграла.

Однако, указанный метод не сработает, если выражение имеет явное значение, например, выражение sin(π ) Maxima рассматривает как нуль и при наличии апострофа. Соответственно co s(2 π ) для Maxima в точности равен единице.

С другой стороны, чтобы принудительно заставить выражение вычислить, то есть перевести его в действующую форму, следует поставить одиночную кавычку два раза (применить оператор действующей формы – ′′ ).

3.5. Вызов справки

Трудно предусмотреть многообразие возможных вариантов записи команд с целью использования Maxima для расчета или преобразования выражений. В сложных случаях можно попытаться получить справку на английском языке.

Для вызова справки следует написать? topic и вызвать интерпретатор нажатием Shift +Enter , где topic – эта ключевое слов (тема) справки.

Команда?? topic вызывает поиск по всем темам справки, содержащим ключевое слово topic .

В следующем примере мы хотели спросить про знак факториала, но не поставили пробел после знака вопроса (ошиблись). Maxima ответила, что не существует точно такой, как в запросе, (exact match ) темы.

И посоветовала попытаться (Try ) вторично (??) спросить с целью получения не вполне точного ответа. О том, что ответ был неудовлетворителен, Maxima сообщила в виде false в строке ответа (%о1).

В следующем вопросе мы также ошиблись (опять не поставили пробел), но хотели спросить про функцию cos (x ), получилось непонятно для программы и поэтому вообще никакого ответа не получили.

В случае с факториалом (!) при вторичном запросе Maxima дала исчерпывающий ответ (который мы немного сократили)

В ответе Maxima сначала создала нумерованный список ответов (в данном случае у неё два номера 0 и 1), затем предложила ввести разделённые пробелом (space - separated ) номера разделов или указать все (all ) или никакие (none ) из них. После уточнения (а ), которое она поняла как (all ), Maxima напечатала справку по запрашиваемое теме "факториал".

3.6. Ввод числовой информации

Правила ввода чисел в Maxima точно такие, как и для многих других подобных программах. Целая и дробная часть десятичных дробей разделяются символом точка . Перед отрицательными числами ставится знак минус . Числитель и знаменатель обыкновенных дробей разделяются при помощи символа / (прямой слэш ).

Обратите внимание, что если в результате выполнения операции получается некоторое символьное выражение, а необходимо получить конкретное числовое значение в виде десятичной дроби, то решить эту задачу позволит применение опции numer . В частности, опция numer позволяет перейти от обыкновенных дробей к десятичным:

Здесь Maxima прежде всего действовала по умолчанию. Она сложила дроби 3/7 и 5/3 по правилам арифметики точно: нашла и привела дроби к общему знаменателю и сложила числители. В итоге она получила 44/21. Лишь после того, как мы попросили её получить численный ответ, она вывела приближенный, с точностью 16 знаков, численный ответ 2,095238095238095.

3.7. Возведение в степень и старшинство операций

Как уже отмечалось выше, обозначения арифметических операций в Maxima не отличаются от классического представления, используются те же математические знаки: + – * /. Но возведение в степень предусмотрено обозначать тремя способами: ^ , ^^ , **.

Извлечение квадратного корня производит функция sqrt(),извлечение корня степени n записывают как степень ^^(1/n ).

В Maxima определены стандартные операции – нахождение факториала числа, (например, 6! = 1 · 2 · 3 · 4 · 5 · 6 = 120) и нахождение двойного факториала (например, 6!! =2 · 4 · 6 = 48; 7! = 1 · 3 · 5 ·7 = 105).

Для увеличения приоритета операции при записи команд для Maxima используют круглые () скобки.

Как видно из приведённых результатов вычислений (%о13)–(%iо5), Maxima правильно понимает старшинство операций: сначалавыполнила возведение в степень и только потом операцию деления. Выполняя команду (%i13), она возвела в степень 1 и разделила результат на 3, но при выполнении команды (%i14) вычислила корень третьей степени, результат (%о15) равен произведению (%о13) и (%о14).

3.8. Константы

В Maxima для удобства вычислений есть ряд встроенных констант, самые распространенные из них показаны в следующей таблице (табл. 1):

Таблица 1

Названия констант и их обозначение в Maxima

Название

Обозначение

π (число Пифагора)

e (Эйлерово число)

Мнимая единица ()

+∞ (плюс бесконечность)

– ∞ (минус бесконечность)

minf

Истина

true

Ложь

false

Комплексная бесконечность

infinity

слева (в отношении пределов)

minus

справа (в отношении пределов)

plus

Золотое сечение ()

%phi

3.9. Переменные и выражения

Для хранения результатов промежуточных расчетов используются переменные. Заметим, что при вводе названий переменных, функций и констант важен регистр букв. Так, переменные x и X – это две разные переменные.

Присваивание значения переменной осуществляется с использованием символа : (двоеточие), например x: 5.

Если необходимо удалить значение переменной (очистить ее), то применяется метод kill : kill (x ) – удаляет значение переменной x, а команда kill(all) – удаляет значения всех используемых ранее переменных. И, кроме того, метод kill начинает новую нумерацию для исполняемых команд (обратите внимание, что ответом на команду (%i3), приведенную ниже, оказался ответ с номером ноль (%o0) done , и далее нумерация команд снова началась с единицы).

Напомним также, что в одной строке (см. % i 1), можно записать несколько команд, разделяя последние символом ; (точка с запятой) или знаком $ (доллар), если нам не требуется вывод результата на монитор.

Математические операции в Maxima используются для записи выражений. Всё в Maxima является выражениями, в том числе математические выражения как таковые, а также объекты и программные блоки. Простейшее выражение представляет собой атом, либо оператор с аргументами.

Атом - символ (имя), строка в двойных кавычках, либо число (целое или с плавающей точкой). Все выражения не-атомы представляются в виде oper (a1 ,.., aN ), где oper - имя оператора, a1,..., aN - его аргументы. Выражения могут отображаться по-разному, но внутреннее представление всегда одинаково. Аргументы выражения могут быть атомами, либо выражениями не-атомами.

Команда op возвращает оператор, args возвращает аргументы, atom определяет, является ли выражение атомом.

Например :

Функция symbolp возвращает «true», если её аргумент является символом.

Функция двух аргументов freeof(,) возвращает «true», если второй её аргумент свободен (не содержит) первого аргумента.

Функция zeroequiv(,) проверяет, является ли её аргумент –функция одного аргумента – нулём. Zeroequiv возвращает «true», если её аргумент равен нулю и «false» в противном случае.

Функция zeroequiv может быть полезной в тех случаях, когда в результате ряда преобразований нет уверенности в том, что полученная функция тождественна исходной.

3.10. Математические функции

В Maxima имеется большой набор встроенных математических функций. Наиболее часто используемые приведены в табл. 2.

Таблица 2

Встроенные математические функции Maxima

Функции

Обозначение

Тригонометрические

sin (синус),

cos (косинус),

tan (тангенс),

cot (котангенс)

Обратные

тригонометрические

asin (арксинус),

acos (арккосинус),

atan (арктангенс),

acot (арккотангенс)

Секонс, косеконс

sec (x) = 1/cos (x), (секонс ),

csc (x) = 1/sin (x), (косеконс )

Натуральный логарифм

log()

квадратный корень

sqrt()

модуль

abs()

остаток от деления

mod(,)

Минимальный из списка

min(x1, ... ,xN)

Максимальный из списка

max(x1, ... ,xN)

Знак аргумента

Pos (x>0),

Zero (x=0),

sign(x); = neg (x<0),

Pnz – (не определен)

Случайное число

random (N ) – целое, из промежутка

если N –целое

random (float (P )) – число с плавающей точкой

Следует иметь в виду, что некоторые названия функций отличаются от названий, используемых в отечественной литературе. В Maxima используется вместо tg – tan, вместо ctg – cot, вместо arcsin – asin, вместо arccos – acos, вместо arctg – atan, вместо arcctg – acot, вместо ln – log, вместо cosec – csc.

Примеры использования функций:

3.11. Правило записи функций

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

3.12. Пользовательские функции

Пользователь может задать собственные функции. Для этого сначала указывается название функции, в скобках перечисляются названия аргументов, после знаков := (двоеточие и равно) следует описание функции, которое может быть нематематическим. После задания пользовательская функция вызывается точно так, как и встроенные функции Maxima .

Нужно помнить, что не следует использовать для функций названия, зарезервированные для встроенных функций Maxima (записанные выше в табл. 2).

3.13. Перевод сложных выражений в линейную форму записи

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

Для облегчения данного процесса нелишне дать несколько рекомендаций:

1. Не забывайте ставить знак умножения! В графическом окне Maxima по правилам математики удвоенное значение переменной х записывает в виде 2x , но при записи команда для Maxima должна выглядеть как 2*x.

2. Но между именем функции и скобкой с аргументом знак умножения не пишется; sin *(x ) – здесь знак умножения лишний.

3. В случае сомнения всегда лучше перестараться и поставить «лишние», дополнительные скобки (). Числитель и знаменатель выражения всегда необходимо заключать в скобки. При записи возведения в степень основание и степень лучше всегда брать в скобки.

4. Функция не существует отдельно от своих аргументов (если таковые имеются). Поэтому, например, при возведении в степень функции некоторого аргумента следует взять всю функцию с аргументами в скобки, а потом уже возводить полученную конструкцию в нужную степень: (sin (x ))**2. Очень часто начинающие пользователи пытаются возвести в степень только название функции, забывая про аргументы: sin **2(x ) – это неправильно!

5. Также необходимо помнить, что несколько аргументов функции записываются в скобках, через запятую,например min (x 1, x 2, x 3, xN ).

6. Недопустима запись функции sin (2* x ) в виде sin *2* x или sin 2 x . Запомните, как действует Maxima при записи скобок: как только вы пытаетесь написать открывающую скобку, она тут же пишет вторую – парную ей – закрывающую скобку. Поэтому при записи функций напишите название функции, затем поставьте после нее пустые скобки и только потом в этих скобках напишите все ее аргументы, разделяя их запятыми. Никаких конструкций между названием функции и открывающейся скобкой быть не должно!

7. В случае записи сложного выражения разбейте его на несколько простых составляющих, введите их по отдельности, а затем объедините, используя рассмотренные ранее обозначения.

Примеры простых команд для Maxima :

Математическая запись

Команда для Maxima

(x+2)/(y–7)

(x+3)**(2*y)

sin((x–2)/(a+3))

((x–2)/(a+3)+2)/(4–(y–7)/(b+4))+12*x

Упражнение: Н еобходимо ввести следующее выражение:

Указания к выполнению: Разделим это выражение на три составные части: будем отдельной частью считать числитель, выражение, стоящее в знаменателе в скобках, и степень. Введем каждую названную составную часть, и объединим их в выражение.

При вводе команд строку с ошибочной записью команды для Maxima можно выделить и удалить с графического экрана (с клавиатуры), а вместо неё написать и выполнить (с клавиатуры нажатием Shift + Enter ) правильную команду, следует ожидать, что номер ответа при этом изменится.

Если щёлкнуть мышкой в незакрашенный треугольник, то треугольник закрасится, а строка с результатом будет скрыта, при этом появится запись (1 lines hidden). Чтобы удалить с экрана и ответ, и команду (блок, отмеченный слева квадратной скобкой), следует щелчком мыши выделить квадратную скобку у пары ввод–ответ, вызвать щелчком правой кнопки мыши контекстное меню и выбрать опцию Delete Selection. Так в предыдущих примерах строки с командой (%i4) и с ответом (%o4) нет – они удалены.

Заметим также, что при записи команды для Maxima (%o1)/(%o2)**(%o3) в строке (%i5) вполне допустимо перестраховаться и написать иначе, используя дополнительные скобки для знаменателя: (%o1)/((%o2)**(%o3)). Но Maxima правильно нас поняла и без этих «лишних скобок» и вычислила вводимое выражение математически правильно, поскольку понимает принятое в математике старшинство операций : прежде всего вычисляются аргументы (так как находятся в скобках) и функции, потом выполняется возведение в степень, затем операции деление и умножение и только потом – сложение и вычитание.

by 0):
а) y :2/ x ; x :0; б) u :0; v :2/ u ; в) z :0; t :2/ Z ; и почему?

3. Что является оператором в выражениях а) x^y; б) – t; в) x + y;?

4. Что ответитMaxima, если исполнить команду: u – v; op(%);?

5. Чему равнывыражения: а) 4 * – 2; б) 4 * + 2; в) 4 ** – 2;?

6. Что является аргументами в выражении fas (p , q ) := p – q ?

7. Является ли атомом выражение abc?

8. Почему в следующих примерахMaxima сумела численно рассчитать tg(π /2) и, но отказалась делать численные вычисления для ctg(0)?

9. Какой ответ даст Maxima, если команда для неё будет такой:

10. Что больше e π или π e ?

11. На сколько процентов большее из сравниваемых чисел превышает меньшее?

12. Что ответит Maxima, если команда для неё будет такой:

Оператор цикла

Оператор цикла может задаваться несколькими способами. Способ задания зависит от того, известно ли заранее сколько раз необходимо выполнить тело цикла.

Пример: задание цикла для вывода значений переменной а в диапазоне от -3 до 10 с шагом 5:

Пример: цикл для нахождения суммы всех натуральных чисел до числа 50 включительно:

Следующей важной возможностью системы Maxima является работа со списками и массивами .

Для формирования списков используется команда makelist. Например, с помощью команды

мы сформировали список с именем x, состоящий из десяти элементов, значе-

Для формирования массивов используется команда array. Например с помощью команды,

мы сформировали двумерный массив A, состоящий из 10 строк и 5 столбцов. Для заполнения массива элементами воспользуемся циклом с параметром. Например,

Т.Н. Губина, Е.В. Андропова

Для вывода элементов массива на экран можно воспользоваться командой:

Массив можно формировать и без предварительного объявления. В следующем примере мы сформировали одномерный массив x, состоящий из 5 элементов, значения которых вычисляются по формуле x i = sin i .

Неудобство работы с массивами заключается в том, что вывод значений элементов массива осуществляется в столбец. Гораздо удобнее, если значения массива (двумерного) выводятся в виде матрицы. Для этих целей можно воспользоваться командой genmatrix. Например, для формирования двумерного массива (матрицы) следует задать команду в следующем виде:

Выведем полученный массив:

1.7. Управление процессом вычислений в Maxima

Система компьютерной математики Maxima относится к системам символьной математики. Поэтому (по умолчанию) система выдает результат в символьном виде. То есть, если не задавать специальную команду, система

Глава 1 Основы работы в системе компьютерной математики Maxima

никогда не представит полученные в ходе вычислений результаты в виде приближенного ве щественного числа. Например, если мы введем в ячейку ввода команду2 , то получим:

Если же возникает необходимость представить полученный в ходе расчетов результат в виде вещественного числа, то в этом случае требуется дать специальную команду системе. Например, можно поступить так: если требуется получить приближенное значение 2 , то выбираем пункт менюЧисленные расчеты→To float (в число с одинарной точностью) (илиTo BigFloat

(в число с двойной точностью)). Результат будет выглядеть так:

Знак «%» в Maxima используется для обращения к результату, полученному в последней сессии работы. Это бывает удобно, если нет необходимости вводить переменные пользователя и в дальнейшем использовать полученные значения.

Для управления процессом вычислений предусмотрена возможность так называемой «блокировки вычислений» . Выполняется блокировка с помощью одинарного знака апострофа. Ее суть:

если перед именем функции или переменной поставить знак апострофа, то блокируется вычисление самой функции (но не ее аргументов) или переменной;

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

Например, зададим функцию f x и сравним результаты, полученные при попытке вычисления значения функции в точкеx = 0 .

Как видим, знак апострофа заблокировал попытку вычисления значения функции в первом случае.

Другой пример:

Т.Н. Губина, Е.В. Андропова

В противовес блокировке вычислений с помощью двух знаков апострофа наоборот можно заставить систему выполнять вычисления - «принудительное вычисление» . Например,

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

Обратим внимание на то, что в системе Maxima по умолчанию все углы измеряются в радианах. Поэтому если требуется работать с углами в градусах, для этого потребуется вспомнить формулу перевода из радиан в градусы.

В терминологии Maxima невычисленная форма выражения называется «noun form », вычисленная - «verb form ».

Следующим важным моментом при работе в системах компьютерной математики является умение выполнять подстановку значений переменных или частей выражений в функции, выражения. Рассмотрим некоторые возможности системы, предусмотренные для этих целей.

Например, требуется в выражение cos x 4sin x − x вместо переменнойх подставить конкретное значение, например, .

Глава 1 Основы работы в системе компьютерной математики Maxima

Таким образом, команда subst позволяет выполнять подстановку в выражение значений каких-либо переменных. На самом деле, команд подстановки значений в выражение или функцию в Maxima несколько.

1.8. Простейшие преобразования выражений

По умолчанию в системе Maxima является активной функция автоупрощения, т.е. система старается упростить вводимое выражение сама без какой-либо команды.

Пример. Пусть требуется найти значение следующего числового выра-

1 1− 4

жения: 2 1 4 4 5 7 .

Зададим выражение по правилам языка системы Maxima.

Как видим, система в ответ вывела значение выражения, хотя мы не задали никакой команды.

Как же заставить систему вывести не результат, а само выражение? Для этого функцию упрощения надо отключить с помощью команды simp: false$. Тогда получим:

Для того чтобы активировать функцию упрощения, надо задать команду simp:true$. Функция автоупрощения может работать как с числовыми, так и с некоторыми не числовыми выражениями. Например,

Т.Н. Губина, Е.В. Андропова

При вводе мы можем обращаться к любой из предыдущих ячеек по ее имени, подставляя его в любые выражения. Кроме того, последняя ячейка вывода обозначается через %, а последняя ячейка ввода - через _. Это позволяет обращаться к последнему результату, не отвлекаясь на то, каков его номер. Но такими обращениями к ячейкам злоупотреблять не надо, поскольку при переоценивании всего документа или его отдельных ячеек ввода может произойти разногласие между номерами ячеек.

ченный результат в 5 раз.

Желательно вместо имен ячеек использовать переменные и присваивать их имена любым выражениям. В этом случае в виде значения переменной может выступать любое математическое выражение.

Значения имен переменных сохраняются на протяжении всей работы с документом. Напомним, что если необходимо снять определение с переменной, то это можно сделать с помощью функции kill(name), где name - имя уничтожаемого выражения; причем это может быть как имя, назначенное вами, так и любая ячейка ввода или вывода. Точно так же можно очистить всю память и освободить все имена, введя команду kill(all) (или выбрать меню Maxima->Очистить память (Clear Memory) ). В этом случае очистятся в том числе и все ячейки ввода-вывода, и их нумерация опять начнется с единицы.

Функция автоупрощения далеко не всегда способна упростить выражение. В дополнение к ней имеется целый ряд команд, которые предназначены для работы с выражениями: рациональными и иррациональными. Рассмотрим некоторые из них.

rat(выражение) - преобразовывает рациональное выражение к канонической форме: раскрывает все скобки, затем приводит все к общему знаменателю, суммирует и сокращает; приводит все числа в конечной десятичной записи к рациональным. Каноническая форма автоматически «отменяется» в случае любых преобразований, не являющихся рациональными

ratsimp(выражение) - упрощает выражение за счет рациональных преобразований. Работает в том числе и «вглубь», то есть иррациональные

Глава 1 Основы работы в системе компьютерной математики Maxima

части выражения не рассматриваются как атомарные, а упрощаются, в том числе, и все рациональные элементы внутри них

fullratsimp(выражение) - функция упрощения рационального выражения методом последовательного применения к переданному выражению функции ratsimp(). За счет этого функция работает несколько медленнее, чем ratsimp(), зато дает более надежный результат.

expand(выражение) - раскрывает скобки в выражении на всех уровнях вложенности. В отличии от функции ratexpand(), не приводит дроби-сла- гаемые к общему знаменателю.

radcan(выражение) - функция упрощения логарифмических, экспоненциальных функций и степенных с нецелыми рациональными показателями, то есть корней (радикалов).

Часто при попытке упрощения выражения в Maxima может происходить на самом деле только его усложнение. Увеличение результата может происходить из-за того, что неизвестно, какие значения могут принимать переменные, входящие в выражение. Чтобы этого избежать, следует накладывать ограничения на значения, которые может принимать переменная. Делается это с помощью функции assume(условие). Поэтому в некоторых случаях наилучшего результата можно добиться, комбинируя radcan() с ratsimp() или fullratsimp().

− a 2 b 2

aba1 / 4

Пример. Упростить выражение

b a b a 2 1 / 4

a 2− b 2.

Если применить к нашему выражению команду упростить рационально, то получим:

Применим функцию assume(условие) и наложим с ее помощью на некоторые переменные, входящие в выражение, ограничения на их значения:

Т.Н. Губина, Е.В. Андропова

Как видим, получили компактный результат.

1.9. Решение алгебраических уравнений и их систем

В система Maxima для решения линейных и нелинейных уравнений используется встроенная функция solve, имеющая следующий синтаксис:

solve (expr, x) – решает алгебраическое уравнение expr относительно переменнойx

solve (expr) – решает алгебраическое уравнение expr относительно неизвестной переменной, входящей в уравнение.

Например, решим линейное уравнение 5 x + 8 = 0 . Для этого воспользуемся кнопкойРешить на панели инструментов, при нажатии на которую появляется диалоговое окноРешить (Рис.13). Вводим исходное уравнение и нажимаемOK .

Рис. 13. Диалоговое окно для решения уравнений

В результате в рабочем документе сформируется команда для решения уравнения и выведется найденное решение:

Глава 1 Основы работы в системе компьютерной математики Maxima

Команду для решения уравнений можно задавать таким образом, чтобы можно было легко выполнять проверку найденных решений. Для этого целесообразно воспользоваться командой подстановки ev.

Например, решим алгебраическое уравнение x 3 + 1 = 0 и выполним проверку найденных решений.

В результате получили три корня. Под именем resh у нас хранится список значений - корней уравнения. Элементы списка заключены в квадратные скобки и отделены один от другого запятой. К каждому такому элементу списка можно обратиться по его номеру. Воспользуемся этим при проверке решений: подставим поочередно каждый из корней в исходное уравнение.

С помощью команды allroots (expr) можно найти все приближенные решения алгебраического уравнения. Данную команду можно использовать в том случае, если команда solve не смогла найти решение уравнения или решение получается слишком громоздким, как, например, для следующего уравнения: (1 + 2 x )3 = 13.5(1 + x 5 ) .

Т.Н. Губина, Е.В. Андропова

С помощью команды solve можно находить решение систем линейных алгебраических уравнений. Например, система линейных уравнений

ì x +2 y +3 z +4 k +5 m =13

2 x+ y+ 2 z+ 3 k+ 4 m= 10

2 x + 2 y + z + 2 k + 3 m = 11 может быть решена следующим образом:

2 x+ 2 y+ 2 z+ k+ 2 m= 6

ï 2 x +2 y +2 z +2 k +m =3

1. Сохраним каждое из уравнений системы под именами eq1, eq2, eq3, eq4, eq5.

2. Находим решение системы.

3. Выполним проверку найденного решения:

Таким образом, при подстановке полученного решения в каждое из уравнений системы получены верные равенства.

Функция solve системы Maxima может решать и системы линейных уравнений в случае, если решение не единственно. Тогда она прибегает к обозначениям вида %r_number чтобы показать, что неизвестная переменная является свободной и может принимать любые значения.

Для решения систем нелинейных уравнений можно воспользоваться командой algsys. Например, найдем решение системы уравнений

Поделиться: