Основы Maxima
2.7.4 Математические функции
В Maxima имеется достаточно большой набор встроенных математических функций. Перечень основных классов встроенных функций приведён ниже:
- тригонометрические функции:
(синус),
(косинус),
(тангенс),
(котангенс);
- обратные тригонометрические функции:
(арксинус),
(арккосинус),
(арктангенс),
(арккотангенс);
-
(секанс,
,
(косеканс,
);
-
(гиперболический синус),
(гиперболический косинус),
(гиперболический тангенс),
(гиперболический котангенс),
(гиперболический секанс),
(гиперболический косеканс);
-
(натуральный логарифм);
-
(квадратный корень);
-
(остаток от деления);
-
(модуль);
-
и
— нахождение минимального и максимального значения в списке аргументов;
-
(определяет знак аргумента:
— положительный,
— отрицательный,
— не определён,
— значение равно нулю);
- Специальные функции — функции Бесселя, гамма-функция, гипергеометрическая функция и др.;
- Эллиптические функции различных типов.
2.7.5 Вычисление и преобразование аналитических выражений
Функция ev является основной функцией, обрабатывающей выражения. Синтаксис вызова:
Функция вычисляет выражение expr в окружении, определяемом аргументами
. Аргументы могут быть ключами (булевскими флагами, присваиваниями, уравнениями и функциями. Функция ev возвращает результат (другое выражение).
Во многих случаях можно опускать имя функции (т.е. применять значения переменных к некоторому выражению)
![expr,flag1,flag2,\dots\\
expr,x=val1,y=val2,\dots\\
expr,flag1,x=val1,y=val2,flag2,\dots](/sites/default/files/tex_cache/494afc3dca85ab0fbd67af19663b5975.png)
На выражение expr по умолчанию действует функция упрощения. Необходимость выполнения упрощения регулируется флагом (если установить
, упрощение будет отключено). Кроме того, используют флаги
и
, определяющие формат представления рациональных чисел (в виде дробей или с плавающей точкой) и результатов вычисления математических функций. Флаг
определяет необходимость вычисления применительно к логическим выражениям.
Аргументами могут быть и встроенные функции, выполняющие упрощение или преобразование выражений (
) или функция
.
Если указаны подстановки (в виде или
), то они выполняются.
При этом повторный вызов функции вполне способен ещё раз изменить выражение, т.е. обработка выражения не идёт до конца при однократном вызове функции
.
Пример:
(%i1) ev((a+b)^2,expand);
![{b}^{2}+2\,a\,b+{a}^{2}\leqno{(\%o1) }](/sites/default/files/tex_cache/beeea7102f7d21f745e0908ce16be504.png)
(%i2) ev((a+b)^2,a=x);
![{\left( x+b\right) }^{2}\leqno{(\%o2) }](/sites/default/files/tex_cache/7dc612de32d975d7973b0704612d5c86.png)
(%i3) ev((a+b)^2,a=x,expand,b=7)
![{x}^{2}+14\,x+49\leqno{(\%o3) }](/sites/default/files/tex_cache/c8dd34ed63f7365279e246149199e002.png)
Другой пример показывает применение к отложенному вычислению производной:
(%i1) sin(x) + cos(y) + (w+1)^2 + 'diff (sin(w), w);
![cos\left( y\right) +sin\left( x\right) +\frac{d}{d\,w}\,sin\left( w\right) +{\left( w+1\right) }^{2}\leqno{(\%o1) }](/sites/default/files/tex_cache/7936104c97ef05d1157766f19959b959.png)
(%i2) ev (%, sin, expand, diff, x=2, y=1);
![cos\left( w\right) +{w}^{2}+2\,w+cos\left( 1\right) +1.909297426825682\leqno{(\%o2) }](/sites/default/files/tex_cache/6ab4c80ae94aa698722c39ea0344c1ef.png)
Флаг разрешает либо запрещает упрощение выражений. Изначально он равен
, если установить его равным
, то упрощения производиться не будут:
(%i1) f:a+2*a+3*a+4*a;
![10\,a\leqno{(\%o1) }](/sites/default/files/tex_cache/00c3a37ae7ffcb1e8224e47bce3129b3.png)
(%i2) simp:false;
![false\leqno{(\%o2) }](/sites/default/files/tex_cache/70c6e7f08a0dbb64fd50b91be457f301.png)
(%i3) f:a+2*a+3*a+4*a;
![a+2\,a+3\,a+4\,a\leqno{(\%o3) }](/sites/default/files/tex_cache/e74a13ef34dbb1fae0410654fdf007bf.png)
Функцию ev не обязательно указывать явно, например:
(%i3) x+y, x: a+y, y: 2;
![y+a+2\leqno{(\%o3) }](/sites/default/files/tex_cache/bf9f0db017409702d16dd23eacb2a84a.png)
Оператор, принудительного вычисления, обозначенный двумя апострофами, является синонимом к функции (выражение). Сама функция
предоставляет гораздо более широкие возможности, нежели простое принудительное вычисление заданного выражения: она может принимать произвольное число аргументов, первый из которых — вычисляемое выражение, а остальные — специальные опции, которые как раз и влияют на то, как именно будет производиться вычисление.
В терминологии Maxima невычисленная форма выражения называется "noun form", вычисленная — "verb form". Сохраняя лингвистические параллели, на русский это можно перевести как "несовершенная форма" и "совершённая форма". Значение вводимого выражения в Maxima закономерно сохраняется до его вычисления (т. е. в несовершенной форме), а значение выводимого выражения — после (т. е. в совершённой); другими словами, тут имеется естественный порядок "ввод — вычисление — вывод".
Функция факторизует (т.е. представляет в виде произведения некоторых сомножителей) заданное выражение (функция
— аналогично, но на множестве комплексных чисел и выражений).
Пример:
(%i1) x^3-1,factor;
![\left( x-1\right) \,\left( {x}^{2}+x+1\right) \leqno{(\%o1) }](/sites/default/files/tex_cache/b508dd8456eab23b1811fffd30921451.png)
(%i2) factor(x^3-1);
![\left( x-1\right) \,\left( {x}^{2}+x+1\right) \leqno{(\%o2) }](/sites/default/files/tex_cache/a42f4609a566e6895f62abae02a9a4e4.png)
Ещё примеры факторизации различных выражений:
(%i3) factor (-8*y - 4*x + z^2*(2*y + x));
![\left( 2\,y+x\right) \,\left( z-2\right) \,\left( z+2\right) \leqno{(\%o3) }](/sites/default/files/tex_cache/47e71aa6270c90c064e319e760832e3c.png)
(%i4) factor (2^63 - 1);
![{7}^{2}\,73\,127\,337\,92737\,649657\leqno{(\%o4) }](/sites/default/files/tex_cache/b62b8b0bec4dbe7909d25b69193e2064.png)
(%i5) factor (1 + %e^(3*x));
![\left( {e}^{x}+1\right) \,\left( {e}^{2\,x}-{e}^{x}+1\right) \leqno{(\%o5) }](/sites/default/files/tex_cache/548bd5d4e25fd3efddcc4354cdce2b08.png)
Пример использования функции :
(%i6) gfactor(x^2+a^2);
![\left( x-i\,a\right) \,\left( x+i\,a\right) \leqno{(\%o6) }](/sites/default/files/tex_cache/5bd354921985da5050c301352386bd3e.png)
(%i7) gfactor(x^2+2*%i*x*a-a^2);
![{\left( x+i\,a\right) }^{2}\leqno{(\%o7) }](/sites/default/files/tex_cache/6dc895e70eccf3b1ba943ad430b2a920.png)
Функция факторизует отдельные слагаемые в выражении.
(%i8) expand ((x + 1)*((u + v)^2 + a*(w + z)^2));
![ax{z}^{2} + a{z}^{2} + 2awxz + 2awz + a{w}^{2}x + {v}^{2}x + 2uvx + {u}^{2}x + a{w}^{2} + {v}^{2} + 2uv + {u}^{2}\leqno{(\%o8) }](/sites/default/files/tex_cache/39b98802dfd0e851eac4c726279c3c52.png)
(%i9) factorsum(%);
![\left( x+1\right) \,\left( a\,{\left( z+w\right) }^{2}+{\left( v+u\right) }^{2}\right) \leqno{(\%o9) }](/sites/default/files/tex_cache/703a65a3aa2f23ff60057893780c65c4.png)
Функция отличается от
тем же, чем
отличается от
:
(%i10) gfactorsum( a^3+3*a^2*b+3*a*b^2+b^3+x^2+2*%i*x*y-y^2 );
![{\left( b+a\right) }^{3}-{\left( y-i\,x\right) }^{2}\leqno{(\%o10) }](/sites/default/files/tex_cache/183e3f479ab24172b57b96e3343fae34.png)
Функция раскрывает скобки, выполняет умножение, возведение в степень, например:
(%i1) expand((x-a)^3);
![{x}^{3}-3\,a\,{x}^{2}+3\,{a}^{2}\,x-{a}^{3}\leqno{(\%o1) }](/sites/default/files/tex_cache/b1964cb792ea27e5e1b0c8c11ff47b6d.png)
(%i2) expand((x-a)*(y-b)*(z-c));
![x\,y\,z-a\,y\,z-b\,x\,z+a\,b\,z-c\,x\,y+a\,c\,y+b\,c\,x-a\,b\,c\leqno{(\%o2) }](/sites/default/files/tex_cache/d5f0223cb1b07c597e1788878762206c.png)
(%i3) expand((x-a)*(y-b)^2);
![x\,{y}^{2}-a\,{y}^{2}-2\,b\,x\,y+2\,a\,b\,y+{b}^{2}\,x-a\,{b}^{2}\leqno{(\%o3) }](/sites/default/files/tex_cache/1445594cc3d52996e9837e080c1be281.png)
Функция объединяет слагаемые с идентичным знаменателем
(%i5) combine(x/(1+x^2)+y/(1+x^2));
![\frac{y+x}{{x}^{2}+1}\leqno{(\%o5) }](/sites/default/files/tex_cache/674eade58fdc3192debb2682fe03f6a1.png)
Функция приводит выражение к общему знаменателю, не раскрывая скобок и не пытаясь факторизовать слагаемые
(%i6) xthru( 1/(x+y)^10+1/(x+y)^12 );
![\frac{{\left( y+x\right) }^{2}+1}{{\left( y+x\right) }^{12}}\leqno{(\%o6) }](/sites/default/files/tex_cache/701bb395528fa657e7fb7214b2ffd2bc.png)
(%i1) ((x+2)^20 - 2*y)/(x+y)^20 + (x+y)^(-19) - x/(x+y)^20;
![\frac{1}{{\left( y+x\right) }^{19}}+\frac{{\left( x+2\right) }^{20}-2\,y}{{\left( y+x\right) }^{20}}-\frac{x}{{\left( y+x\right) }^{20}}\leqno{(\%o1) }](/sites/default/files/tex_cache/6bb7f0657f6af263e740e59bcf6dcfc5.png)
(%i2) xthru (%);
![\frac{{\left( x+2\right) }^{20}-y}{{\left( y+x\right) }^{20}}\leqno{(\%o2) }](/sites/default/files/tex_cache/2d8d2810902294532a9489cb6ac01c26.png)
Функция умножает каждое слагаемое в сумме на множитель, причём при умножении скобки в выражении не раскрываются. Она допускает два варианта синтаксиса:
В последнем случае выражение expr включает и множитель и сумму (см. (%i4) в примере ниже).
Пример:
(%i1) x/(x-y)^2 - 1/(x-y) - f(x)/(x-y)^3;
![-\frac{1}{x-y}+\frac{x}{{\left( x-y\right) }^{2}}-\frac{f\left( x\right) }{{\left( x-y\right) }^{3}}\leqno{(\%o1) }](/sites/default/files/tex_cache/afe214c7b7f45c0203af5e19ff3b9878.png)
(%i2) multthru ((x-y)^3, %);
![-{\left( x-y\right) }^{2}+x\,\left( x-y\right) -f\left( x\right) \leqno{(\%o2) }](/sites/default/files/tex_cache/72b6c27271075a0898e1ed2b3d5f1339.png)
(%i3) ((a+b)^10*s^2 + 2*a*b*s + (a*b)^2)/(a*b*s^2);
![\frac{{\left( b+a\right) }^{10}\,{s}^{2}+2\,a\,b\,s+{a}^{2}\,{b}^{2}}{a\,b\,{s}^{2}}\leqno{(\%o3) }](/sites/default/files/tex_cache/d6d62ac285c19fa986993369e14dc1a3.png)
(%i4) multthru (%);
![\frac{2}{s}+\frac{a\,b}{{s}^{2}}+\frac{{\left( b+a\right) }^{10}}{a\,b}\leqno{(\%o4) }](/sites/default/files/tex_cache/834051ccde00ff4c3abe954d927b4de8.png)
Функции assume (ввод ограничений) и (снятие ограничений) позволяют управлять условиями выполнения (контекстом) прочих функций и операторов.
Пример:
(%i20) sqrt(х^2); (%o20) |x| (%i21) assume (x<0); (%o21) [ x< 0 ] (%i22) sqrt(х^2); (%o22) -x (%i23) forget(x<0); (%o23) [ x< 0 ] (%i24) sqrt (х^2) ; (%o24) |x|
Функция позволяет вычислить частное и остаток от деления одного многочлена на другой:
(%i1) divide(x^3-2,x-1);
![[{x}^{2}+x+1,-1]\leqno{(\%o1) }](/sites/default/files/tex_cache/01aa517b1e26d0502cfce623bb81fb92.png)
Первый элемент полученного списка — частное, второй — остаток от деления.
Функция позволяет найти наибольший общий делитель многочленов.
Подстановки осуществляются функцией . Вызов этой функции:
(подставляем
вместо
в выражении
).
Пример:
(%i1) subst (a, x+y, x + (x+y)^2 + y);
![y+x+{a}^{2}\leqno{(\%o1) }](/sites/default/files/tex_cache/a67573741882c65a368b805e83643ded.png)