Основы Maxima
2.7.7 Преобразование тригонометрических выражений
Функция раскладывает все тригонометрические и гиперболические функции от сумм и произведений в комбинации соответствующих функций единичных углов и аргументов. Для усиления пользовательского контроля один вызов
выполняет упрощение на одном уровне. Для управления вычислением имеется флаг
. Изначально флаг
установлен в
. Если флаг
установить в
, то функция
будет работать до тех пор, пока выражение не перестанет меняться.
(%i1) x+sin(3*x)/sin(x),trigexpand=true,expand;
![-{sin\left( x\right) }^{2}+3\,{cos\left( x\right) }^{2}+x\leqno{(\%o1) }](/sites/default/files/tex_cache/0833580a8cc9af0b627e30c8a2e74274.png)
(%i2) trigexpand(sin(10*x+y));
![cos\left( 10\,x\right) \,sin\left( y\right) +sin\left( 10\,x\right) \,cos\left( y\right) \leqno{(\%o2) }](/sites/default/files/tex_cache/9604c9b0d1eecda5bf0e2357e2438330.png)
(%i3) trigexpand(sin(3*x)+cos(4*x));
![{sin\left( x\right) }^{4}-{sin\left( x\right) }^{3}-6\,{cos\left( x\right) }^{2}\,{sin\left( x\right) }^{2}+3\,{cos\left( x\right) }^{2}\,sin\left( x\right) +{cos\left( x\right) }^{4}\leqno{(\%o3) }](/sites/default/files/tex_cache/b1a9f308e0b78c1f14119a0b5d9fa58e.png)
Функция trigreduce свёртывает все произведения тригонометрических и гиперболических функций в комбинации соответствующих функции от сумм. Функция работает не до конца, так что повторный вызов может изменить выражение. При вызове функции в формате trigreduce(expr,x) преобразования осуществляются относительно функций x.
Примеры:
(%i8) trigreduce(cos(x)^4 + cos(x)^3 + cos(x)^2 + cos(x) + 1);
![\frac{cos\left( 4\,x\right) +4\,cos\left( 2\,x\right) +3}{8}+\frac{cos\left( 3\,x\right) +3\,cos\left( x\right) }{4}+\frac{cos\left( 2\,x\right) +1}{2}+cos\left( x\right) +1\leqno{(\%o8) }](/sites/default/files/tex_cache/623ce7cfcc198f287795f6053a090d78.png)
(%i9) trigreduce(-sin(x)^2+3*cos(x)^2+x);
![\frac{cos\left( 2\,x\right) }{2}+3\,\left( \frac{cos\left( 2\,x\right) }{2}+\frac{1}{2}\right) +x-\frac{1}{2}\leqno{(\%o9) }](/sites/default/files/tex_cache/ed8d2533d23ca226f9f7f1e87fbec5fa.png)
Функция упрощает тригонометрические и и гиперболические выражения, применяя к ним правила
и
.
(%i1) trigsimp(sin(x)^2+3*cos(x)^2);
![2\,{cos\left( x\right) }^{2}+1\leqno{(\%o1) }](/sites/default/files/tex_cache/42646fd74893b5fcada0c798993d41f1.png)
(%i2) trigsimp(sinh(x)^2+3*cosh(x)^2);
![4\,{cosh\left( x\right) }^{2}-1\leqno{(\%o2) }](/sites/default/files/tex_cache/eca500866592d10a7c785cbc442f29f8.png)
Функция (синтаксис вызова
) приводит заданное тригонометрическое выражение
к канонической упрощённой квазилинейной форме. Это выражение рассматривается как рациональное, содержащее
, аргументы которых линейные формы некоторых переменных и
(
— целое). Всегда, когда возможно, заданное выражение линеаризуется.
Пример:
(%i1) trigrat((1+sin(2*b)-cos(2*b))/sin(b));
![2\,sin\left( b\right) +2\,cos\left( b\right) \leqno{(\%o1) }](/sites/default/files/tex_cache/60505e6d739af56f678808bfb564b9ea.png)
2.7.8 Преобразование степенных и логарифмических выражений
Функция radcan упрощает выражения, содержащие экспоненты, логарифмы и радикалы, путём преобразования к форме, которая является канонической для широкого класса выражений. Переменные в выражении упорядочиваются. Эквивалентные выражения в этом классе не обязательно одинаковы, но их разность упрощается применением radcan до нуля.
Примеры:
(%i1) (log(x+x^2)-log(x))^a/log(1+x)^(a/2);
![\frac{{\left( log\left( {x}^{2}+x\right) -log\left( x\right) \right) }^{a}}{{log\left( x+1\right) }^{\frac{a}{2}}}\leqno{(\%o1) }](/sites/default/files/tex_cache/95ea5a6ff576d8a373ec67a340111be1.png)
(%i2) radcan(%);
![{log\left( x+1\right) }^{\frac{a}{2}}\leqno{(\%o2) }](/sites/default/files/tex_cache/d4edad38b8dd06e034f5974ad6350328.png)
(%i10) (%e^x-1)/(1+%e^(x/2));
![\frac{{e}^{x}-1}{{e}^{\frac{x}{2}}+1}\leqno{(\%o10) }](/sites/default/files/tex_cache/bb9f07a3498fdd304aa0d9e01ca49857.png)
(%i11) radcan(%);
![{e}^{\frac{x}{2}}-1\leqno{(\%o11) }](/sites/default/files/tex_cache/cfc4484128b9632727d552faa64ba0d5.png)
Функция рекурсивно сканирует выражение
, преобразуя выражения вида
к форме
.
Пример:
(%i1) 2*(a*log(x)+3*b*log(y));
![2\,\left( 3\,b\,log\left( y\right) +a\,log\left( x\right) \right) \leqno{(\%o1) }](/sites/default/files/tex_cache/3868470d6483c71c12048d632ba53b6b.png)
(%i2) logcontract(%);
![b\,log\left( {y}^{6}\right) +a\,log\left( {x}^{2}\right) \leqno{(\%o2) }](/sites/default/files/tex_cache/e70062cdf2fc5484cd94fe198bca5f65.png)
Если объявить переменную целой (используя
), функция
позволяет включить эту переменную в показатель степени:
(%i1) declare(n,integer);
![done\leqno{(\%o1) }](/sites/default/files/tex_cache/330cf09509d2c464e180ad139c9e45c8.png)
(%i2) logcontract(3*a*n*log(x));
![a\,log\left( {x}^{3\,n}\right) \leqno{(\%o2) }](/sites/default/files/tex_cache/556e8dd81ca0a7fdf09a7e2b950cd1a4.png)
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;
![f(x):=x^2\leqno{(\%o44) }](/sites/default/files/tex_cache/b18688e39558b470b64b67c7894f46d4.png)
(%i45) f(3 + 7);
![100\leqno{(\%o45) }](/sites/default/files/tex_cache/562f4063a667c98c6ab329e57cf9513a.png)
Не следует использовать для функций названия, зарезервированные для встроенных функций Maxima. Для создания функций используется также встроенная функция , которая позволяет преобразовать выражение в функцию. Синтаксис вызова
довольно многообразен:
Варианты вызова функции различаются, какой именно объект создаётся: ординарная функция (аргументы в круглых скобках) или массив (аргументы в квадратных скобках). Если первый аргумент — операторы
, то функция создаётся и вычисляется (аналогично и ev).
Примеры:
Ординарная функция:
(%i1) expr : cos(y) - sin(x);
![cos\left( y\right) -sin\left( x\right) \leqno{(\%o1) }](/sites/default/files/tex_cache/fe033be197402b3be517379520a2e7aa.png)
(%i2) define (F1 (x, y), expr);
![F1\left( x,y\right) :=cos\left( y\right) -sin\left( x\right) \leqno{(\%o2) }](/sites/default/files/tex_cache/6c92f493c895b85c8abe38975fcacafc.png)
(%i3) factor(F1(a,b));
![cos\left( b\right) -sin\left( a\right) \leqno{(\%o3) }](/sites/default/files/tex_cache/aa225768f17bdea68e0ab349f13e023d.png)
Создание функции-массива:
(%i1) define (G2 [x, y], x.y - y.x);
![{G2}_{x,y}:=x.y-y.x\leqno{(\%o1) }](/sites/default/files/tex_cache/f8313d719fafc21215e743c95ccfd379.png)
Создание массива:
(%i2) define (arraymake (F, [u]), cos(u) + 1);
![{F}_{u}:=cos\left( u\right) +1\leqno{(\%o2) }](/sites/default/files/tex_cache/e1810d7ec7aa7370e1698798370eb5d9.png)
Использование функции для задания пользовательской функции:
(%i3) define (ev (foo (x, y)), sin(x) - cos(y));
![foo\left(x,y\right) :=sin\left(x\right) - cos\left(y\right) \leqno{(\%o3) }](/sites/default/files/tex_cache/196aa9e3500be983dea4114f3c5649c8.png)