Previous: Операторы отношения, Up: Операторы   [Contents][Index]

5.7 Общие операторы

Оператор: ^^

Оператор некоммутативного возведение в степень. ^^ - оператор некоммутативного возведение в степень, соответствующий некоммутативному умножению ., ровно так же как обычный оператор возведение в степень ^ соответствует коммутативному умножению *.

Некоммутативное возведение в степень отображается как ^^ в 1D (одномерном) выводе, и в виде показателя степени как верхний индекс в угловых скобка < > в 2D (двумерном) выводе.

Примеры:

(%i1) a . a . b . b . b + a * a * a * b * b;
                        3  2    <2>    <3>
(%o1)                  a  b  + a    . b
(%i2) string (a . a . b . b . b + a * a * a * b * b);
(%o2)                  a^3*b^2+a^^2 . b^^3
Оператор: !

Оператор факториала. Для всех комплексных чисел x (включая целые, рациональные, и вещественные числа), за исключением отрицательных целых, x! задается как gamma(x+1).

Для целого x, x! упрощается до произведения целых чисел от 1 до x включительно. 0! упрощается до 1. Для чисел с плавающей точкой x, x! упрощается до значения gamma (x+1). Для x равных n/2, где n - нечетное целое, x! упрощается до рационального множителя, умноженного на sqrt (%pi) (т. к. gamma (1/2) равно sqrt (%pi)). Если x - что то еще, то x! не упрощается.

Переменные factlim, minfactorial и factcomb управляют упрощением выражений, содержащих факториалы.

Функции gamma, bffac и cbffac являются разновидностями гамма функции. makegamma заменяет gamma для факториалов и связанных функций.

См. также binomial.

Факториал целого, полуцелого или аргумента с плавающей точкой, упрощается если операнд не больше чем factlim.

(%i1) factlim : 10;
(%o1)                          10
(%i2) [0!, (7/2)!, 4.77!, 8!, 20!];
            105 sqrt(%pi)
(%o2)   [1, -------------, 81.44668037931199, 40320, 20!]
                 16

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

(%i1) [(%i + 1)!, %pi!, %e!, (cos(1) + sin(1))!];
(%o1)      [(%i + 1)!, %pi!, %e!, (sin(1) + cos(1))!]
(%i2) ev (%, numer, %enumer);
(%o2) [(%i + 1)!, 7.188082728976037, 4.260820476357, 
                                               1.227580202486819]

Факториал символа, не имеющего значения, не упрощается.

(%i1) kill (foo);
(%o1)                         done
(%i2) foo!;
(%o2)                         foo!

Факториалы упрощаются, а не вычисляются. Таким образом, x! можно заменять даже в экранированном (quoted) выражении.

(%i1) '([0!, (7/2)!, 4.77!, 8!, 20!]);
          105 sqrt(%pi)
(%o1) [1, -------------, 81.44668037931199, 40320, 
               16
                                             2432902008176640000]
Оператор: !!

Оператор двойного факториала.

Для целого, числа с плавающей точкой или рационального числа n, n!! вычисляется как произведение n (n-2) (n-4) (n-6) ... (n - 2 (k-1)) где k равно entier (n/2), то есть, наибольшее целое меньше или равное n/2. Заметим, что это определение не совпадает с другими опубликованными определениями для нецелых аргументов.

Для четного (или нечетного) целого n, n!! вычисляется как произведение всех последовательных четных (или нечетных) целых от 2 (или 1) до n включительно.

Для аргумента n, который не является целым, числом с плавающей точкой, или рациональным числом, n!! дает невычисляемую форму genfact (n, n/2, 2).

Оператор: #

Обозначает отрицание синтаксического равенства =.

