Основы Maxima
2.7.7 Преобразование тригонометрических выражений
Функция раскладывает все тригонометрические и гиперболические функции от сумм и произведений в комбинации соответствующих функций единичных углов и аргументов. Для усиления пользовательского контроля один вызов выполняет упрощение на одном уровне. Для управления вычислением имеется флаг . Изначально флаг установлен в . Если флаг установить в , то функция будет работать до тех пор, пока выражение не перестанет меняться.
(%i1) x+sin(3*x)/sin(x),trigexpand=true,expand;
(%i2) trigexpand(sin(10*x+y));
(%i3) trigexpand(sin(3*x)+cos(4*x));
Функция trigreduce свёртывает все произведения тригонометрических и гиперболических функций в комбинации соответствующих функции от сумм. Функция работает не до конца, так что повторный вызов может изменить выражение. При вызове функции в формате trigreduce(expr,x) преобразования осуществляются относительно функций x.
Примеры:
(%i8) trigreduce(cos(x)^4 + cos(x)^3 + cos(x)^2 + cos(x) + 1);
(%i9) trigreduce(-sin(x)^2+3*cos(x)^2+x);
Функция упрощает тригонометрические и и гиперболические выражения, применяя к ним правила и .
(%i1) trigsimp(sin(x)^2+3*cos(x)^2);
(%i2) trigsimp(sinh(x)^2+3*cosh(x)^2);
Функция (синтаксис вызова ) приводит заданное тригонометрическое выражение к канонической упрощённой квазилинейной форме. Это выражение рассматривается как рациональное, содержащее , аргументы которых линейные формы некоторых переменных и ( — целое). Всегда, когда возможно, заданное выражение линеаризуется.
Пример:
(%i1) trigrat((1+sin(2*b)-cos(2*b))/sin(b));
2.7.8 Преобразование степенных и логарифмических выражений
Функция radcan упрощает выражения, содержащие экспоненты, логарифмы и радикалы, путём преобразования к форме, которая является канонической для широкого класса выражений. Переменные в выражении упорядочиваются. Эквивалентные выражения в этом классе не обязательно одинаковы, но их разность упрощается применением radcan до нуля.
Примеры:
(%i1) (log(x+x^2)-log(x))^a/log(1+x)^(a/2);
(%i2) radcan(%);
(%i10) (%e^x-1)/(1+%e^(x/2));
(%i11) radcan(%);
Функция рекурсивно сканирует выражение , преобразуя выражения вида к форме .
Пример:
(%i1) 2*(a*log(x)+3*b*log(y));
(%i2) logcontract(%);
Если объявить переменную целой (используя ), функция позволяет включить эту переменную в показатель степени:
(%i1) declare(n,integer);
(%i2) logcontract(3*a*n*log(x));
2.7.9 Пользовательские функции
Для записи функции необходимо указать её название, а затем, в круглых скобках записать через запятую значения аргументов. Если значением аргумента является список, то он заключается в квадратные скобки, а элементы списка также разделяются запятыми.
Пример:
sin(x); integrate(sin(x),x,-5,5); plot2d([sin(x)+3,cos(x)],[x,-%pi,%pi],[y,-5,5]);
Пользователь может задать собственные функции. Для этого сначала указывается название функции, в скобках перечисляются названия аргументов, после знаков := (двоеточие и равно) следует описание функции. После задания пользовательская функция вызывается точно так, как и встроенные функции Maxima.
Пример:
(%i44) f(x):=x^2;
(%i45) f(3 + 7);
Не следует использовать для функций названия, зарезервированные для встроенных функций Maxima. Для создания функций используется также встроенная функция , которая позволяет преобразовать выражение в функцию. Синтаксис вызова довольно многообразен:
Варианты вызова функции различаются, какой именно объект создаётся: ординарная функция (аргументы в круглых скобках) или массив (аргументы в квадратных скобках). Если первый аргумент — операторы , то функция создаётся и вычисляется (аналогично и ev).
Примеры:
Ординарная функция:
(%i1) expr : cos(y) - sin(x);
(%i2) define (F1 (x, y), expr);
(%i3) factor(F1(a,b));
Создание функции-массива:
(%i1) define (G2 [x, y], x.y - y.x);
Создание массива:
(%i2) define (arraymake (F, [u]), cos(u) + 1);
Использование функции для задания пользовательской функции:
(%i3) define (ev (foo (x, y)), sin(x) - cos(y));