Maxima Manual: Общие операторы

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`, но порядок левосторонних частей уравнений должен быть циклической перестановкой координатных переменных.

  Категории:Пакет vect ·

Функция: 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]