Заметим, что из-за правил для вычисления предикатных выражений (в частности из-за того, что not expr вызывает вычисление expr), not a = b эквивалентно is(a # b), вместо a # b.

Примеры:

(%i1) a = b;
(%o1)                         a = b
(%i2) is (a = b);
(%o2)                         false
(%i3) a # b;
(%o3)                         a # b
(%i4) not a = b;
(%o4)                         true
(%i5) is (a # b);
(%o5)                         true
(%i6) is (not a = b);
(%o6)                         true
Оператор: .

Оператор "точка" предназначен для матричного (некоммутативного) умножения. Когда "." используется таким образом, пробелы должны присутствовать с обеих сторон, то есть A . B. Это позволяет различать оператор от десятичной точки в числе с плавающей точкой.

См. также dot, dot0nscsimp, dot0simp, dot1simp, dotassoc, dotconstrules, dotdistrib, dotexptsimp, dotident, и dotscrules.

Оператор: :

Оператор присваивания.

Если левая сторона есть простая переменная (не переменная с индексом), то : вычисляет правую сторону присваивания и присваивает значение с левой частью.

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

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

Если левая строна присваивания есть список простых переменных и/или переменных с индексом, то правая часть должна вычисляться в список, и элементы этого списка присваиваются элементам левой части параллельно.

См. также kill и remvalue, которые отменяют присваивание.

Примеры:

Присваивание простой переменной.

(%i1) a;
(%o1)                           a
(%i2) a : 123;
(%o2)                          123
(%i3) a;
(%o3)                          123

Присваивание элементу списка.

(%i1) b : [1, 2, 3];
(%o1)                       [1, 2, 3]
(%i2) b[3] : 456;
(%o2)                          456
(%i3) b;
(%o3)                      [1, 2, 456]

Присваивание создает необъявленный массив.

(%i1) c[99] : 789;
(%o1)                          789
(%i2) c[99];
(%o2)                          789
(%i3) c;
(%o3)                           c
(%i4) arrayinfo (c);
(%o4)                   [hashed, 1, [99]]
(%i5) listarray (c);
(%o5)                         [789]

Множественные присваивания.

(%i1) [a, b, c] : [45, 67, 89];
(%o1)                     [45, 67, 89]
(%i2) a;
(%o2)                          45
(%i3) b;
(%o3)                          67
(%i4) c;
(%o4)                          89

Множественные присваивания выполняются параллельно. В этом примере переменные a и b обмениваются значениями.

(%i1) [a, b] : [33, 55];
(%o1)                       [33, 55]
(%i2) [a, b] : [b, a];
(%o2)                       [55, 33]
(%i3) a;
(%o3)                          55
(%i4) b;
(%o4)                          33
Оператор: ::

Оператор присваивания.

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

Примеры:

(%i1) x : 'foo;
(%o1)                          foo
(%i2) x :: 123;
(%o2)                          123
(%i3) foo;
(%o3)                          123
(%i4) x : '[a, b, c];
(%o4)                       [a, b, c]
(%i5) x :: [11, 22, 33];
(%o5)                     [11, 22, 33]
(%i6) a;
(%o6)                          11
(%i7) b;
(%o7)                          22
(%i8) c;
(%o8)                          33
Оператор: ::=

Оператор определения макро функции. ::= задает функцию (называемую "макрос" по историческим причинам) которое экранирует (quote) свои аргументы, и выражение, которое она возвращает (называемое "макро расширение"), вычисляется в том контексте, из которого этот макрос был вызван. В других отношениях макро функция такая же как и обыкновенная функция.

Функция macroexpand возвращает макро расширение (без ее вычисления). macroexpand (foo (x)) следующее за ''% эквивалентно foo (x), где foo есть макро функция.

Оператор ::= помещает имя новой макро функции в глобальный список macros. Функции kill, remove и remfunction удаляет определения макро функций и удаляет имена из macros.

Функции fundef или dispfun, соответственно, возвращает определение макро функции или присваивает его метке.

Макро функции обычно содержат buildq и splice выражения для конструирования выражения, которое затем вычисляется.

Примеры.

Макро функция экранирует свои аргументы, так что сообщение (1) показывает выражение y - z, а не значение y - z. Макро расширение (экранированное выражение '(print ("(2) x равно ", x)) вычисляется в том контексте, из которого этот макрос был вызван, печатая сообщение (2).

(%i1) x: %pi;
(%o1)                          %pi
(%i2) y: 1234;
(%o2)                         1234
(%i3) z: 1729 * w;
(%o3)                        1729 w
(%i4) printq1 (x) ::= block (print ("(1) x is equal to", x),
      '(print ("(2) x is equal to", x)));
(%o4) printq1(x) ::= block(print("(1) x is equal to", x), 
                                '(print("(2) x is equal to", x)))
(%i5) printq1 (y - z);
(1) x is equal to y - z 
(2) x is equal to %pi 
(%o5)                          %pi

Обыкновенная функция вычисляет свои аргументы, так что сообщение (1) показывает значение y - z. Возвращаемое значение не вычисляется, так что сообщение (2) не печатается до момента явного вычисления ''%.

(%i1) x: %pi;
(%o1)                          %pi
(%i2) y: 1234;
(%o2)                         1234
(%i3) z: 1729 * w;
(%o3)                        1729 w
(%i4) printe1 (x) := block (print ("(1) x is equal to", x),
      '(print ("(2) x is equal to", x)));
(%o4) printe1(x) := block(print("(1) x is equal to", x), 
                                '(print("(2) x is equal to", x)))
(%i5) printe1 (y - z);
(1) x is equal to 1234 - 1729 w 
(%o5)              print((2) x is equal to, x)
(%i6) ''%;
(2) x is equal to %pi 
(%o6)                          %pi

Функция macroexpand возвращает макро расширение. Выражение macroexpand (foo (x)), идущее перед ''% эквивалентно foo (x), когда foo есть макро функция.

(%i1) x: %pi;
(%o1)                          %pi
(%i2) y: 1234;
(%o2)                         1234
(%i3) z: 1729 * w;
(%o3)                        1729 w
(%i4) g (x) ::= buildq ([x], print ("x is equal to", x));
(%o4)    g(x) ::= buildq([x], print("x is equal to", x))
(%i5) macroexpand (g (y - z));
(%o5)              print(x is equal to, y - z)
(%i6) ''%;
x is equal to 1234 - 1729 w 
(%o6)                     1234 - 1729 w
(%i7) g (y - z);
x is equal to 1234 - 1729 w 
(%o7)                     1234 - 1729 w
Оператор: :=

Оператор определения функции.

f(x_1, ..., x_n) := expr определяет функцию с именем f, аргументами x_1, ..., x_n и телом функции expr. Оператор := никогда не вычисляет тело функции (если только вычисление не задано явно оператором кавычка-кавычка ''). Функция заданная таким образом может быть обыкновенной Maxima функцией (с аргументами, заключенными в скобки) или функцией массивом (с аргументами, заключенными в квадратные скобки).

Когда последний или единственный аргумент функции x_n есть список из одного элемента, функция, заданная := принимает переменное число аргументов. Фактические аргументы присваиваются один-в-один формальным аргументам x_1, ..., x_(n - 1), и любые дальнейшие фактические аргументы, если присутствуют, присваиваются к x_n как список.

Все определения функций появляются в том же пространстве имен; задав функцию f внутри другой функции g, определение не ограничивает зону видимости f в g.

Если некоторый формальный аргумент x_k есть экранированный (quoted) символ, функция, заданная с помощью :=, не вычисляет соответствующий фактический аргумент. В противном случае, все фактические аргументы вычисляются.

См. также define и ::=.

Примеры:

:= никогда не вычисляет тело функции (если только явно не задано вычисление).

(%i1) expr : cos(y) - sin(x);
(%o1)                    cos(y) - sin(x)
(%i2) F1 (x, y) := expr;
(%o2)                   F1(x, y) := expr
(%i3) F1 (a, b);
(%o3)                    cos(y) - sin(x)
(%i4) F2 (x, y) := ''expr;
(%o4)              F2(x, y) := cos(y) - sin(x)
(%i5) F2 (a, b);
(%o5)                    cos(b) - sin(a)

Функция, заданная :=, может быть обыкновенной Maxima функцией или функцией массивом.

(%i1) G1 (x, y) := x.y - y.x;
(%o1)               G1(x, y) := x . y - y . x
(%i2) G2 [x, y] := x.y - y.x;
(%o2)                G2     := x . y - y . x
                       x, y

Когда последний или единственный аргумент функции x_n есть список из одного элемента, функция, заданная :=, принимает переменное число аргументов.

(%i1) H ([L]) := apply ("+", L);
(%o1)                H([L]) := apply("+", L)
(%i2) H (a, b, c);
(%o2)                       c + b + a
Оператор: =

Оператор равенства.

Выражение a = b, само по себе, представляет собой невычисляемое уравнение, которое может или может не выполняться. Невычисляемые уравнения могут появляться как аргументы в solve и algsys, или в некоторых других функциях.

Функция is вычисляет = до логического значения. is(a = b) вычисляет a = b в true, когда a и b тождественны. То есть, a и b есть атомы, которые идентичны, или они не атомы и их операторы идентичны и их аргументы идентичны. В противном случае, is(a = b) вычисляется в false; он никогда не вычисляется в unknown. Когда is(a = b) есть true, говорят что a и b синтаксически равны, в противоположность эквивалентным выражениям, для которых is(equal(a, b)) есть true. Выражения могут быть равны, но синтаксически не равны.

Отрицание = представляется как #. Как и в случае с =, выражение a # b, само по себе, не вычисляется. is(a # b) вычисляется a # b до true или false.

Кроме is, некоторые другие операторы вычисляют = и # до true или false, а именно if, and, or и not.

Заметим, что из-за правил для вычисления предикатных выражений (в частности из-за того, что not expr вызывает вычисление expr), not a = b эквивалентно is(a # b), а не a # b.

rhs и lhs возвращают правую и левую часть уравнения или неравенства соответственно.

См. также equal или notequal.

Примеры:

Выражение a = b, само по себе, представляет невычисляемое уравнение, которое может или может не выполняться.

(%i1) eq_1 : a * x - 5 * y = 17;
(%o1)                    a x - 5 y = 17
(%i2) eq_2 : b * x + 3 * y = 29;
(%o2)                    3 y + b x = 29
(%i3) solve ([eq_1, eq_2], [x, y]);
                        196         29 a - 17 b
(%o3)          [[x = ---------, y = -----------]]
                     5 b + 3 a       5 b + 3 a
(%i4) subst (%, [eq_1, eq_2]);
         196 a     5 (29 a - 17 b)
(%o4) [--------- - --------------- = 17, 
       5 b + 3 a      5 b + 3 a
                                  196 b     3 (29 a - 17 b)
                                --------- + --------------- = 29]
                                5 b + 3 a      5 b + 3 a
(%i5) ratsimp (%);
(%o5)                  [17 = 17, 29 = 29]

is(a = b) вычисляет a = b в true, когда a и b тождественны (синтаксически равны). Выражения могут быть равны, но синтаксически не равны.

(%i1) a : (x + 1) * (x - 1);
(%o1)                    (x - 1) (x + 1)
(%i2) b : x^2 - 1;
                              2
(%o2)                        x  - 1
(%i3) [is (a = b), is (a # b)];
(%o3)                     [false, true]
(%i4) [is (equal (a, b)), is (notequal (a, b))];
(%o4)                     [true, false]

Некоторые операторы вычисляют = и # до true или false.

(%i1) if expand ((x + y)^2) = x^2 + 2 * x * y + y^2 then FOO else
      BAR;
(%o1)                          FOO
(%i2) eq_3 : 2 * x = 3 * x;
(%o2)                       2 x = 3 x
(%i3) eq_4 : exp (2) = %e^2;
                              2     2
(%o3)                       %e  = %e
(%i4) [eq_3 and eq_4, eq_3 or eq_4, not eq_3];
(%o4)                  [false, true, true]

Из-за того, что not expr вызывает вычисление expr, not a = b эквивалентно is(a # b).

(%i1) [2 * x # 3 * x, not (2 * x = 3 * x)];
(%o1)                   [2 x # 3 x, true]
(%i2) is (2 * x # 3 * x);
(%o2)                         true
Оператор: and

Оператор логического умножения. Оператор and есть n-арный инфиксный оператор. Его операнды есть логические выражения и его результат есть логическое значение.

Оператор and вызывает вычисление (как и is) одного или более операндов, и может вызвать вычисление всех операндов.

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

Глобальный флаг prederror управляет поведением and, когда вычисляемый операнд не может быть определен как true или false. Оператор and печатает сообщение об ошибке, когда prederror есть true. Иначе, операнды, которые не могут быть вычислены как true или false, принимаются, и результат есть логическое выражение.

Оператор and не является коммутативным: a and b может быть не равно b and a из-за трактовки неопределенных операндов.

Оператор: or

Оператор логического сложения. or есть n-арный инфиксный оператор. Его операнды есть логические выражения и его результат есть логическое значение.

or вызывает вычисление (как и is) одного или более операндов, и может вызвать вычисление всех операндов.

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

Глобальный флаг prederror управляет поведением or, когда вычисляемый операнд не может быть определен как true или false. Оператор or печатает сообщение об ошибке, когда prederror есть true. Иначе, операнды, которые не могут быть вычислены как true или false, принимаются, и результат есть логическое выражение.

Оператор or не является коммутативным: a or b может быть не равно b or a из-за трактовки неопределенных операндов.

Оператор: not

Оператор логического отрицания. Оператор not есть префиксный оператор. Его операнд есть логическое выражение и его результат есть логическое значение.

Оператор not вызывает вычисление (как и is) своего операнда.

Глобальный флаг prederror управляет поведением not, когда его операнд не может быть определен как значения true или false. Оператор not печатает сообщение об ошибке, когда prederror есть true. Иначе, операнды, которые не могут быть вычислены как true или false, принимаются, и результат есть логическое выражение.

Функция: abs (expr)

Возвращает абсолютное значение expr (модуль выражения). Если expr - комплексное, возвращается комплексный модуль expr.

Ключевое слово: additive

Если declare(f,additive) было выполнено, то:

(1) Если f одномерно, пока упрощение не столкнулось с f примененному к сумме, f будет распространено вдоль этой суммы. То есть, f(y+x) будет упрощено как f(y)+f(x).

(2) Если f есть функция двух или более аргументов, аддитивность задается как аддитивность по первому аргументу f, как в случае sum или integrate, то есть f(h(x)+g(x),x) будет упрощено как f(h(x),x)+f(g(x),x). Это упрощение не произойдет, когда f применена к выражению вида sum(x[i],i,lower-limit,upper-limit).

Ключевое слово: allbut

Работает с командами part (например, part, inpart, substpart, substinpart, dpart и lpart). Например:

(%i1) expr : e + d + c + b + a;
(%o1)                   e + d + c + b + a
(%i2) part (expr, [2, 5]);
(%o2)                         d + a

хотя

(%i1) expr : e + d + c + b + a;
(%o1)                   e + d + c + b + a
(%i2) part (expr, allbut (2, 5));
(%o2)                       e + c + b

allbut также распознается kill.

(%i1) [aa : 11, bb : 22, cc : 33, dd : 44, ee : 55];
(%o1)                 [11, 22, 33, 44, 55]
(%i2) kill (allbut (cc, dd));
(%o0)                         done
(%i1) [aa, bb, cc, dd];
(%o1)                   [aa, bb, 33, 44]

kill(allbut(a_1, a_2, ...)) имеет тот же эффект, что kill(all) за исключением того, что это не очищает символы a_1, a_2, ... .

Декларация: antisymmetric

Если declare(h,antisymmetric) выполнена, этот говорит упрощателю, что h - антисимметричная. Например, h(x,z,y) упростится до - h(x, y, z). То есть, это дает (-1)^n умноженное на symmetric или commutative результат, где n есть число перестановок двух аргументов необходимых для того, чтобы перевести к конечной форме.

Функция: cabs (expr)

Возвращает комплексное абсолютное значение (комплексный модуль) expr.

Функция: ceiling (x)

Когда x есть вещественное число - возвращает наименьшее целое, которое больше чем или равно x.

Если x - константное выражение (10 * %pi, например), ceiling вычисляет x используя большие числа с плавающей точкой и применяет ceiling к конечному большому числу с плавающей точкой. Из-за того, что ceiling использует вычисления с числами с плавающей точкой, возможно, хотя маловероятно, что ceiling может вернуть ошибочное значение для константных входных данных. Чтобы защититься от ошибок, вычисление с числами с плавающей точкой выполняется с использованием трех значений для fpprec.

Для неконстантных входных данных, ceiling пытается вернуть упрощенное значение. Вот примеры упрощений, о которых ceiling знает:

(%i1) ceiling (ceiling (x));
(%o1)                      ceiling(x)
(%i2) ceiling (floor (x));
(%o2)                       floor(x)
(%i3) declare (n, integer)$
(%i4) [ceiling (n), ceiling (abs (n)), ceiling (max (n, 6))];
(%o4)                [n, abs(n), max(n, 6)]
(%i5) assume (x > 0, x < 1)$
(%i6) ceiling (x);
(%o6)                           1
(%i7) tex (ceiling (a));
$$\left \lceil a \right \rceil$$
(%o7)                         false

Функция ceiling автоматически не распространяется (map) для списков или матриц. Наконец, для всех входных данных, которые объявлены комплексными, ceiling возвращает невычисляемую форму.

Если диапазон функции есть подмножество целых, она может быть объявлена как integervalued. Обе функции ceiling и floor могут использовать эту информацию. Например:

(%i1) declare (f, integervalued)$
(%i2) floor (f(x));
(%o2)                         f(x)
(%i3) ceiling (f(x) - 1);
(%o3)                       f(x) - 1
Функция: charfun (p)

Возвращает 0, когда предикат p вычисляется как false; возвращает 1, когда предикат вычисляется как true. Когда предикат вычисляется до чего-то другого, чем true или false (unknown), возвращает невычисляемую форму.

Примеры:

(%i1) charfun (x < 1);
(%o1)                    charfun(x < 1)
(%i2) subst (x = -1, %);
(%o2)                           1
(%i3) e : charfun ('"and" (-1 < x, x < 1))$
(%i4) [subst (x = -1, e), subst (x = 0, e), subst (x = 1, e)];
(%o4)                       [0, 1, 0]
Декларация: commutative

Если declare(h,commutative) выполнено, это говорит упрощателю, что h есть коммутативная функция. То есть h(x,z,y) упроститься до h(x, y, z). Это тоже самое, что и symmetric.

Функция: compare (x, y)

Возвращает оператор отношения op (<, <=, >, >=, = или #) так что is (x op y) вычисляется до true; когда x или y зависит от %i и x # y, возвращает notcomparable; когда нет такого оператора или Maxima не может определить оператор, возвращает unknown.

Примеры:

(%i1) compare (1, 2);
(%o1)                           <
(%i2) compare (1, x);
(%o2)                        unknown
(%i3) compare (%i, %i);
(%o3)                           =
(%i4) compare (%i, %i + 1);
(%o4)                     notcomparable
(%i5) compare (1/x, 0);
(%o5)                           #
(%i6) compare (x, abs(x));
(%o6)                          <=

Функция compare не пытается определить, действительно ли области определения ее аргументов непусты. Таким образом

(%i1) compare (acos (x^2 + 1), acos (x^2 + 1) + 1);
(%o1)                           <

Действительная область определения acos (x^2 + 1) пуста.

Функция: entier (x)

Возвращает наибольшее целое меньше или равное чем x, где x - численное. Функция fix (как и в fixnum) есть синоним, так что fix(x) в точности тоже самое.

Функция: equal (a, b)

Представляет эквивалентность, то есть, равное значение.

Само по себе, equal не вычисляется или упрощается. Функция is пытается вычислить equal до логического значения. Функция is(equal(a, b)) возвращает true (или false), если и только если, a и b равны (или не равны) для всех возможных значений своих переменных, как определено вычислением ratsimp(a - b). Если ratsimp возвращает 0, два выражения рассматриваются эквивалентными. Два выражения могут быть эквивалентными даже если они не являются синтаксически равными (то есть, идентичными).

Когда is не может упростить equal до true или false, результат управляется глобальным флагом prederror. Когда prederror есть true, is выдает сообщение об ошибке. Иначе, is возвращает unknown.

В добавление к is, некоторые другие операторы вычисляют equal и notequal до true или false, а именно if, and, or и not.

Отрицанием equal является notequal.

Примеры:

Само по себе, equal не вычисляет и не упрощает.

(%i1) equal (x^2 - 1, (x + 1) * (x - 1));
                        2
(%o1)            equal(x  - 1, (x - 1) (x + 1))
(%i2) equal (x, x + 1);
(%o2)                    equal(x, x + 1)
(%i3) equal (x, y);
(%o3)                      equal(x, y)

Функция is пытается вычислить equal до логического значения. is(equal(a, b)) возвращает true когда ratsimp(a - b) возвращает 0. Два выражения могут быть эквивалентными даже если они синтаксически не равны (то есть, не идентичны).

(%i1) ratsimp (x^2 - 1 - (x + 1) * (x - 1));
(%o1)                           0
(%i2) is (equal (x^2 - 1, (x + 1) * (x - 1)));
(%o2)                         true
(%i3) is (x^2 - 1 = (x + 1) * (x - 1));
(%o3)                         false
(%i4) ratsimp (x - (x + 1));
(%o4)                          - 1
(%i5) is (equal (x, x + 1));
(%o5)                         false
(%i6) is (x = x + 1);
(%o6)                         false
(%i7) ratsimp (x - y);
(%o7)                         x - y
(%i8) is (equal (x, y));
(%o8)                        unknown
(%i9) is (x = y);
(%o9)                         false

Когда is не может упростить equal до true или false, результат управляется глобальным флагом prederror.

(%i1) [aa : x^2 + 2*x + 1, bb : x^2 - 2*x - 1];
                    2             2
(%o1)             [x  + 2 x + 1, x  - 2 x - 1]
(%i2) ratsimp (aa - bb);
(%o2)                        4 x + 2
(%i3) prederror : true;
(%o3)                         true
(%i4) is (equal (aa, bb));
Maxima was unable to evaluate the predicate:
       2             2
equal(x  + 2 x + 1, x  - 2 x - 1)
 -- an error.  Quitting.  To debug this try debugmode(true);
(%i5) prederror : false;
(%o5)                         false
(%i6) is (equal (aa, bb));
(%o6)                        unknown

Некоторые операторы вычисляют equal или notequal до true или false.

(%i1) if equal (y, y - 1) then FOO else BAR;
(%o1)                          BAR
(%i2) eq_1 : equal (x, x + 1);
(%o2)                    equal(x, x + 1)
(%i3) eq_2 : equal (y^2 + 2*y + 1, (y + 1)^2);
                         2                   2
(%o3)             equal(y  + 2 y + 1, (y + 1) )
(%i4) [eq_1 and eq_2, eq_1 or eq_2, not eq_1];
(%o4)                  [false, true, true]

Из-за того, что not expr вызывает вычисление expr, not equal(a, b) эквивалентно is(notequal(a, b)).

(%i1) [notequal (2*z, 2*z - 1), not equal (2*z, 2*z - 1)];
(%o1)            [notequal(2 z, 2 z - 1), true]
(%i2) is (notequal (2*z, 2*z - 1));
(%o2)                         true
Функция: floor (x)

Когда x есть вещественное число - возвращает наибольшее целое, которое меньше или равно x.

Если x есть константное выражение (10 * %pi, например), floor вычисляет x используя большие числа с плавающей точкой и применяет floor к результирующему значению. Из-за того, что floor использует вычисления с числами с плавающей точкой, возможно, хотя маловероятно, что floor может вернуть ошибочное значение для константных входных данных. Чтобы застраховаться от ошибок, вычисление с числами с плавающей точкой выполняется, используя три значения для fpprec.

Для неконстантных входных данных, floor пытается вернуть упрощенное значение. Вот примеры упрощений, о которых floor знает:

(%i1) floor (ceiling (x));
(%o1)                      ceiling(x)
(%i2) floor (floor (x));
(%o2)                       floor(x)
(%i3) declare (n, integer)$
(%i4) [floor (n), floor (abs (n)), floor (min (n, 6))];
(%o4)                [n, abs(n), min(n, 6)]
(%i5) assume (x > 0, x < 1)$
(%i6) floor (x);
(%o6)                           0
(%i7) tex (floor (a));
$$\left \lfloor a \right \rfloor$$
(%o7)                         false

Функция floor автоматически не распространяется (map) для списков или матриц. Наконец, для всех входных данных, которые заданы как комплексные, floor возвращает невычисляемую форму.

Если диапазон функции есть подмножество целых, она может быть объявлена как integervalued. Обе функции ceiling и floor могут использовать эту информацию. Например:

(%i1) declare (f, integervalued)$
(%i2) floor (f(x));
(%o2)                         f(x)
(%i3) ceiling (f(x) - 1);
(%o3)                       f(x) - 1
Функция: notequal (a, b)

Представляет собой отрицание equal(a, b).

Примеры:

(%i1) equal (a, b);
(%o1)                      equal(a, b)
(%i2) maybe (equal (a, b));
(%o2)                        unknown
(%i3) notequal (a, b);
(%o3)                    notequal(a, b)
(%i4) not equal (a, b);
(%o4)                    notequal(a, b)
(%i5) maybe (notequal (a, b));
(%o5)                        unknown
(%i6) assume (a > b);
(%o6)                        [a > b]
(%i7) equal (a, b);
(%o7)                      equal(a, b)
(%i8) maybe (equal (a, b));
(%o8)                         false
(%i9) notequal (a, b);
(%o9)                    notequal(a, b)
(%i10) maybe (notequal (a, b));
(%o10)                        true
Оператор: eval

Как аргумент в вызове к ev (expr), eval вызывает дополнительное вычисление expr. См. ev.

Функция: evenp (expr)

Возвращает true если expr есть четное целое. false возвращается во всех других случаях.

Функция: fix (x)

Синоним для entier (x).

Функция: fullmap (f, expr_1, ...)

Аналогично map, но fullmap продолжает процедуру распространения для всех подвыражений до тех пор, пока основные операторы более не остаются теми же самыми.

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

Примеры:

(%i1) a + b * c;
(%o1)                        b c + a
(%i2) fullmap (g, %);
(%o2)                   g(b) g(c) + g(a)
(%i3) map (g, %th(2));
(%o3)                     g(b c) + g(a)
Функция: fullmapl (f, list_1, ...)

Аналогично fullmap, но fullmapl только распространяется на списки и матрицы.

Пример:

(%i1) fullmapl ("+", [3, [4, 5]], [[a, 1], [0, -1.5]]);
(%o1)                [[a + 3, 4], [4, 3.5]]
Функция: is (expr)

Пытается определить, является ли предикат expr доказуемым из фактов в базе данных assume.

Если этот предикат является доказуемым как true или false, is возвращает true или false, соответственно. Иначе, возвращаемое значение управляется глобальным флагом prederror. Когда prederror есть true, is выдает сообщение об ошибке. Иначе, is возвращает unknown.

Выражение ev(expr, pred) (который можно переписать как expr, pred в интерактивной строке) эквивалентно is(expr).

См. также assume, facts и maybe.

Примеры:

is вызывает вычисление предикатов.

(%i1) %pi > %e;
(%o1)                       %pi > %e
(%i2) is (%pi > %e);
(%o2)                         true

is пытается вывести предикаты из базы данных assume.

(%i1) assume (a > b);
(%o1)                        [a > b]
(%i2) assume (b > c);
(%o2)                        [b > c]
(%i3) is (a < b);
(%o3)                         false
(%i4) is (a > c);
(%o4)                         true
(%i5) is (equal (a, c));
(%o5)                         false

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

(%i1) assume (a > b);
(%o1)                        [a > b]
(%i2) prederror: true$
(%i3) is (a > 0);
Maxima was unable to evaluate the predicate:
a > 0
 -- an error.  Quitting.  To debug this try debugmode(true);
(%i4) prederror: false$
(%i5) is (a > 0);
(%o5)                        unknown
Функция: maybe (expr)

Пытается определить, является ли предикат expr доказуемым исходя из фактов в базе данных assume.

Если этот предикат доказуем как true или false, maybe возвращает true или false, соответственно. Иначе, maybe возвращает unknown.

maybe функционально эквивалентен is с prederror: false, но результат вычислен без реального присвоение значения prederror.

См. также assume, facts и is.

Примеры:

(%i1) maybe (x > 0);
(%o1)                        unknown
(%i2) assume (x > 1);
(%o2)                        [x > 1]
(%i3) maybe (x > 0);
(%o3)                         true
Функция: isqrt (x)

Возвращает "целый квадратный корень" абсолютного значения x, которое есть целое.

Функция: lmax (L)

Когда L есть список или множество, возвращает apply ('max, args (L)). Когда L не является списком или множеством, выдает ошибку.

Функция: lmin (L)

Когда L есть список или множество, возвращает apply ('min, args (L)). Когда L не является списком или множеством, выдает ошибку.

Функция: max (x_1, ..., x_n)

Возвращает упрощенное значение максимума выражений от x_1 до x_n. Когда get (trylevel, maxmin) есть 2 или больше, max использует упрощение max (e, -e) --> |e|. Когда get (trylevel, maxmin) есть 3 или больше, max старается исключить выражения, заключенные по значению между двумя другими аргументами. Например, max (x, 2*x, 3*x) --> max (x, 3*x). Для установки значения trylevel в 2, используется put (trylevel, 2, maxmin).

Функция: min (x_1, ..., x_n)

Возвращает упрощенное значение минимума выражений от x_1 до x_n. Когда get (trylevel, maxmin) есть 2 или больше, min использует упрощение min (e, -e) --> -|e|. Когда get (trylevel, maxmin) есть 3 или больше, min старается исключить выражения, заключенные по значению между двумя другими аргументами. Например, min (x, 2*x, 3*x) --> min (x, 3*x). Для установки значения trylevel в 2, используется put (trylevel, 2, maxmin).

Функция: polymod (p)
Функция: polymod (p, m)

Конвертирует многочлен p в модулярное представление, с учетом текущего модуля, которое является значением переменной modulus.

polymod (p, m) определяет модуль m, который будет использоваться вместо текущего значения modulus.

См. modulus.

Функция: mod (x, y)

Если x и y есть вещественные числа и y не отрицательно, возвращает x - y * floor(x / y). Далее для всех вещественных x имеем mod (x, 0) = x. Подробное обсуждение определения mod (x, 0) = x есть в разделе 3.4 "Concrete Mathematics," авторов Graham, Knuth и Patashnik. Функция mod (x, 1) есть пилообразная функция с периодом 1, mod (1, 1) = 0 и mod (0, 1) = 0.

Чтобы найти главный аргумент (число в интервале (-%pi, %pi]) для комплексного числа, используется функция x |-> %pi - mod (%pi - x, 2*%pi), где x есть аргумент.

Когда x и y есть константные выражения (например 10 * %pi), mod использует то же вычисления с числами с плавающей точкой повышенной точности, что и, floor и ceiling. Опять же, возможно, хотя маловероятно, что mod может вернуть ошибочное значение в таких случаях.

Для не численных аргументов x или y, mod знает несколько правил упрощения:

(%i1) mod (x, 0);
(%o1)                           x
(%i2) mod (a*x, a*y);
(%o2)                      a mod(x, y)
(%i3) mod (0, x);
(%o3)                           0
Функция: oddp (expr)

есть true если expr есть нечетное целое. false возвращается во всех других случаях.

Оператор: pred

В качестве аргумента в вызове ev (expr), pred вызывает вычисление предикатов (выражений, которые вычисляются в true или false) . См. ev.

Функция: make_random_state (n)
Функция: make_random_state (s)
Функция: make_random_state (true)
Функция: make_random_state (false)

Объект случайного состояния представляет собой состояние генератора случайных чисел. Оно содержит 627 32-битных слова.

make_random_state (n) возвращает новое случайное состояние объекта созданного из затравочного целого числа, равного n по модулю 2^32. n может быть отрицательным.

make_random_state (s) возвращает копию случайного состояния s.

make_random_state (true) возвращает новое случайное состояние объекта, используя текущее значение часов компьютера в качестве затравочного числа.

make_random_state (false) возвращает копию текущего состояния генератора случайных чисел.

Функция: set_random_state (s)

Копирует s в состояние генератора случайных чисел.

set_random_state всегда возвращает done.

Функция: random (x)

Возвращает псевдослучайное число. Если x есть целое, random (x) возвращает целое в пределах от 0 до x - 1 включительно. Если x есть число с плавающей точкой, random (x) возвращает неотрицательное число с плавающей точкой меньше чем x. Функция random выдает сообщение об ошибке, если x не есть целое, или не число с плавающей точкой, или если x неположительное.

Функции make_random_state и set_random_state сохраняют состояние генератора случайных чисел.

Генератор случайных чисел Maxima - это реализация Mersenne twister MT 19937.

Примеры:

(%i1) s1: make_random_state (654321)$
(%i2) set_random_state (s1);
(%o2)                         done
(%i3) random (1000);
(%o3)                          768
(%i4) random (9573684);
(%o4)                        7657880
(%i5) random (2^75);
(%o5)                11804491615036831636390
(%i6) s2: make_random_state (false)$
(%i7) random (1.0);
(%o7)                   .2310127244107132
(%i8) random (10.0);
(%o8)                   4.394553645870825
(%i9) random (100.0);
(%o9)                   32.28666704056853
(%i10) set_random_state (s2);
(%o10)                        done
(%i11) random (1.0);
(%o11)                  .2310127244107132
(%i12) random (10.0);
(%o12)                  4.394553645870825
(%i13) random (100.0);
(%o13)                  32.28666704056853
Функция: rationalize (expr)

Конвертирует все числа с плавающей точкой двойной точности и повышенной точности в выражении expr в рациональные эквивалентны. Если вы не знакомы с бинарным представлением чисел с плавающей точкой, вы может быть удивлены тем, что rationalize (0.1) не равно 1/10. Это поведение имеет место не только в Maxima – число 1/10 имеет периодическое, не заканчивающееся, двоичное представление.

(%i1) rationalize (0.5);
                                1
(%o1)                           -
                                2
(%i2) rationalize (0.1);
                               1
(%o2)                          --
                               10
(%i3) fpprec : 5$
(%i4) rationalize (0.1b0);
                             209715
(%o4)                        -------
                             2097152
(%i5) fpprec : 20$
(%i6) rationalize (0.1b0);
                     236118324143482260685
(%o6)                ----------------------
                     2361183241434822606848
(%i7) rationalize (sin (0.1*x + 5.6));
                              x    28
(%o7)                     sin(-- + --)
                              10   5

Пример использования:

(%i1) unitfrac(r) := block([uf : [], q],
    if not(ratnump(r)) then
       error("The input to 'unitfrac' must be a rational number"),
    while r # 0 do (
        uf : cons(q : 1/ceiling(1/r), uf),
        r : r - q),
    reverse(uf));
(%o1) unitfrac(r) := block([uf : [], q], 
if not ratnump(r) then
   error("The input to 'unitfrac' must be a rational number"),
                                  1
while r # 0 do (uf : cons(q : ----------, uf), r : r - q), 
                                      1
                              ceiling(-)
                                      r
reverse(uf))
(%i2) unitfrac (9/10);
                            1  1  1
(%o2)                      [-, -, --]
                            2  3  15
(%i3) apply ("+", %);
                               9
(%o3)                          --
                               10
(%i4) unitfrac (-9/10);
                                  1
(%o4)                       [- 1, --]
                                  10
(%i5) apply ("+", %);
                                9
(%o5)                         - --
                                10
(%i6) unitfrac (36/37);
                        1  1  1  1    1
(%o6)                  [-, -, -, --, ----]
                        2  3  8  69  6808
(%i7) apply ("+", %);
                               36
(%o7)                          --
                               37
Функция: round (x)

Если x является вещественным числом, то возвращает ближайшее к x целое. Числа, кратные 1/2, округляются до ближайшего четного целого. Вычисление x аналогично функциям floor и ceiling.

Функция: sign (expr)

Пытается определить знак expr на основе фактов в текущей базе данных. Она возвращает один из следующих ответов: pos (положительное), neg (отрицательное), zero (нулевое), pz (положительное или ноль), nz (отрицательное или ноль), pn (положительное или отрицательное), или pnz (положительное, отрицательное или ноль, т.е. ничего не известно).

Функция: signum (x)

Для численного значения x, возвращает 0, если x есть 0, иначе возвращает -1 или +1, когда x меньше чем или больше чем 0, соответственно.

Если x не есть численное значение, то возвращается эквивалентная, но упрощенная форма. Например, signum(-x) дает -signum(x).

Функция: sort (L, P)
Функция: sort (L)

Сортирует список L согласно предикату P двух аргументов, так чтобы P (L[k], L[k + 1]) было равно true для любых двух последовательных элементов. Предикат может быть задан как имя функции или бинарный инфиксный оператор, или как лямбда-выражение. Если он задан как имя оператора, это имя берется в "двойные кавычки".

Отсортированный список возвращается как новый объект; аргумент L не изменяется. При возврате значения, sort делает копию верхнего уровня (shallow copy) элементов L.

Если предикат P не задает полное упорядочивание элементов L, то sort может пробежать до конца без ошибки, но результат будет неопределенный. sort выдает сообщение, если предикат вычисляется до чего-то отличного от true или false.

sort (L) эквивалентно sort (L, orderlessp). То есть, порядок сортировки по умолчанию будет восходящим, как определено для orderlessp. Все Maxima атомы и выражения сравнимы по orderlessp, хотя есть отдельные примеры выражений, для которых orderlessp не транзитивна (это ошибка).

Примеры:

(%i1) sort ([11, -17, 29b0, 7.55, 3, -5/2, b + a, 9 * c,
      19 - 3 * x]);
               5
(%o1) [- 17, - -, 3, 7.55, 11, 2.9b1, b + a, 9 c, 19 - 3 x]
               2
(%i2) sort ([11, -17, 29b0, 7.55, 3, -5/2, b + a, 9*c, 19 - 3*x],
      ordergreatp);
                                                   5
(%o2) [19 - 3 x, 9 c, b + a, 2.9b1, 11, 7.55, 3, - -, - 17]
                                                   2
(%i3) sort ([%pi, 3, 4, %e, %gamma]);
(%o3)                [3, 4, %e, %gamma, %pi]
(%i4) sort ([%pi, 3, 4, %e, %gamma], "<");
(%o4)                [%gamma, %e, 3, %pi, 4]
(%i5) my_list: [[aa,hh,uu], [ee,cc], [zz,xx,mm,cc], [%pi,%e]];
(%o5) [[aa, hh, uu], [ee, cc], [zz, xx, mm, cc], [%pi, %e]]
(%i6) sort (my_list);
(%o6) [[%pi, %e], [aa, hh, uu], [ee, cc], [zz, xx, mm, cc]]
(%i7) sort (my_list, lambda ([a, b], orderlessp (reverse (a),
      reverse (b))));
(%o7) [[%pi, %e], [ee, cc], [zz, xx, mm, cc], [aa, hh, uu]]
Функция: sqrt (x)

Квадратный корень x. Внутренне представляется как x^(1/2). См. также rootscontract.

radexpand, если true, вызовет то, что n-ные корни множителей произведения, которые есть степени n, будут вынесены за пределы радикала. Например, sqrt(16*x^2) станет 4*x, только если radexpand есть true.

Управляющая переменная: sqrtdispflag

Значение по умолчанию: true

Когда sqrtdispflag есть false, то sqrt выводится как степень с показателем 1/2.

Функция: sublis (list, expr)

Производит множественные параллельные подстановки в выражение.

Переменная sublis_apply_lambda управляет упрощением после sublis.

Пример:

(%i1) sublis ([a=b, b=a], sin(a) + cos(b));
(%o1)                    sin(b) + cos(a)
Функция: sublist (list, p)

Возвращает список элементов list, для которого предикат p возвращает true.

Пример:

(%i1) L: [1, 2, 3, 4, 5, 6];
(%o1)                  [1, 2, 3, 4, 5, 6]
(%i2) sublist (L, evenp);
(%o2)                       [2, 4, 6]
Управляющая переменная: sublis_apply_lambda

Значение по умолчанию: true

Управляет, будет ли подстановки для lambda применены в упрощении, после того как используется sublis или нужно ли выполнить ev, чтобы эти элементы применились. true означает - выполнить применение.

Функция: subst (a, b, c)

Делает подстановку a для b в c. b должен быть атомом или полным подвыражением в c. Например, x+y+z есть полное подвыражение 2*(x+y+z)/w, а x+y нет. Когда b не имеет эти характеристики, можно иногда использовать substpart или ratsubst (см. ниже). Альтернативно, если b задано в форме e/f, то можно использовать subst (a*f, e, c), в то время как, если b задано в форме e^(1/f), то можно использовать subst (a^f, e, c). subst также различает x^y в x^-y, так что subst (a, sqrt(x), 1/sqrt(x)) дает 1/a. Аргументы a и b могут также быть операторами выражения, заключенными в двойные кавычки ", или могут быть именами функций. Если есть желание подставить независимую переменную в производных формах, то следует использовать функцию at (см. ниже).

subst - это псевдоним для substitute.

Выражения subst (eq_1, expr) или subst ([eq_1, ..., eq_k], expr) - есть другие допустимые формы. eq_i - уравнения, указывающие какие подстановки нужно сделать. Для каждого уравнения, правая сторона будет подставлена вместо левой в выражении expr.

Если exptsubst равно true, то позволяются подстановки, на подобии y для %e^x в %e^(a*x).

Когда opsubst есть false, subst не пытается подставить в оператор выражения. Например, (opsubst: false, subst (x^2, r, r+r[0])) будет работать.

Примеры:

(%i1) subst (a, x+y, x + (x+y)^2 + y);
                                    2
(%o1)                      y + x + a
(%i2) subst (-%i, %i, a + b*%i);
(%o2)                       a - %i b

Чтобы узнать о других примерах, выполните example (subst).

Функция: substinpart (x, expr, n_1, ..., n_k)

Аналогично substpart, но substinpart работает с внутренним представление expr.

Примеры:

(%i1) x . 'diff (f(x), x, 2);
                              2
                             d
(%o1)                   x . (--- (f(x)))
                               2
                             dx
(%i2) substinpart (d^2, %, 2);
                                  2
(%o2)                        x . d
(%i3) substinpart (f1, f[1](x + 1), 0);
(%o3)                       f1(x + 1)

Если последний аргумент функции part есть список индексов, то будут выбраны несколько подвыражений, каждый из которых будет соответствовать индексу в списке. Таким образом

(%i1) part (x + y + z, [1, 3]);
(%o1)                         z + x

Переменная piece содержит значение последнего выражения, выбранного при использовании функции part. Оно устанавливается во время выполнения функции и, таким образом, может быть передано в саму функцию как показано ниже. Если partswitch равно true, то end возвращается когда выбранная часть выражения не существует, иначе выдается сообщение об ошибке.

(%i1) expr: 27*y^3 + 54*x*y^2 + 36*x^2*y + y + 8*x^3 + x + 1;
              3         2       2            3
(%o1)     27 y  + 54 x y  + 36 x  y + y + 8 x  + x + 1
(%i2) part (expr, 2, [1, 3]);
                                  2
(%o2)                         54 y
(%i3) sqrt (piece/54);
(%o3)                        abs(y)
(%i4) substpart (factor (piece), expr, [1, 2, 3, 5]);
                               3
(%o4)               (3 y + 2 x)  + y + x + 1
(%i5) expr: 1/x + y/x - 1/z;
                             1   y   1
(%o5)                      - - + - + -
                             z   x   x
(%i6) substpart (xthru (piece), expr, [2, 3]);
                            y + 1   1
(%o6)                       ----- - -
                              x     z

Также, установка опции inflag в true и вызов part или substpart есть тоже самое, что и вызов inpart или substinpart.

Функция: substpart (x, expr, n_1, ..., n_k)

Делает подстановку x в подвыражение, выбираемое последними аргументами, как в part. Возвращает новое значение expr. x может быть некоторым оператором для подстановки вместо оператора в expr. В некоторых случаях x нужно заключать в двойной кавычки " (Например, substpart ("+", a*b, 0) дает b + a).

(%i1) 1/(x^2 + 2);
                               1
(%o1)                        ------
                              2
                             x  + 2
(%i2) substpart (3/2, %, 2, 1, 2);
                               1
(%o2)                       --------
                             3/2
                            x    + 2
(%i3) a*x + f(b, y);
(%o3)                     a x + f(b, y)
(%i4) substpart ("+", %, 1, 0);
(%o4)                    x + f(b, y) + a

Также, установка опции inflag в true и вызов part или substpart, есть тоже самое, что и вызов inpart или substinpart.

Функция: subvarp (expr)

Возвращает true, если expr есть переменная с индексом, например a[i].

Функция: symbolp (expr)

Возвращает true, если expr есть символ, иначе false. На самом деле, symbolp(x) эквивалентно предикату atom(x) and not numberp(x).

См. также Идентификаторы.

Функция: unorder ()

Блокирует связывания, созданные последним вызовом упорядочивающих команд ordergreat и orderless. ordergreat и orderless не могут использоваться больше одного раза каждый, без вызова unorder. См. также ordergreat и orderless.

Примеры:

(%i1) unorder();
(%o1)                          []
(%i2) b*x + a^2;
                                   2
(%o2)                       b x + a
(%i3) ordergreat (a);
(%o3)                         done
(%i4) b*x + a^2;
 %th(1) - %th(3);
                             2
(%o4)                       a  + b x
(%i5) unorder();
                              2    2
(%o5)                        a  - a
Функция: vectorpotential (givencurl)

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

Функция: xthru (expr)

Объединяет все члены expr (которое должно быть суммой) для общего знаменателя без раскрытия произведений и степеней сумм, что делает ratsimp. Функция xthru сокращает общие множители в числителе и знаменателе рациональных выражений, но только если эти множители явные.

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

(%i1) ((x+2)^20 - 2*y)/(x+y)^20 + (x+y)^(-19) - x/(x+y)^20;
                                20
                 1       (x + 2)   - 2 y       x
(%o1)        --------- + --------------- - ---------
                    19             20             20
             (y + x)        (y + x)        (y + x)
(%i2) xthru (%);
                                 20
                          (x + 2)   - y
(%o2)                     -------------
                                   20
                            (y + x)
Функция: zeroequiv (expr, v)

Проверяет эквивалентно ли выражение expr в переменной v нулю, возвращает true, false или dontknow.

zeroequiv имеет следующие ограничения:

  1. Не используйте функции, для которых Maxima не знает как их дифференцировать и вычислять.
  2. Если выражение имеет полюсы на вещественной прямой, могут быть ошибки в результате (это может произойти с малой вероятностью).
  3. Если выражение содержит функции, который не являются решением дифференциальных уравнений первого порядка (например, функции Бесселя), могут быть некорректные результаты.
  4. Этот алгоритм использует вычисление в случайно выбранных точках для аккуратно выбранных подвыражений. Это всегда, в некотором смысле, рискованное дело, хотя алгоритм пытается минимизировать возможность ошибки.

Например zeroequiv (sin(2*x) - 2*sin(x)*cos(x), x) возвращает true и zeroequiv (%e^x + x, x) возвращает false. С другой стороны zeroequiv (log(a*b) - log(a) - log(b), a) возвращает dontknow из-за присутствия дополнительного параметра b.


Previous: Операторы отношения, Up: Операторы   [Contents][Index]