4 @c OriginalRevision=1.49
5 @c TranslatedBy: (c) 2007-11-06 Andrey Siver <ihep-2005@yandex.ru>
9 * N-арные операторы (nary)::
10 * Безфиксные операторы (nofix)::
11 * Постфиксные операторы (postfix)::
12 * Префиксные операторы (prefix)::
13 * Арифметические операторы::
14 * Операторы отношения::
18 @c FOLLOWING @NODES SHOULD BE CHANGED TO @DEFFN
19 @c SINCE NARY, NOFIX, POSTFIX, AND PREFIX ARE ALL MAXIMA FUNCTIONS
21 @node N-арные операторы (nary), Безфиксные операторы (nofix), Операторы, Операторы
22 @section N-арные операторы (nary)
23 N-арный @code{nary} оператор используется для того, чтобы задать функцию любого числа аргументов, каждый из которых разделен
24 оператором, например A+B или A+B+C. Функция @code{nary("x")} - синтаксическое
25 расширение функции для объявления @code{x} как n-арный оператор.
26 Функции могут быть объявлены n-арными.
27 Если @code{declare(j,nary);} выполнено, это указывает упрощателю (simplifier) то,
28 что требуется упрощение, то есть, например, @code{j(j(a,b),j(c,d))} упростится до @code{j(a, b, c, d)}.
30 См. также @code{Синтаксис}.
32 @opencatbox{Категории:}
37 @node Безфиксные операторы (nofix), Постфиксные операторы (postfix), N-арные операторы (nary), Операторы
38 @section Безфиксные операторы (nofix)
39 Безфиксные операторы (@code{nofix}, операторы без аргументов) используются, чтобы обозначить функции без аргументов.
40 Простое присутствие такого оператора в команде вызовет то, что
41 соответствующая функция будет вычислена. Например, когда набирают
42 "exit;" для выхода из Maxima, "exit" ведет себя аналогично
43 безфиксному оператору. Функция @code{nofix("x")} - это функция расширения,
44 которая объявляет @code{x} как безфиксный оператор.
46 См. также @code{Синтаксис}.
48 @opencatbox{Категории:}
53 @node Постфиксные операторы (postfix), Префиксные операторы (prefix), Безфиксные операторы (nofix), Операторы
54 @section Постфиксные операторы (postfix)
55 Постфиксные операторы (@code{postfix}), как и префиксные операторы, обозначают функции
56 одного аргумента, но в этом случае этот аргумент непосредственно
57 предшествует появлению этого оператора в входной строке, например 3!.
58 Функция @code{postfix("x")} - это функция синтаксического расширения,
59 которая объявлять @code{x} как постфиксный оператор.
61 См. также @code{Синтаксис}.
63 @opencatbox{Категории:}
68 @node Префиксные операторы (prefix), Арифметические операторы, Постфиксные операторы (postfix), Операторы
69 @section Префиксные операторы (prefix)
70 Префиксный оператор (@code{prefix}) обозначает функцию одного
71 аргумента, который непосредственно идет за вхождением оператора.
72 @code{prefix("x")} - это функция синтаксического расширения, которая объявляет @code{x} как префиксный оператор.
74 См. также @code{Синтаксис}.
76 @opencatbox{Категории:}
81 @node Арифметические операторы, Операторы отношения, Префиксные операторы (prefix), Операторы
82 @section Арифметические операторы
102 @fnindex Возведение в степень
105 Символы @code{+}, @code{*}, @code{/} и @code{^} обозначают
106 суммирование, умножение, деление и возведение в степень, соответственно.
107 Имена этих операторов @code{"+"}, @code{"*"}, @code{"/"} и @code{"^"}
108 могут появляться там, где требуется имя функции или оператора.
110 Символы @code{+} и @code{-} представляют унарное суммирование и вычитание, соответственно,
111 и имена этих операторов: @code{"+"} и @code{"-"}, соответственно.
113 Вычитание @code{a - b} представляется в Maxima как суммирование @code{a + (- b)}.
114 Выражения, такие как @code{a + (- b)}, отображаются как вычитание.
115 Maxima распознает @code{"-"} только как имя унарного оператора вычитания,
116 а не как имя бинарного оператора вычитания.
118 Деление @code{a / b} представляется в Maxima как умножение, @code{a * b^(- 1)}.
119 Выражения, такие как @code{a * b^(- 1)}, отображаются как деление.
120 Maxima распознает @code{"/"} как имя оператора деления.
122 Суммирование и умножение - n-арные (n-ary), коммутативные операторы.
123 Деление и возведение в степень - бинарные, некоммутативные операторы.
125 Maxima сортирует операнды коммутативных операторов для конструирования канонического представления.
126 Во внутреннем хранилище упорядочивание управляется с помощью @code{orderlessp}.
127 Для отображения, упорядочивание при суммировании управляется с помощью @code{ordergreatp},
128 а для умножения, флаг тот же, что и для внутреннего упорядочивания.
130 Арифметические вычисления выполняются для буквальных чисел
131 (целых, рациональных, обыкновенных чисел с плавающей точкой и чисел с плавающей точкой повышенной точности (bigfloat)).
132 За исключением возведения в степень, все арифметические операции для чисел упрощаются до чисел.
133 Возведение в степень упрощается до числа, в случае если, либо операнд является обыкновенным числом с плавающей точкой
134 или числом с плавающей точкой повышенной точности (bigfloat),
135 или если результат есть точное целое или рациональное число;
136 иначе возведение в степень может быть упрощено до @code{sqrt} или другого возведения в степень,
137 или оставлено неизменным.
139 В арифметических вычислениях имеет место приведение типов значений результата:
140 если любой операнд есть bigfloat, то результат будет bigfloat;
141 или же, если любой операнд есть обыкновенное число с плавающей точкой,
142 результат будет обыкновенным числом с плавающей точкой;
143 или же, если операнды являются рациональными или целыми значениями,
144 то результат будет рациональным или целым.
146 Арифметические вычисления являются упрощением, а не в вычислением.
147 Таким образом, арифметические операции выполняется в экранированных (но упрощенных) выражениях.
149 Арифметические операции применяются элемент-за-элементом
150 к спискам, когда глобальный флаг @code{listarith} есть @code{true},
151 и всегда применяется элемент-за-элементом к матрицам.
152 Когда один операнд есть список или матрица и другой есть операнд некоторого другого типа,
153 то другой операнд объединяется с каждым из элементом списка или матрицы.
157 Суммирование и умножение являются n-арными (n-ary) коммутативными операторами.
158 Maxima сортирует операнды для того, чтобы сконструировать каноническое представление.
159 Имена этих операторов @code{"+"} и @code{"*"}.
161 @c c + g + d + a + b + e + f;
162 @c [op (%), args (%)];
163 @c c * g * d * a * b * e * f;
164 @c [op (%), args (%)];
165 @c apply ("+", [a, 8, x, 2, 9, x, x, a]);
166 @c apply ("*", [a, 8, x, 2, 9, x, x, a]);
170 (%i1) c + g + d + a + b + e + f;
171 (%o1) g + f + e + d + c + b + a
172 (%i2) [op (%), args (%)];
173 (%o2) [+, [g, f, e, d, c, b, a]]
174 (%i3) c * g * d * a * b * e * f;
176 (%i4) [op (%), args (%)];
177 (%o4) [*, [a, b, c, d, e, f, g]]
178 (%i5) apply ("+", [a, 8, x, 2, 9, x, x, a]);
180 (%i6) apply ("*", [a, 8, x, 2, 9, x, x, a]);
185 Деление и возведение в степень - бинарные, некоммутативные операторы.
186 Имена этих операторов @code{"/"} и @code{"^"}.
189 @c [map (op, %), map (args, %)];
190 @c [apply ("/", [a, b]), apply ("^", [a, b])];
194 (%i1) [a / b, a ^ b];
198 (%i2) [map (op, %), map (args, %)];
199 (%o2) [[/, ^], [[a, b], [a, b]]]
200 (%i3) [apply ("/", [a, b]), apply ("^", [a, b])];
206 Вычитание и деление внутренне представляются
207 в терминах суммирования и умножения, соответственно.
209 @c [inpart (a - b, 0), inpart (a - b, 1), inpart (a - b, 2)];
210 @c [inpart (a / b, 0), inpart (a / b, 1), inpart (a / b, 2)];
214 (%i1) [inpart (a - b, 0), inpart (a - b, 1), inpart (a - b, 2)];
216 (%i2) [inpart (a / b, 0), inpart (a / b, 1), inpart (a / b, 2)];
222 Вычисления выполняются над буквальными числами.
223 Выполняется приведение типов значений результата.
225 @c 17 + b - (1/2)*29 + 11^(2/4);
226 @c [17 + 29, 17 + 29.0, 17 + 29b0];
230 (%i1) 17 + b - (1/2)*29 + 11^(2/4);
232 (%o1) b + sqrt(11) + -
234 (%i2) [17 + 29, 17 + 29.0, 17 + 29b0];
235 (%o2) [46, 46.0, 4.6b1]
238 Арифметические вычисления являются упрощением, а не вычислением.
241 @c '(17 + 29*11/7 - 5^3);
243 @c '(17 + 29*11/7 - 5^3);
249 (%i2) '(17 + 29*11/7 - 5^3);
255 (%i4) '(17 + 29*11/7 - 5^3);
261 Арифметические операции выполняется элемент-за-элементом для списков
262 (в зависимости от значения @code{listarith}) и матриц.
264 @c matrix ([a, x], [h, u]) - matrix ([1, 2], [3, 4]);
265 @c 5 * matrix ([a, x], [h, u]);
266 @c listarith : false;
267 @c [a, c, m, t] / [1, 7, 2, 9];
270 @c [a, c, m, t] / [1, 7, 2, 9];
275 (%i1) matrix ([a, x], [h, u]) - matrix ([1, 2], [3, 4]);
279 (%i2) 5 * matrix ([a, x], [h, u]);
283 (%i3) listarith : false;
285 (%i4) [a, c, m, t] / [1, 7, 2, 9];
289 (%i5) [a, c, m, t] ^ x;
292 (%i6) listarith : true;
294 (%i7) [a, c, m, t] / [1, 7, 2, 9];
298 (%i8) [a, c, m, t] ^ x;
300 (%o8) [a , c , m , t ]
303 @opencatbox{Категории:}
310 Оператор возведения в степень.
311 Maxima распознает @code{**} как тот же оператор, что и @code{^} при вводе,
312 и он отображается как @code{^} в 1D (одномерном) выводе,
313 или в виде показателя степени как верхний индекс в 2D (двумерном) выводе.
315 Функция @code{fortran} выводит оператор возведения в степень как @code{**},
316 не в зависимости от того, как он был задан при вводе, как @code{**} или @code{^}.
323 @c string (x**y + x^z);
324 @c fortran (x**y + x^z);
327 (%i1) is (a**b = a^b);
332 (%i3) string (x**y + x^z);
334 (%i4) fortran (x**y + x^z);
339 @opencatbox{Категории:}
345 @node Операторы отношения, Общие операторы, Арифметические операторы, Операторы
346 @section Операторы отношения
352 @deffnx {Оператор} <=
354 @fnindex Меньше или равно
356 @deffnx {Оператор} >=
358 @fnindex Больше или равно
365 Символы @code{<} , @code{<=} , @code{>=} и @code{>} представляют отношения
366 меньше, меньше или равно, больше или равно и больше, соответственно.
367 Имена этих операторов есть @code{"<"} , @code{"<="} , @code{">="} и @code{">"}.
368 Эти имена могут применяться в случае, если требуется имя функции или оператора.
370 Данные операторы отношения являются бинарными.
371 Конструкции типа @code{a < b < c} недопустимы в Maxima.
373 Операторы отношения вычисляются до логических значений функциями @code{is} и @code{maybe},
374 и программными конструкциями @code{if}, @code{while} и @code{unless}.
375 В других случаях операторы отношения не вычисляются или упрощаются до логических значений,
376 хотя аргументы операторов отношения вычисляются
377 (если вычисление не блокировано при помощи оператора кавычка).
379 Если выражение отношения не может быть вычислено до логического значения @code{true} или @code{false},
380 то поведение @code{is} и @code{if} управляется глобальным флагом @code{prederror}.
381 Если значение @code{prederror} равно @code{true},
382 то @code{is} и @code{if} вызывает ошибку.
383 Если значение @code{prederror} равно @code{false},
384 то @code{is} возвращает @code{unknown}
385 а @code{if} возвращает частично-вычисленное условное выражение.
387 @code{maybe} всегда ведет себя так, если бы @code{prederror} равнялось @code{false},
388 а @code{while} и @code{unless} всегда ведут себя так, если бы @code{prederror} равнялось @code{true}.
390 Операторы отношения не дистрибутивны по отношению к спискам и другим конструкциям.
392 См. также @code{=} , @code{#} , @code{equal} и @code{notequal}.
396 Операторы отношения вычисляются до логических значений некоторыми функциями
397 и программными конструкциями.
400 @c [x, y, z] : [123, 456, 789];
403 @c if x >= z then 1 else 0;
404 @c block ([S], S : 0, for i:1 while i <= 100 do S : S + i, return (S));
407 (%i1) [x, y, z] : [123, 456, 789];
408 (%o1) [123, 456, 789]
413 (%i4) if x >= z then 1 else 0;
415 (%i5) block ([S], S : 0, for i:1 while i <= 100 do S : S + i, return (S));
419 Во всех других случаях операторы отношения не вычисляются или упрощаются до логических
420 значений, хотя их аргументы вычисляются.
423 @c [x, y, z] : [123, 456, 789];
424 @c [x < y, y <= z, z >= y, y > z];
428 (%o1) [123, 456, 789]
429 (%i2) [x < y, y <= z, z >= y, y > z];
430 (%o2) [123 < 456, 456 <= 789, 789 >= 456, 456 > 789]
432 (%o3) [true, true, true, false]
435 @opencatbox{Категории:}
441 @node Общие операторы, , Операторы отношения, Операторы
442 @section Общие операторы
446 @fnindex Некоммутативное возведение в степень
449 Оператор некоммутативного возведение в степень.
450 @code{^^} - оператор некоммутативного возведение в степень, соответствующий некоммутативному умножению @code{.},
451 ровно так же как обычный оператор возведение в степень @code{^} соответствует коммутативному умножению @code{*}.
453 Некоммутативное возведение в степень отображается как @code{^^} в 1D (одномерном) выводе,
454 и в виде показателя степени как верхний индекс в угловых скобка @code{< >} в 2D (двумерном) выводе.
459 @c a . a . b . b . b + a * a * a * b * b;
460 @c string (a . a . b . b . b + a * a * a * b * b);
463 (%i1) a . a . b . b . b + a * a * a * b * b;
466 (%i2) string (a . a . b . b . b + a * a * a * b * b);
467 (%o2) a^3*b^2+a^^2 . b^^3
470 @opencatbox{Категории:}
481 Для всех комплексных чисел @code{x} (включая целые, рациональные, и вещественные числа),
482 за исключением отрицательных целых, @code{x!} задается как @code{gamma(x+1)}.
484 Для целого @code{x}, @code{x!} упрощается до произведения целых чисел от
485 1 до @code{x} включительно.
486 @code{0!} упрощается до 1.
487 Для чисел с плавающей точкой @code{x}, @code{x!} упрощается до значения @code{gamma (x+1)}.
488 Для @code{x} равных @code{n/2}, где @code{n} - нечетное целое,
489 @code{x!} упрощается до рационального множителя, умноженного на @code{sqrt (%pi)}
490 (т. к. @code{gamma (1/2)} равно @code{sqrt (%pi)}).
491 Если @code{x} - что то еще, то @code{x!} не упрощается.
493 Переменные @code{factlim}, @code{minfactorial} и @code{factcomb} управляют упрощением выражений,
494 содержащих факториалы.
496 Функции @code{gamma}, @code{bffac} и @code{cbffac}
497 являются разновидностями гамма функции.
498 @code{makegamma} заменяет @code{gamma} для факториалов и связанных функций.
500 См. также @code{binomial}.
502 Факториал целого, полуцелого или аргумента с плавающей точкой, упрощается
503 если операнд не больше чем @code{factlim}.
507 @c [0!, (7/2)!, 4.77!, 8!, 20!];
512 (%i2) [0!, (7/2)!, 4.77!, 8!, 20!];
514 (%o2) [1, -------------, 81.44668037931199, 40320, 20!]
518 Факториал комплексного числа, известной константы, или выражение общего вида не упрощается.
519 Но в этом случае возможно упростить факториал после вычисления операнда.
522 @c [(%i + 1)!, %pi!, %e!, (cos(1) + sin(1))!];
523 @c ev (%, numer, %enumer);
526 (%i1) [(%i + 1)!, %pi!, %e!, (cos(1) + sin(1))!];
527 (%o1) [(%i + 1)!, %pi!, %e!, (sin(1) + cos(1))!]
528 (%i2) ev (%, numer, %enumer);
529 (%o2) [(%i + 1)!, 7.188082728976037, 4.260820476357,
533 Факториал символа, не имеющего значения, не упрощается.
546 Факториалы упрощаются, а не вычисляются.
547 Таким образом, @code{x!} можно заменять даже в экранированном (quoted) выражении.
550 @c '([0!, (7/2)!, 4.77!, 8!, 20!]);
553 (%i1) '([0!, (7/2)!, 4.77!, 8!, 20!]);
555 (%o1) [1, -------------, 81.44668037931199, 40320,
560 @opencatbox{Категории:}
562 @category{Гамма функции и факториалы}
569 @fnindex Двойной факториал
571 Оператор двойного факториала.
573 Для целого, числа с плавающей точкой или рационального числа @code{n},
574 @code{n!!} вычисляется как произведение @code{n (n-2) (n-4) (n-6) ... (n - 2 (k-1))}
575 где @code{k} равно @code{entier (n/2)},
576 то есть, наибольшее целое меньше или равное @code{n/2}.
577 Заметим, что это определение не совпадает с другими опубликованными определениями
578 для нецелых аргументов.
579 @c REPORTED TO BUG TRACKER AS BUG # 1093138 !!!
581 Для четного (или нечетного) целого @code{n}, @code{n!!} вычисляется как произведение
582 всех последовательных четных (или нечетных) целых от 2 (или 1) до @code{n} включительно.
584 Для аргумента @code{n}, который не является целым, числом с плавающей точкой, или рациональным числом,
585 @code{n!!} дает невычисляемую форму @code{genfact (n, n/2, 2)}.
586 @c n!! IS NEITHER SIMPLIFIED NOR EVALUATED IN THIS CASE -- MENTION THAT? OR TOO MUCH DETAIL ???
588 @opencatbox{Категории:}
590 @category{Гамма функции и факториалы}
597 @fnindex Не равно (синтаксическое неравенство)
599 Обозначает отрицание синтаксического равенства @code{=}.
601 Заметим, что из-за правил для вычисления предикатных выражений
602 (в частности из-за того, что @code{not @var{expr}} вызывает вычисление @var{expr}),
603 @code{not @var{a} = @var{b}} эквивалентно @code{is(@var{a} # @var{b})},
604 вместо @code{@var{a} # @var{b}}.
627 (%i6) is (not a = b);
631 @opencatbox{Категории:}
639 @fnindex Некоммутативное умножение
641 Оператор "точка" предназначен для матричного (некоммутативного) умножения.
642 Когда @code{"."} используется таким образом, пробелы должны присутствовать с обеих сторон,
643 то есть @code{A . B}. Это позволяет различать оператор от десятичной точки в числе с плавающей точкой.
651 @code{dotconstrules},
658 @opencatbox{Категории:}
666 @fnindex Присваивание
668 Оператор присваивания.
670 Если левая сторона есть простая переменная (не переменная с индексом),
671 то @code{:} вычисляет правую сторону присваивания
672 и присваивает значение с левой частью.
674 Если левая строна есть индексированный элемент списка, матрица, объявленного Maxima массива или Lisp массива,
675 то значение правой части присваивается этому элементу.
676 Индекс должен выделять существующий элемент.
677 Подобные конструкции нельзя расширить на несуществующие элементы.
679 Если левая сторона есть индексированный элемент необъявленного массива,
680 то значение правой части присваивается этому элементу, если таковой уже существует,
681 или вновь созданному объекту, если он еще не существует.
683 Если левая строна присваивания есть список простых переменных и/или переменных с индексом, то
684 правая часть должна вычисляться в список, и элементы этого списка присваиваются
685 элементам левой части параллельно.
687 См. также @code{kill} и @code{remvalue},
688 которые отменяют присваивание.
692 Присваивание простой переменной.
708 Присваивание элементу списка.
724 Присваивание создает необъявленный массив.
741 (%o4) [hashed, 1, [99]]
746 Множественные присваивания.
749 @c [a, b, c] : [45, 67, 89];
755 (%i1) [a, b, c] : [45, 67, 89];
765 Множественные присваивания выполняются параллельно.
766 В этом примере переменные @code{a} и @code{b} обмениваются значениями.
769 @c [a, b] : [33, 55];
775 (%i1) [a, b] : [33, 55];
777 (%i2) [a, b] : [b, a];
785 @opencatbox{Категории:}
786 @category{Вычисление}
794 @fnindex Присваивание (с вычислением левого выражения)
796 Оператор присваивания.
798 Оператор @code{::} аналогичен оператору присваивания @code{:}
799 за исключением того, что @code{::} вычисляет свою левую часть наряду с вычислением правой части.
808 @c x :: [11, 22, 33];
820 (%i4) x : '[a, b, c];
822 (%i5) x :: [11, 22, 33];
832 @opencatbox{Категории:}
833 @category{Вычисление}
839 @deffn {Оператор} ::=
841 @fnindex Определение макро функции
843 Оператор определения макро функции.
844 @code{::=} задает функцию (называемую "макрос" по историческим причинам)
845 которое экранирует (quote) свои аргументы,
846 и выражение, которое она возвращает (называемое "макро расширение"),
847 вычисляется в том контексте, из которого этот макрос был вызван.
848 В других отношениях макро функция такая же как и обыкновенная функция.
850 Функция @code{macroexpand} возвращает макро расширение (без ее вычисления).
851 @code{macroexpand (foo (x))} следующее за @code{''%} эквивалентно @code{foo (x)},
852 где @code{foo} есть макро функция.
854 Оператор @code{::=} помещает имя новой макро функции в глобальный список @code{macros}.
855 Функции @code{kill}, @code{remove} и @code{remfunction} удаляет определения макро функций
856 и удаляет имена из @code{macros}.
858 Функции @code{fundef} или @code{dispfun}, соответственно,
859 возвращает определение макро функции или присваивает его метке.
861 Макро функции обычно содержат @code{buildq} и @code{splice}
862 выражения для конструирования выражения,
863 которое затем вычисляется.
867 Макро функция экранирует свои аргументы,
868 так что сообщение (1) показывает выражение @code{y - z}, а не значение @code{y - z}.
869 Макро расширение (экранированное выражение @code{'(print ("(2) x равно ", x))}
870 вычисляется в том контексте, из которого этот макрос был вызван,
871 печатая сообщение (2).
877 @c printq1 (x) ::= block (print ("(1) x is equal to", x),
878 @c '(print ("(2) x is equal to", x)));
888 (%i4) printq1 (x) ::= block (print ("(1) x is equal to", x),
889 '(print ("(2) x is equal to", x)));
890 (%o4) printq1(x) ::= block(print("(1) x is equal to", x),
891 '(print("(2) x is equal to", x)))
892 (%i5) printq1 (y - z);
893 (1) x is equal to y - z
894 (2) x is equal to %pi
898 Обыкновенная функция вычисляет свои аргументы, так что сообщение (1) показывает значение @code{y - z}.
899 Возвращаемое значение не вычисляется, так что сообщение (2) не печатается
900 до момента явного вычисления @code{''%}.
906 @c printe1 (x) := block (print ("(1) x is equal to", x),
907 @c '(print ("(2) x is equal to", x)));
918 (%i4) printe1 (x) := block (print ("(1) x is equal to", x),
919 '(print ("(2) x is equal to", x)));
920 (%o4) printe1(x) := block(print("(1) x is equal to", x),
921 '(print("(2) x is equal to", x)))
922 (%i5) printe1 (y - z);
923 (1) x is equal to 1234 - 1729 w
924 (%o5) print((2) x is equal to, x)
926 (2) x is equal to %pi
930 Функция @code{macroexpand} возвращает макро расширение.
931 Выражение @code{macroexpand (foo (x))}, идущее перед @code{''%} эквивалентно @code{foo (x)},
932 когда @code{foo} есть макро функция.
938 @c g (x) ::= buildq ([x], print ("x is equal to", x));
939 @c macroexpand (g (y - z));
950 (%i4) g (x) ::= buildq ([x], print ("x is equal to", x));
951 (%o4) g(x) ::= buildq([x], print("x is equal to", x))
952 (%i5) macroexpand (g (y - z));
953 (%o5) print(x is equal to, y - z)
955 x is equal to 1234 - 1729 w
958 x is equal to 1234 - 1729 w
962 @opencatbox{Категории:}
963 @category{Определение функций}
972 @fnindex Определение функции
975 Оператор определения функции.
977 @code{@var{f}(@var{x_1}, ..., @var{x_n}) := @var{expr}}
978 определяет функцию с именем @var{f}, аргументами @var{x_1}, ..., @var{x_n} и телом функции @var{expr}.
979 Оператор @code{:=} никогда не вычисляет тело функции (если только вычисление не задано явно оператором
980 кавычка-кавычка @code{'@w{}'}).
981 Функция заданная таким образом может быть обыкновенной Maxima функцией (с аргументами, заключенными в скобки)
982 или функцией массивом (с аргументами, заключенными в квадратные скобки).
984 Когда последний или единственный аргумент функции @var{x_n} есть список из одного элемента,
985 функция, заданная @code{:=} принимает переменное число аргументов.
986 Фактические аргументы присваиваются один-в-один формальным аргументам @var{x_1}, ..., @var{x_(n - 1)},
987 и любые дальнейшие фактические аргументы, если присутствуют, присваиваются к @var{x_n} как список.
989 Все определения функций появляются в том же пространстве имен;
990 задав функцию @code{f} внутри другой функции @code{g}, определение
991 не ограничивает зону видимости @code{f} в @code{g}.
993 Если некоторый формальный аргумент @var{x_k} есть экранированный (quoted) символ,
994 функция, заданная с помощью @code{:=}, не вычисляет соответствующий фактический аргумент.
995 В противном случае, все фактические аргументы вычисляются.
997 См. также @code{define} и @code{::=}.
1001 @code{:=} никогда не вычисляет тело функции (если только явно не задано вычисление).
1004 @c expr : cos(y) - sin(x);
1005 @c F1 (x, y) := expr;
1007 @c F2 (x, y) := ''expr;
1011 (%i1) expr : cos(y) - sin(x);
1012 (%o1) cos(y) - sin(x)
1013 (%i2) F1 (x, y) := expr;
1014 (%o2) F1(x, y) := expr
1016 (%o3) cos(y) - sin(x)
1017 (%i4) F2 (x, y) := ''expr;
1018 (%o4) F2(x, y) := cos(y) - sin(x)
1020 (%o5) cos(b) - sin(a)
1023 Функция, заданная @code{:=}, может быть обыкновенной Maxima функцией или функцией массивом.
1026 @c G1 (x, y) := x.y - y.x;
1027 @c G2 [x, y] := x.y - y.x;
1030 (%i1) G1 (x, y) := x.y - y.x;
1031 (%o1) G1(x, y) := x . y - y . x
1032 (%i2) G2 [x, y] := x.y - y.x;
1033 (%o2) G2 := x . y - y . x
1037 Когда последний или единственный аргумент функции @var{x_n} есть список из одного элемента,
1038 функция, заданная @code{:=}, принимает переменное число аргументов.
1041 @c H ([L]) := apply ("+", L);
1045 (%i1) H ([L]) := apply ("+", L);
1046 (%o1) H([L]) := apply("+", L)
1051 @opencatbox{Категории:}
1052 @category{Определение функций}
1053 @category{Операторы}
1060 @fnindex Оператор равенства
1061 @fnindex Равенство (синтаксическое равенство)
1065 Выражение @code{@var{a} = @var{b}}, само по себе, представляет собой
1066 невычисляемое уравнение, которое может или может не выполняться.
1067 Невычисляемые уравнения могут появляться как аргументы в @code{solve} и @code{algsys},
1068 или в некоторых других функциях.
1070 Функция @code{is} вычисляет @code{=} до логического значения.
1071 @code{is(@var{a} = @var{b})} вычисляет @code{@var{a} = @var{b}} в @code{true}, когда @var{a} и @var{b}
1072 тождественны. То есть, @var{a} и @var{b} есть атомы, которые идентичны,
1073 или они не атомы и их операторы идентичны и их аргументы идентичны.
1074 В противном случае, @code{is(@var{a} = @var{b})} вычисляется в @code{false};
1075 он никогда не вычисляется в @code{unknown}.
1076 Когда @code{is(@var{a} = @var{b})} есть @code{true}, говорят что @var{a} и @var{b} синтаксически равны,
1077 в противоположность эквивалентным выражениям, для которых @code{is(equal(@var{a}, @var{b}))} есть @code{true}.
1078 Выражения могут быть равны, но синтаксически не равны.
1080 Отрицание @code{=} представляется как @code{#}.
1081 Как и в случае с @code{=}, выражение @code{@var{a} # @var{b}}, само по себе, не вычисляется.
1082 @code{is(@var{a} # @var{b})} вычисляется @code{@var{a} # @var{b}} до
1083 @code{true} или @code{false}.
1086 некоторые другие операторы вычисляют @code{=} и @code{#} до @code{true} или @code{false},
1087 а именно @code{if}, @code{and}, @code{or} и @code{not}.
1089 Заметим, что из-за правил для вычисления предикатных выражений
1090 (в частности из-за того, что @code{not @var{expr}} вызывает вычисление @var{expr}),
1091 @code{not @var{a} = @var{b}} эквивалентно @code{is(@var{a} # @var{b})},
1092 а не @code{@var{a} # @var{b}}.
1094 @code{rhs} и @code{lhs} возвращают правую и левую часть
1095 уравнения или неравенства соответственно.
1097 См. также @code{equal} или @code{notequal}.
1101 Выражение @code{@var{a} = @var{b}}, само по себе, представляет
1102 невычисляемое уравнение, которое может или может не выполняться.
1105 @c eq_1 : a * x - 5 * y = 17;
1106 @c eq_2 : b * x + 3 * y = 29;
1107 @c solve ([eq_1, eq_2], [x, y]);
1108 @c subst (%, [eq_1, eq_2]);
1112 (%i1) eq_1 : a * x - 5 * y = 17;
1113 (%o1) a x - 5 y = 17
1114 (%i2) eq_2 : b * x + 3 * y = 29;
1115 (%o2) 3 y + b x = 29
1116 (%i3) solve ([eq_1, eq_2], [x, y]);
1118 (%o3) [[x = ---------, y = -----------]]
1120 (%i4) subst (%, [eq_1, eq_2]);
1121 196 a 5 (29 a - 17 b)
1122 (%o4) [--------- - --------------- = 17,
1124 196 b 3 (29 a - 17 b)
1125 --------- + --------------- = 29]
1128 (%o5) [17 = 17, 29 = 29]
1131 @code{is(@var{a} = @var{b})} вычисляет @code{@var{a} = @var{b}} в @code{true},
1132 когда @var{a} и @var{b} тождественны (синтаксически равны).
1133 Выражения могут быть равны, но синтаксически не равны.
1136 @c a : (x + 1) * (x - 1);
1138 @c [is (a = b), is (a # b)];
1139 @c [is (equal (a, b)), is (notequal (a, b))];
1142 (%i1) a : (x + 1) * (x - 1);
1143 (%o1) (x - 1) (x + 1)
1147 (%i3) [is (a = b), is (a # b)];
1149 (%i4) [is (equal (a, b)), is (notequal (a, b))];
1153 Некоторые операторы вычисляют @code{=} и @code{#} до @code{true} или @code{false}.
1156 @c if expand ((x + y)^2) = x^2 + 2 * x * y + y^2 then FOO else
1158 @c eq_3 : 2 * x = 3 * x;
1159 @c eq_4 : exp (2) = %e^2;
1160 @c [eq_3 and eq_4, eq_3 or eq_4, not eq_3];
1163 (%i1) if expand ((x + y)^2) = x^2 + 2 * x * y + y^2 then FOO else
1166 (%i2) eq_3 : 2 * x = 3 * x;
1168 (%i3) eq_4 : exp (2) = %e^2;
1171 (%i4) [eq_3 and eq_4, eq_3 or eq_4, not eq_3];
1172 (%o4) [false, true, true]
1175 Из-за того, что @code{not @var{expr}} вызывает вычисление @var{expr},
1176 @code{not @var{a} = @var{b}} эквивалентно @code{is(@var{a} # @var{b})}.
1179 @c [2 * x # 3 * x, not (2 * x = 3 * x)];
1180 @c is (2 * x # 3 * x);
1183 (%i1) [2 * x # 3 * x, not (2 * x = 3 * x)];
1184 (%o1) [2 x # 3 x, true]
1185 (%i2) is (2 * x # 3 * x);
1189 @opencatbox{Категории:}
1190 @category{Операторы}
1196 @deffn {Оператор} and
1198 @fnindex Логическое умножение
1200 Оператор логического умножения.
1201 Оператор @code{and} есть n-арный инфиксный оператор.
1202 Его операнды есть логические выражения и его результат есть логическое значение.
1204 Оператор @code{and} вызывает вычисление (как и @code{is}) одного или более операндов,
1205 и может вызвать вычисление всех операндов.
1207 Операнды вычисляются в том же порядка, к котором они встречаются.
1208 Оператор @code{and} вычисляет только столько своих операндов, сколько необходимо для того,
1209 чтобы определить результат.
1210 Если хотя бы один операнд есть @code{false},
1211 результат есть @code{false}, и более ни один из операндов не вычисляется.
1213 Глобальный флаг @code{prederror} управляет поведением @code{and},
1214 когда вычисляемый операнд не может быть определен как @code{true} или @code{false}.
1215 Оператор @code{and} печатает сообщение об ошибке, когда @code{prederror} есть @code{true}.
1216 Иначе, операнды, которые не могут быть вычислены как @code{true} или @code{false}, принимаются,
1217 и результат есть логическое выражение.
1219 Оператор @code{and} не является коммутативным:
1220 @code{a and b} может быть не равно @code{b and a} из-за трактовки неопределенных операндов.
1222 @opencatbox{Категории:}
1223 @category{Операторы}
1229 @deffn {Оператор} or
1231 @fnindex Логическое сложение
1233 Оператор логического сложения.
1234 @code{or} есть n-арный инфиксный оператор.
1235 Его операнды есть логические выражения и его результат есть логическое значение.
1237 @code{or} вызывает вычисление (как и @code{is}) одного или более операндов,
1238 и может вызвать вычисление всех операндов.
1240 Операнды вычисляются в том же порядка, к котором они встречаются.
1241 @code{or} вычисляет только столько своих операндов, сколько необходимо для того, чтобы определить результат.
1242 Если хотя бы один операнд есть @code{true},
1243 результат есть @code{true}, и более ни один из операндов не вычисляется.
1245 Глобальный флаг @code{prederror} управляет поведением @code{or},
1246 когда вычисляемый операнд не может быть определен как @code{true} или @code{false}.
1247 Оператор @code{or} печатает сообщение об ошибке, когда @code{prederror} есть @code{true}.
1248 Иначе, операнды, которые не могут быть вычислены как @code{true} или @code{false}, принимаются,
1249 и результат есть логическое выражение.
1251 Оператор @code{or} не является коммутативным:
1252 @code{a or b} может быть не равно @code{b or a} из-за трактовки неопределенных операндов.
1254 @opencatbox{Категории:}
1255 @category{Операторы}
1261 @deffn {Оператор} not
1263 @fnindex Логическое отрицание
1265 Оператор логического отрицания.
1266 Оператор @code{not} есть префиксный оператор.
1267 Его операнд есть логическое выражение и его результат есть логическое значение.
1269 Оператор @code{not} вызывает вычисление (как и @code{is}) своего операнда.
1271 Глобальный флаг @code{prederror} управляет поведением @code{not},
1272 когда его операнд не может быть определен как значения @code{true} или @code{false}.
1273 Оператор @code{not} печатает сообщение об ошибке, когда @code{prederror} есть @code{true}.
1274 Иначе, операнды, которые не могут быть вычислены как @code{true} или @code{false}, принимаются,
1275 и результат есть логическое выражение.
1277 @opencatbox{Категории:}
1278 @category{Операторы}
1284 @deffn {Функция} abs (@var{expr})
1285 Возвращает абсолютное значение @var{expr} (модуль выражения).
1286 Если @var{expr} - комплексное, возвращается комплексный модуль @var{expr}.
1288 @opencatbox{Категории:}
1289 @category{Математические функции}
1294 @defvr {Ключевое слово} additive
1295 Если @code{declare(f,additive)} было выполнено, то:
1297 (1) Если @code{f} одномерно, пока упрощение не столкнулось с @code{f} примененному к сумме,
1298 @code{f} будет распространено вдоль этой суммы. То есть, @code{f(y+x)} будет
1299 упрощено как @code{f(y)+f(x)}.
1301 (2) Если @code{f} есть функция двух или более аргументов, аддитивность задается как
1302 аддитивность по первому аргументу @code{f}, как в случае @code{sum} или
1303 @code{integrate}, то есть @code{f(h(x)+g(x),x)} будет упрощено как @code{f(h(x),x)+f(g(x),x)}.
1304 Это упрощение не произойдет, когда @code{f} применена к выражению вида @code{sum(x[i],i,lower-limit,upper-limit)}.
1306 @opencatbox{Категории:}
1307 @category{Операторы}
1308 @category{Факты и выводы}
1313 @c NEEDS TO BE REWORKED. NOT CONVINCED THIS SYMBOL NEEDS ITS OWN ITEM
1314 @c (SHOULD BE DESCRIBED IN CONTEXT OF EACH FUNCTION WHICH RECOGNIZES IT)
1315 @defvr {Ключевое слово} allbut
1316 Работает с командами @code{part} (например, @code{part}, @code{inpart}, @code{substpart},
1317 @code{substinpart}, @code{dpart} и @code{lpart}). Например:
1320 @c expr : e + d + c + b + a;
1321 @c part (expr, [2, 5]);
1324 (%i1) expr : e + d + c + b + a;
1325 (%o1) e + d + c + b + a
1326 (%i2) part (expr, [2, 5]);
1333 @c expr : e + d + c + b + a;
1334 @c part (expr, allbut (2, 5));
1337 (%i1) expr : e + d + c + b + a;
1338 (%o1) e + d + c + b + a
1339 (%i2) part (expr, allbut (2, 5));
1343 @code{allbut} также распознается @code{kill}.
1346 @c [aa : 11, bb : 22, cc : 33, dd : 44, ee : 55];
1347 @c kill (allbut (cc, dd));
1348 @c [aa, bb, cc, dd];
1351 (%i1) [aa : 11, bb : 22, cc : 33, dd : 44, ee : 55];
1352 (%o1) [11, 22, 33, 44, 55]
1353 (%i2) kill (allbut (cc, dd));
1355 (%i1) [aa, bb, cc, dd];
1356 (%o1) [aa, bb, 33, 44]
1359 @code{kill(allbut(@var{a_1}, @var{a_2}, ...))} имеет тот же эффект, что @code{kill(all)}
1360 за исключением того, что это не очищает символы @var{a_1}, @var{a_2}, ... .
1364 @defvr {Декларация} antisymmetric
1365 Если @code{declare(h,antisymmetric)} выполнена, этот говорит
1366 упрощателю, что @code{h} - антисимметричная. Например, @code{h(x,z,y)} упростится до
1367 @code{- h(x, y, z)}. То есть, это дает (-1)^n умноженное на @code{symmetric}
1368 или @code{commutative} результат, где n есть число перестановок двух
1369 аргументов необходимых для того, чтобы перевести к конечной форме.
1371 @opencatbox{Категории:}
1372 @category{Операторы}
1373 @category{Факты и выводы}
1378 @deffn {Функция} cabs (@var{expr})
1379 Возвращает комплексное абсолютное значение (комплексный модуль) @var{expr}.
1381 @opencatbox{Категории:}
1382 @category{Комплексные переменные}
1387 @deffn {Функция} ceiling (@var{x})
1389 Когда @var{x} есть вещественное число - возвращает наименьшее целое, которое
1390 больше чем или равно @var{x}.
1392 Если @var{x} - константное выражение (@code{10 * %pi}, например),
1393 @code{ceiling} вычисляет @var{x} используя большие числа с плавающей точкой и
1394 применяет @code{ceiling} к конечному большому числу с плавающей точкой.
1395 Из-за того, что @code{ceiling} использует вычисления
1396 с числами с плавающей точкой, возможно, хотя маловероятно,
1397 что @code{ceiling} может вернуть ошибочное значение для константных
1398 входных данных. Чтобы защититься от ошибок, вычисление с числами с плавающей точкой
1399 выполняется с использованием трех значений для @code{fpprec}.
1401 Для неконстантных входных данных, @code{ceiling} пытается вернуть упрощенное
1402 значение. Вот примеры упрощений, о которых @code{ceiling}
1406 @c ceiling (ceiling (x));
1407 @c ceiling (floor (x));
1408 @c declare (n, integer)$
1409 @c [ceiling (n), ceiling (abs (n)), ceiling (max (n, 6))];
1410 @c assume (x > 0, x < 1)$
1412 @c tex (ceiling (a));
1415 (%i1) ceiling (ceiling (x));
1417 (%i2) ceiling (floor (x));
1419 (%i3) declare (n, integer)$
1420 (%i4) [ceiling (n), ceiling (abs (n)), ceiling (max (n, 6))];
1421 (%o4) [n, abs(n), max(n, 6)]
1422 (%i5) assume (x > 0, x < 1)$
1425 (%i7) tex (ceiling (a));
1426 $$\left \lceil a \right \rceil$$
1430 Функция @code{ceiling} автоматически не распространяется (map) для списков или матриц.
1431 Наконец, для всех входных данных, которые объявлены комплексными,
1432 @code{ceiling} возвращает невычисляемую форму.
1434 Если диапазон функции есть подмножество целых, она может быть
1435 объявлена как @code{integervalued}. Обе функции @code{ceiling} и @code{floor}
1436 могут использовать эту информацию. Например:
1439 @c declare (f, integervalued)$
1441 @c ceiling (f(x) - 1);
1444 (%i1) declare (f, integervalued)$
1447 (%i3) ceiling (f(x) - 1);
1451 @opencatbox{Категории:}
1452 @category{Математические функции}
1457 @deffn {Функция} charfun (@var{p})
1459 Возвращает 0, когда предикат @var{p} вычисляется как @code{false}; возвращает
1460 1, когда предикат вычисляется как @code{true}. Когда предикат
1461 вычисляется до чего-то другого, чем @code{true} или @code{false} (unknown),
1462 возвращает невычисляемую форму.
1468 @c subst (x = -1, %);
1469 @c e : charfun ('"and" (-1 < x, x < 1))$
1470 @c [subst (x = -1, e), subst (x = 0, e), subst (x = 1, e)];
1473 (%i1) charfun (x < 1);
1474 (%o1) charfun(x < 1)
1475 (%i2) subst (x = -1, %);
1477 (%i3) e : charfun ('"and" (-1 < x, x < 1))$
1478 (%i4) [subst (x = -1, e), subst (x = 0, e), subst (x = 1, e)];
1482 @opencatbox{Категории:}
1483 @category{Математические функции}
1488 @defvr {Декларация} commutative
1489 Если @code{declare(h,commutative)} выполнено, это говорит
1490 упрощателю, что @code{h} есть коммутативная функция. То есть @code{h(x,z,y)}
1491 упроститься до @code{h(x, y, z)}. Это тоже самое, что и @code{symmetric}.
1493 @opencatbox{Категории:}
1494 @category{Операторы}
1495 @category{Факты и выводы}
1500 @deffn {Функция} compare (@var{x}, @var{y})
1502 Возвращает оператор отношения @var{op}
1503 (@code{<}, @code{<=}, @code{>}, @code{>=}, @code{=} или @code{#}) так что
1504 @code{is (@var{x} @var{op} @var{y})} вычисляется до @code{true};
1505 когда @var{x} или @var{y} зависит от @code{%i} и
1506 @code{@var{x} # @var{y}}, возвращает @code{notcomparable};
1507 когда нет такого оператора или
1508 Maxima не может определить оператор, возвращает @code{unknown}.
1515 @c compare (%i, %i);
1516 @c compare (%i, %i + 1);
1517 @c compare (1/x, 0);
1518 @c compare (x, abs(x));
1521 (%i1) compare (1, 2);
1523 (%i2) compare (1, x);
1525 (%i3) compare (%i, %i);
1527 (%i4) compare (%i, %i + 1);
1529 (%i5) compare (1/x, 0);
1531 (%i6) compare (x, abs(x));
1535 Функция @code{compare} не пытается определить, действительно ли области определения ее аргументов непусты.
1539 @c compare (acos (x^2 + 1), acos (x^2 + 1) + 1);
1542 (%i1) compare (acos (x^2 + 1), acos (x^2 + 1) + 1);
1546 @c IT IS NOT QUITE TRUE, WHAT ABOUT x=0 ?
1547 Действительная область определения @code{acos (x^2 + 1)} пуста.
1549 @opencatbox{Категории:}
1550 @category{Факты и выводы}
1555 @deffn {Функция} entier (@var{x})
1556 Возвращает наибольшее целое меньше или равное чем @var{x}, где @var{x} - численное.
1557 Функция @code{fix} (как и в @code{fixnum}) есть синоним,
1558 так что @code{fix(@var{x})} в точности тоже самое.
1560 @opencatbox{Категории:}
1561 @category{Математические функции}
1566 @deffn {Функция} equal (@var{a}, @var{b})
1567 Представляет эквивалентность, то есть, равное значение.
1569 Само по себе, @code{equal} не вычисляется или упрощается.
1570 Функция @code{is} пытается вычислить @code{equal} до логического значения.
1571 Функция @code{is(equal(@var{a}, @var{b}))}
1572 возвращает @code{true} (или @code{false}), если
1573 и только если, @var{a} и @var{b} равны (или не равны) для всех возможных
1574 значений своих переменных, как определено вычислением @code{ratsimp(@var{a} - @var{b})}.
1575 Если @code{ratsimp} возвращает 0, два выражения рассматриваются эквивалентными.
1576 Два выражения могут быть эквивалентными даже если они не являются синтаксически равными (то есть, идентичными).
1578 Когда @code{is} не может упростить @code{equal} до @code{true} или @code{false},
1579 результат управляется глобальным флагом @code{prederror}.
1580 Когда @code{prederror} есть @code{true},
1581 @code{is} выдает сообщение об ошибке.
1582 Иначе, @code{is} возвращает @code{unknown}.
1584 В добавление к @code{is},
1585 некоторые другие операторы вычисляют @code{equal} и @code{notequal} до @code{true} или @code{false},
1586 а именно @code{if}, @code{and}, @code{or} и @code{not}.
1588 @c FOLLOWING STATEMENT IS MORE OR LESS TRUE BUT I DON'T THINK THE DETAILS ARE CORRECT
1589 @c Declarations (integer, complex, etc)
1590 @c for variables appearing in @var{a} and @var{b} are ignored by @code{equal}.
1591 @c All variables are effectively assumed to be real-valued.
1593 Отрицанием @code{equal} является @code{notequal}.
1597 Само по себе, @code{equal} не вычисляет и не упрощает.
1600 @c equal (x^2 - 1, (x + 1) * (x - 1));
1601 @c equal (x, x + 1);
1605 (%i1) equal (x^2 - 1, (x + 1) * (x - 1));
1607 (%o1) equal(x - 1, (x - 1) (x + 1))
1608 (%i2) equal (x, x + 1);
1609 (%o2) equal(x, x + 1)
1614 Функция @code{is} пытается вычислить @code{equal} до логического значения.
1615 @code{is(equal(@var{a}, @var{b}))} возвращает @code{true} когда @code{ratsimp(@var{a} - @var{b})} возвращает 0.
1616 Два выражения могут быть эквивалентными даже если они синтаксически не равны (то есть, не идентичны).
1619 @c ratsimp (x^2 - 1 - (x + 1) * (x - 1));
1620 @c is (equal (x^2 - 1, (x + 1) * (x - 1)));
1621 @c is (x^2 - 1 = (x + 1) * (x - 1));
1622 @c ratsimp (x - (x + 1));
1623 @c is (equal (x, x + 1));
1626 @c is (equal (x, y));
1630 (%i1) ratsimp (x^2 - 1 - (x + 1) * (x - 1));
1632 (%i2) is (equal (x^2 - 1, (x + 1) * (x - 1)));
1634 (%i3) is (x^2 - 1 = (x + 1) * (x - 1));
1636 (%i4) ratsimp (x - (x + 1));
1638 (%i5) is (equal (x, x + 1));
1640 (%i6) is (x = x + 1);
1642 (%i7) ratsimp (x - y);
1644 (%i8) is (equal (x, y));
1650 Когда @code{is} не может упростить @code{equal} до @code{true} или @code{false},
1651 результат управляется глобальным флагом @code{prederror}.
1654 @c [aa : x^2 + 2*x + 1, bb : x^2 - 2*x - 1];
1655 @c ratsimp (aa - bb);
1656 @c prederror : true;
1657 @c is (equal (aa, bb));
1658 @c prederror : false;
1659 @c is (equal (aa, bb));
1662 (%i1) [aa : x^2 + 2*x + 1, bb : x^2 - 2*x - 1];
1664 (%o1) [x + 2 x + 1, x - 2 x - 1]
1665 (%i2) ratsimp (aa - bb);
1667 (%i3) prederror : true;
1669 (%i4) is (equal (aa, bb));
1670 Maxima was unable to evaluate the predicate:
1672 equal(x + 2 x + 1, x - 2 x - 1)
1673 -- an error. Quitting. To debug this try debugmode(true);
1674 (%i5) prederror : false;
1676 (%i6) is (equal (aa, bb));
1680 Некоторые операторы вычисляют @code{equal} или @code{notequal} до @code{true} или @code{false}.
1683 @c if equal (y, y - 1) then FOO else BAR;
1684 @c eq_1 : equal (x, x + 1);
1685 @c eq_2 : equal (y^2 + 2*y + 1, (y + 1)^2);
1686 @c [eq_1 and eq_2, eq_1 or eq_2, not eq_1];
1689 (%i1) if equal (y, y - 1) then FOO else BAR;
1691 (%i2) eq_1 : equal (x, x + 1);
1692 (%o2) equal(x, x + 1)
1693 (%i3) eq_2 : equal (y^2 + 2*y + 1, (y + 1)^2);
1695 (%o3) equal(y + 2 y + 1, (y + 1) )
1696 (%i4) [eq_1 and eq_2, eq_1 or eq_2, not eq_1];
1697 (%o4) [false, true, true]
1700 Из-за того, что @code{not @var{expr}} вызывает вычисление @var{expr},
1701 @code{not equal(@var{a}, @var{b})} эквивалентно @code{is(notequal(@var{a}, @var{b}))}.
1704 @c [notequal (2*z, 2*z - 1), not equal (2*z, 2*z - 1)];
1705 @c is (notequal (2*z, 2*z - 1));
1708 (%i1) [notequal (2*z, 2*z - 1), not equal (2*z, 2*z - 1)];
1709 (%o1) [notequal(2 z, 2 z - 1), true]
1710 (%i2) is (notequal (2*z, 2*z - 1));
1714 @opencatbox{Категории:}
1715 @category{Операторы}
1720 @deffn {Функция} floor (@var{x})
1722 Когда @var{x} есть вещественное число - возвращает наибольшее целое, которое
1723 меньше или равно @var{x}.
1725 Если @var{x} есть константное выражение (@code{10 * %pi}, например),
1726 @code{floor} вычисляет @var{x} используя большие числа с плавающей точкой и
1727 применяет @code{floor} к результирующему значению.
1728 Из-за того, что @code{floor} использует вычисления с числами с плавающей точкой, возможно, хотя маловероятно,
1729 что @code{floor} может вернуть ошибочное значение для константных
1730 входных данных. Чтобы застраховаться от ошибок, вычисление с числами с плавающей точкой выполняется,
1731 используя три значения для @code{fpprec}.
1733 Для неконстантных входных данных, @code{floor} пытается вернуть упрощенное
1734 значение. Вот примеры упрощений, о которых @code{floor}
1738 @c floor (ceiling (x));
1739 @c floor (floor (x));
1740 @c declare (n, integer)$
1741 @c [floor (n), floor (abs (n)), floor (min (n, 6))];
1742 @c assume (x > 0, x < 1)$
1747 (%i1) floor (ceiling (x));
1749 (%i2) floor (floor (x));
1751 (%i3) declare (n, integer)$
1752 (%i4) [floor (n), floor (abs (n)), floor (min (n, 6))];
1753 (%o4) [n, abs(n), min(n, 6)]
1754 (%i5) assume (x > 0, x < 1)$
1757 (%i7) tex (floor (a));
1758 $$\left \lfloor a \right \rfloor$$
1762 Функция @code{floor} автоматически не распространяется (map) для списков или матриц.
1763 Наконец, для всех входных данных, которые заданы как комплексные, @code{floor} возвращает невычисляемую форму.
1765 Если диапазон функции есть подмножество целых, она может быть
1766 объявлена как @code{integervalued}. Обе функции @code{ceiling} и @code{floor}
1767 могут использовать эту информацию. Например:
1770 @c declare (f, integervalued)$
1772 @c ceiling (f(x) - 1);
1775 (%i1) declare (f, integervalued)$
1778 (%i3) ceiling (f(x) - 1);
1782 @opencatbox{Категории:}
1783 @category{Математические функции}
1788 @deffn {Функция} notequal (@var{a}, @var{b})
1789 Представляет собой отрицание @code{equal(@var{a}, @var{b})}.
1795 @c maybe (equal (a, b));
1797 @c not equal (a, b);
1798 @c maybe (notequal (a, b));
1801 @c maybe (equal (a, b));
1803 @c maybe (notequal (a, b));
1808 (%i2) maybe (equal (a, b));
1810 (%i3) notequal (a, b);
1811 (%o3) notequal(a, b)
1812 (%i4) not equal (a, b);
1813 (%o4) notequal(a, b)
1814 (%i5) maybe (notequal (a, b));
1816 (%i6) assume (a > b);
1820 (%i8) maybe (equal (a, b));
1822 (%i9) notequal (a, b);
1823 (%o9) notequal(a, b)
1824 (%i10) maybe (notequal (a, b));
1828 @opencatbox{Категории:}
1829 @category{Операторы}
1834 @c NEEDS EXPANSION, CLARIFICATION, AND EXAMPLES
1835 @c NOTE THAT eval IS RECOGNIZED ONLY AS AN ARGUMENT TO ev,
1836 @c BUT FOR SOME REASON eval DOES NOT HAVE THE evflag PROPERTY
1837 @deffn {Оператор} eval
1838 Как аргумент в вызове к @code{ev (@var{expr})},
1839 @code{eval} вызывает дополнительное вычисление @var{expr}.
1842 @opencatbox{Категории:}
1843 @category{Флаги вычисления}
1848 @deffn {Функция} evenp (@var{expr})
1849 Возвращает @code{true} если @var{expr} есть четное целое.
1850 @c THIS IS STRANGE -- SHOULD RETURN NOUN FORM IF INDETERMINATE
1851 @code{false} возвращается во всех других случаях.
1853 @opencatbox{Категории:}
1854 @category{Функции предикаты}
1859 @deffn {Функция} fix (@var{x})
1860 Синоним для @code{entier (@var{x})}.
1862 @opencatbox{Категории:}
1863 @category{Математические функции}
1869 @deffn {Функция} fullmap (@var{f}, @var{expr_1}, ...)
1870 Аналогично @code{map}, но @code{fullmap} продолжает процедуру распространения
1871 для всех подвыражений до тех пор, пока основные операторы более не остаются теми же самыми.
1873 Функция @code{fullmap} используется Maxima
1874 упрощателем для некоторых матричных манипуляций. Таким образом, Maxima иногда генерирует
1875 сообщение об ошибке, касающееся @code{fullmap} хотя @code{fullmap} явно не вызывалась пользователем.
1887 (%i2) fullmap (g, %);
1888 (%o2) g(b) g(c) + g(a)
1889 (%i3) map (g, %th(2));
1893 @opencatbox{Категории:}
1894 @category{Применение функций}
1895 @category{Выражения}
1901 @deffn {Функция} fullmapl (@var{f}, @var{list_1}, ...)
1902 Аналогично @code{fullmap}, но @code{fullmapl} только распространяется на
1908 @c fullmapl ("+", [3, [4, 5]], [[a, 1], [0, -1.5]]);
1911 (%i1) fullmapl ("+", [3, [4, 5]], [[a, 1], [0, -1.5]]);
1912 (%o1) [[a + 3, 4], [4, 3.5]]
1915 @opencatbox{Категории:}
1916 @category{Применение функций}
1917 @category{Выражения}
1922 @deffn {Функция} is (@var{expr})
1923 Пытается определить, является ли предикат @var{expr}
1924 доказуемым из фактов в базе данных @code{assume}.
1926 Если этот предикат является доказуемым как @code{true} или @code{false},
1927 @code{is} возвращает @code{true} или @code{false}, соответственно.
1928 Иначе, возвращаемое значение управляется глобальным флагом @code{prederror}.
1929 Когда @code{prederror} есть @code{true},
1930 @code{is} выдает сообщение об ошибке.
1931 Иначе, @code{is} возвращает @code{unknown}.
1933 Выражение @code{ev(@var{expr}, pred)}
1934 (который можно переписать как @code{@var{expr}, pred} в интерактивной строке)
1935 эквивалентно @code{is(@var{expr})}.
1937 См. также @code{assume}, @code{facts} и @code{maybe}.
1941 @code{is} вызывает вычисление предикатов.
1950 (%i2) is (%pi > %e);
1954 @code{is} пытается вывести предикаты из базы данных @code{assume}.
1961 @c is (equal (a, c));
1964 (%i1) assume (a > b);
1966 (%i2) assume (b > c);
1972 (%i5) is (equal (a, c));
1976 Если @code{is} не может доказать или опровергнуть предикат из базы данных @code{assume},
1977 глобальный флаг @code{prederror} управляет поведением @code{is}.
1983 @c prederror: false$
1987 (%i1) assume (a > b);
1989 (%i2) prederror: true$
1991 Maxima was unable to evaluate the predicate:
1993 -- an error. Quitting. To debug this try debugmode(true);
1994 (%i4) prederror: false$
1999 @opencatbox{Категории:}
2000 @category{Функции предикаты}
2001 @category{Факты и выводы}
2006 @deffn {Функция} maybe (@var{expr})
2007 Пытается определить, является ли предикат @var{expr}
2008 доказуемым исходя из фактов в базе данных @code{assume}.
2010 Если этот предикат доказуем как @code{true} или @code{false},
2011 @code{maybe} возвращает @code{true} или @code{false}, соответственно.
2012 Иначе, @code{maybe} возвращает @code{unknown}.
2014 @code{maybe} функционально эквивалентен @code{is} с @code{prederror: false},
2015 но результат вычислен без реального присвоение значения @code{prederror}.
2017 См. также @code{assume}, @code{facts} и @code{is}.
2027 (%i1) maybe (x > 0);
2029 (%i2) assume (x > 1);
2031 (%i3) maybe (x > 0);
2035 @opencatbox{Категории:}
2036 @category{Функции предикаты}
2037 @category{Факты и выводы}
2042 @deffn {Функция} isqrt (@var{x})
2043 Возвращает "целый квадратный корень"
2044 абсолютного значения @var{x},
2047 @opencatbox{Категории:}
2048 @category{Математические функции}
2053 @deffn {Функция} lmax (@var{L})
2055 Когда @var{L} есть список или множество, возвращает @code{apply ('max, args (@var{L}))}. Когда @var{L} не является
2056 списком или множеством, выдает ошибку.
2058 @opencatbox{Категории:}
2059 @category{Математические функции}
2061 @category{Множества}
2066 @deffn {Функция} lmin (@var{L})
2068 Когда @var{L} есть список или множество, возвращает @code{apply ('min, args (@var{L}))}. Когда @var{L} не является
2069 списком или множеством, выдает ошибку.
2071 @opencatbox{Категории:}
2072 @category{Математические функции}
2074 @category{Множества}
2079 @deffn {Функция} max (@var{x_1}, ..., @var{x_n})
2081 Возвращает упрощенное значение максимума выражений от @var{x_1} до @var{x_n}.
2082 Когда @code{get (trylevel, maxmin)} есть 2 или больше, @code{max} использует упрощение
2083 @code{max (e, -e) --> |e|}. Когда @code{get (trylevel, maxmin)} есть 3 или больше, @var{max} старается
2084 исключить выражения, заключенные по значению между двумя другими аргументами. Например,
2085 @code{max (x, 2*x, 3*x) --> max (x, 3*x)}. Для установки значения @code{trylevel} в 2, используется
2086 @code{put (trylevel, 2, maxmin)}.
2088 @opencatbox{Категории:}
2089 @category{Математические функции}
2094 @deffn {Функция} min (@var{x_1}, ..., @var{x_n})
2096 Возвращает упрощенное значение минимума выражений от @var{x_1} до @var{x_n}.
2097 Когда @code{get (trylevel, maxmin)} есть 2 или больше, @code{min} использует упрощение
2098 @code{min (e, -e) --> -|e|}. Когда @code{get (trylevel, maxmin)} есть 3 или больше, @var{min} старается
2099 исключить выражения, заключенные по значению между двумя другими аргументами. Например,
2100 @code{min (x, 2*x, 3*x) --> min (x, 3*x)}. Для установки значения @code{trylevel} в 2, используется
2101 @code{put (trylevel, 2, maxmin)}.
2103 @opencatbox{Категории:}
2104 @category{Математические функции}
2109 @deffn {Функция} polymod (@var{p})
2110 @deffnx {Функция} polymod (@var{p}, @var{m})
2111 Конвертирует многочлен @var{p} в модулярное представление,
2112 с учетом текущего модуля, которое является значением переменной
2115 @code{polymod (@var{p}, @var{m})} определяет модуль @var{m}, который будет использоваться
2116 вместо текущего значения @code{modulus}.
2120 @opencatbox{Категории:}
2121 @category{Многочлены}
2126 @deffn {Функция} mod (@var{x}, @var{y})
2128 Если @var{x} и @var{y} есть вещественные числа и @var{y} не отрицательно,
2129 возвращает @code{@var{x} - @var{y} * floor(@var{x} / @var{y})}.
2130 Далее для всех вещественных @var{x} имеем @code{mod (@var{x}, 0) = @var{x}}. Подробное обсуждение
2131 определения @code{mod (@var{x}, 0) = @var{x}} есть в разделе 3.4 "Concrete Mathematics,"
2132 авторов Graham, Knuth и Patashnik. Функция @code{mod (@var{x}, 1)}
2133 есть пилообразная функция с периодом 1, @code{mod (1, 1) = 0} и
2134 @code{mod (0, 1) = 0}.
2136 Чтобы найти главный аргумент (число в интервале @code{(-%pi, %pi]}) для комплексного числа,
2137 используется функция @code{@var{x} |-> %pi - mod (%pi - @var{x}, 2*%pi)}, где
2138 @var{x} есть аргумент.
2140 Когда @var{x} и @var{y} есть константные выражения (например @code{10 * %pi}), @code{mod}
2141 использует то же вычисления с числами с плавающей точкой повышенной точности, что и, @code{floor} и @code{ceiling}.
2142 Опять же, возможно, хотя маловероятно, что @code{mod} может вернуть ошибочное значение в таких случаях.
2144 Для не численных аргументов @var{x} или @var{y}, @code{mod} знает несколько правил упрощения:
2154 (%i2) mod (a*x, a*y);
2160 @opencatbox{Категории:}
2161 @category{Математические функции}
2166 @deffn {Функция} oddp (@var{expr})
2167 есть @code{true} если @var{expr} есть нечетное целое.
2168 @c THIS IS STRANGE -- SHOULD RETURN NOUN FORM IF INDETERMINATE
2169 @code{false} возвращается во всех других случаях.
2171 @opencatbox{Категории:}
2172 @category{Функции предикаты}
2177 @c NEEDS EXPANSION, CLARIFICATION, AND EXAMPLES
2178 @c NOTE THAT pred IS RECOGNIZED ONLY AS AN ARGUMENT TO ev,
2179 @c BUT FOR SOME REASON pred DOES NOT HAVE THE evflag PROPERTY
2180 @deffn {Оператор} pred
2181 В качестве аргумента в вызове @code{ev (@var{expr})},
2182 @code{pred} вызывает вычисление предикатов (выражений, которые вычисляются в @code{true}
2186 @opencatbox{Категории:}
2187 @category{Флаги вычисления}
2192 @deffn {Функция} make_random_state (@var{n})
2193 @deffnx {Функция} make_random_state (@var{s})
2194 @deffnx {Функция} make_random_state (true)
2195 @deffnx {Функция} make_random_state (false)
2196 @c OMIT THIS FOR NOW. SEE COMMENT BELOW.
2197 @c @defunx make_random_state (@var{a})
2199 Объект случайного состояния представляет собой состояние генератора случайных чисел.
2200 Оно содержит 627 32-битных слова.
2202 @code{make_random_state (@var{n})} возвращает новое случайное состояние объекта
2203 созданного из затравочного целого числа, равного @var{n} по модулю 2^32.
2204 @var{n} может быть отрицательным.
2206 @c OMIT THIS FOR NOW. NOT SURE HOW THIS IS SUPPOSED TO WORK.
2207 @c @code{make_random_state (@var{a})} returns a new random state object
2208 @c created from an array @var{a}, which must be a Lisp array of 32 unsigned bytes.
2210 @code{make_random_state (@var{s})} возвращает копию случайного состояния @var{s}.
2212 @code{make_random_state (true)} возвращает новое случайное состояние объекта,
2213 используя текущее значение часов компьютера в качестве затравочного числа.
2215 @code{make_random_state (false)} возвращает копию текущего состояния
2216 генератора случайных чисел.
2218 @opencatbox{Категории:}
2219 @category{Случайные числа}
2224 @deffn {Функция} set_random_state (@var{s})
2225 Копирует @var{s} в состояние генератора случайных чисел.
2227 @code{set_random_state} всегда возвращает @code{done}.
2229 @opencatbox{Категории:}
2230 @category{Случайные числа}
2235 @deffn {Функция} random (@var{x})
2236 Возвращает псевдослучайное число. Если @var{x} есть целое, @code{random (@var{x})} возвращает
2237 целое в пределах от 0 до @code{@var{x} - 1} включительно. Если @var{x} есть число с плавающей точкой,
2238 @code{random (@var{x})} возвращает неотрицательное число с плавающей точкой меньше чем @var{x}.
2239 Функция @code{random} выдает сообщение об ошибке, если @var{x} не есть целое, или не число с плавающей точкой,
2240 или если @var{x} неположительное.
2242 Функции @code{make_random_state} и @code{set_random_state}
2243 сохраняют состояние генератора случайных чисел.
2245 Генератор случайных чисел Maxima - это реализация Mersenne twister MT 19937.
2250 @c s1: make_random_state (654321)$
2251 @c set_random_state (s1);
2253 @c random (9573684);
2255 @c s2: make_random_state (false)$
2259 @c set_random_state (s2);
2265 (%i1) s1: make_random_state (654321)$
2266 (%i2) set_random_state (s1);
2268 (%i3) random (1000);
2270 (%i4) random (9573684);
2272 (%i5) random (2^75);
2273 (%o5) 11804491615036831636390
2274 (%i6) s2: make_random_state (false)$
2276 (%o7) .2310127244107132
2277 (%i8) random (10.0);
2278 (%o8) 4.394553645870825
2279 (%i9) random (100.0);
2280 (%o9) 32.28666704056853
2281 (%i10) set_random_state (s2);
2283 (%i11) random (1.0);
2284 (%o11) .2310127244107132
2285 (%i12) random (10.0);
2286 (%o12) 4.394553645870825
2287 (%i13) random (100.0);
2288 (%o13) 32.28666704056853
2291 @opencatbox{Категории:}
2292 @category{Случайные числа}
2293 @category{Численные методы}
2298 @deffn {Функция} rationalize (@var{expr})
2300 Конвертирует все числа с плавающей точкой двойной точности и повышенной точности в выражении
2301 @var{expr} в рациональные эквивалентны. Если вы не знакомы с
2302 бинарным представлением чисел с плавающей точкой, вы может
2303 быть удивлены тем, что @code{rationalize (0.1)} не равно 1/10. Это поведение
2304 имеет место не только в Maxima -- число 1/10 имеет периодическое, не заканчивающееся,
2305 двоичное представление.
2308 @c rationalize (0.5);
2309 @c rationalize (0.1);
2311 @c rationalize (0.1b0);
2313 @c rationalize (0.1b0);
2314 @c rationalize (sin (0.1*x + 5.6));
2317 (%i1) rationalize (0.5);
2321 (%i2) rationalize (0.1);
2326 (%i4) rationalize (0.1b0);
2331 (%i6) rationalize (0.1b0);
2332 236118324143482260685
2333 (%o6) ----------------------
2334 2361183241434822606848
2335 (%i7) rationalize (sin (0.1*x + 5.6));
2341 Пример использования:
2344 @c unitfrac(r) := block([uf : [], q],
2345 @c if not(ratnump(r)) then
2346 @c error("The input to 'unitfrac' must be a rational number"),
2348 @c uf : cons(q : 1/ceiling(1/r), uf),
2353 @c unitfrac (-9/10);
2355 @c unitfrac (36/37);
2359 (%i1) unitfrac(r) := block([uf : [], q],
2360 if not(ratnump(r)) then
2361 error("The input to 'unitfrac' must be a rational number"),
2363 uf : cons(q : 1/ceiling(1/r), uf),
2366 (%o1) unitfrac(r) := block([uf : [], q],
2367 if not ratnump(r) then
2368 error("The input to 'unitfrac' must be a rational number"),
2370 while r # 0 do (uf : cons(q : ----------, uf), r : r - q),
2375 (%i2) unitfrac (9/10);
2379 (%i3) apply ("+", %);
2383 (%i4) unitfrac (-9/10);
2387 (%i5) apply ("+", %);
2391 (%i6) unitfrac (36/37);
2393 (%o6) [-, -, -, --, ----]
2395 (%i7) apply ("+", %);
2401 @opencatbox{Категории:}
2402 @category{Численное вычисление}
2408 @deffn {Функция} round (@var{x})
2410 Если @var{x} является вещественным числом, то возвращает ближайшее к @var{x}
2411 целое. Числа, кратные 1/2, округляются до ближайшего четного целого.
2412 Вычисление @var{x} аналогично функциям @code{floor} и @code{ceiling}.
2414 @opencatbox{Категории:}
2415 @category{Математические функции}
2419 @deffn {Функция} sign (@var{expr})
2420 Пытается определить знак @var{expr}
2421 на основе фактов в текущей базе данных. Она возвращает один из
2422 следующих ответов: @code{pos} (положительное), @code{neg} (отрицательное), @code{zero} (нулевое), @code{pz}
2423 (положительное или ноль), @code{nz} (отрицательное или ноль), @code{pn} (положительное или отрицательное),
2424 или @code{pnz} (положительное, отрицательное или ноль, т.е. ничего не известно).
2426 @opencatbox{Категории:}
2427 @category{Факты и выводы}
2432 @deffn {Функция} signum (@var{x})
2433 Для численного значения @var{x}, возвращает 0, если @var{x} есть 0, иначе возвращает -1 или +1,
2434 когда @var{x} меньше чем или больше чем 0, соответственно.
2436 Если @var{x} не есть численное значение, то возвращается эквивалентная, но упрощенная форма.
2437 Например, @code{signum(-x)} дает @code{-signum(x)}.
2438 @c UMM, THIS ISN'T THE WHOLE STORY, AS IT APPEARS signum CONSULTS THE assume DATABASE FOR SYMBOLIC ARGUMENT
2440 @opencatbox{Категории:}
2441 @category{Математические функции}
2446 @deffn {Функция} sort (@var{L}, @var{P})
2447 @deffnx {Функция} sort (@var{L})
2448 Сортирует список @var{L} согласно предикату @code{P} двух аргументов,
2449 так чтобы @code{@var{P} (@var{L}[k], @var{L}[k + 1])} было равно @code{true}
2450 для любых двух последовательных элементов.
2451 Предикат может быть задан как имя функции или бинарный инфиксный оператор,
2452 или как лямбда-выражение.
2453 Если он задан как имя оператора,
2454 это имя берется в "двойные кавычки".
2456 Отсортированный список возвращается как новый объект;
2457 аргумент @var{L} не изменяется.
2458 При возврате значения,
2459 @code{sort} делает копию верхнего уровня (shallow copy) элементов @var{L}.
2460 @c DUNNO IF WE NEED TO GO INTO THE IMPLICATIONS OF SHALLOW COPY HERE ...
2462 @c MIGHT CONSIDER A REF FOR TOTAL ORDER HERE
2463 Если предикат @var{P} не задает полное упорядочивание элементов @var{L},
2464 то @code{sort} может пробежать до конца без ошибки,
2465 но результат будет неопределенный.
2466 @code{sort} выдает сообщение, если предикат вычисляется до чего-то отличного
2467 от @code{true} или @code{false}.
2469 @code{sort (@var{L})} эквивалентно @code{sort (@var{L}, orderlessp)}.
2470 То есть, порядок сортировки по умолчанию будет восходящим,
2471 как определено для @code{orderlessp}.
2472 Все Maxima атомы и выражения сравнимы по @code{orderlessp},
2473 хотя есть отдельные примеры выражений, для которых @code{orderlessp} не транзитивна
2479 @c sort ([11, -17, 29b0, 7.55, 3, -5/2, b + a, 9 * c,
2481 @c sort ([11, -17, 29b0, 7.55, 3, -5/2, b + a, 9 * c, 19 - 3 * x],
2483 @c sort ([%pi, 3, 4, %e, %gamma]);
2484 @c sort ([%pi, 3, 4, %e, %gamma], "<");
2485 @c my_list : [[aa, hh, uu], [ee, cc], [zz, xx, mm, cc], [%pi, %e]];
2487 @c sort (my_list, lambda ([a, b], orderlessp (reverse (a),
2491 (%i1) sort ([11, -17, 29b0, 7.55, 3, -5/2, b + a, 9 * c,
2494 (%o1) [- 17, - -, 3, 7.55, 11, 2.9b1, b + a, 9 c, 19 - 3 x]
2496 (%i2) sort ([11, -17, 29b0, 7.55, 3, -5/2, b + a, 9*c, 19 - 3*x],
2499 (%o2) [19 - 3 x, 9 c, b + a, 2.9b1, 11, 7.55, 3, - -, - 17]
2501 (%i3) sort ([%pi, 3, 4, %e, %gamma]);
2502 (%o3) [3, 4, %e, %gamma, %pi]
2503 (%i4) sort ([%pi, 3, 4, %e, %gamma], "<");
2504 (%o4) [%gamma, %e, 3, %pi, 4]
2505 (%i5) my_list: [[aa,hh,uu], [ee,cc], [zz,xx,mm,cc], [%pi,%e]];
2506 (%o5) [[aa, hh, uu], [ee, cc], [zz, xx, mm, cc], [%pi, %e]]
2507 (%i6) sort (my_list);
2508 (%o6) [[%pi, %e], [aa, hh, uu], [ee, cc], [zz, xx, mm, cc]]
2509 (%i7) sort (my_list, lambda ([a, b], orderlessp (reverse (a),
2511 (%o7) [[%pi, %e], [ee, cc], [zz, xx, mm, cc], [aa, hh, uu]]
2514 @opencatbox{Категории:}
2521 @deffn {Функция} sqrt (@var{x})
2522 Квадратный корень @var{x}. Внутренне представляется как
2523 @code{@var{x}^(1/2)}. См. также @code{rootscontract}.
2525 @code{radexpand}, если @code{true}, вызовет то, что n-ные корни множителей произведения,
2526 которые есть степени n, будут вынесены за пределы радикала. Например,
2527 @code{sqrt(16*x^2)} станет @code{4*x}, только если @code{radexpand} есть @code{true}.
2529 @opencatbox{Категории:}
2530 @category{Математические функции}
2535 @defvr {Управляющая переменная} sqrtdispflag
2536 Значение по умолчанию: @code{true}
2538 Когда @code{sqrtdispflag} есть @code{false},
2539 то @code{sqrt} выводится как степень с показателем 1/2.
2540 @c AND OTHERWISE ... ??
2542 @opencatbox{Категории:}
2543 @category{Математические функции}
2544 @category{Переменные и флаги вывода}
2549 @c NEEDS EXPANSION, CLARIFICATION, MORE EXAMPLES
2550 @c sublis CAN ONLY SUBSTITUTE FOR ATOMS, RIGHT ?? IF SO, SAY SO
2551 @deffn {Функция} sublis (@var{list}, @var{expr})
2552 Производит множественные параллельные подстановки в выражение.
2554 Переменная @code{sublis_apply_lambda} управляет упрощением после
2560 @c sublis ([a=b, b=a], sin(a) + cos(b));
2563 (%i1) sublis ([a=b, b=a], sin(a) + cos(b));
2564 (%o1) sin(b) + cos(a)
2567 @opencatbox{Категории:}
2568 @category{Выражения}
2573 @deffn {Функция} sublist (@var{list}, @var{p})
2574 Возвращает список элементов @var{list}, для которого
2575 предикат @code{p} возвращает @code{true}.
2580 @c L: [1, 2, 3, 4, 5, 6];
2581 @c sublist (L, evenp);
2584 (%i1) L: [1, 2, 3, 4, 5, 6];
2585 (%o1) [1, 2, 3, 4, 5, 6]
2586 (%i2) sublist (L, evenp);
2590 @opencatbox{Категории:}
2596 @defvr {Управляющая переменная} sublis_apply_lambda
2597 Значение по умолчанию: @code{true}
2599 Управляет, будет ли подстановки для @code{lambda} применены в упрощении,
2600 после того как используется @code{sublis} или
2601 нужно ли выполнить @code{ev}, чтобы эти элементы применились.
2602 @code{true} означает - выполнить применение.
2604 @opencatbox{Категории:}
2605 @category{Выражения}
2610 @c NEEDS CLARIFICATION, MORE EXAMPLES
2612 @deffn {Функция} subst (@var{a}, @var{b}, @var{c})
2613 Делает подстановку @var{a} для @var{b} в @var{c}.
2614 @var{b} должен быть атомом или полным подвыражением в @var{c}. Например, @code{x+y+z} есть полное
2615 подвыражение @code{2*(x+y+z)/w}, а @code{x+y} нет. Когда @var{b} не имеет
2616 эти характеристики, можно иногда использовать @code{substpart} или @code{ratsubst}
2617 (см. ниже). Альтернативно, если @var{b} задано в форме @code{e/f}, то можно
2618 использовать @code{subst (a*f, e, c)}, в то время как, если @var{b} задано в форме @code{e^(1/f)}, то можно
2619 использовать @code{subst (a^f, e, c)}. @code{subst} также различает @code{x^y} в @code{x^-y},
2620 так что @code{subst (a, sqrt(x), 1/sqrt(x))} дает @code{1/a}. Аргументы @var{a} и @var{b} могут также быть
2621 операторами выражения, заключенными в двойные кавычки @code{"}, или могут быть именами функций.
2622 Если есть желание подставить независимую переменную в
2623 производных формах, то следует использовать функцию @code{at} (см. ниже).
2625 @c UMM, REVERSE THIS AND MOVE IT TO substitute ??
2626 @code{subst} - это псевдоним для @code{substitute}.
2628 Выражения @code{subst (@var{eq_1}, @var{expr})} или @code{subst ([@var{eq_1}, ..., @var{eq_k}], @var{expr})}
2629 - есть другие допустимые формы.
2630 @var{eq_i} - уравнения, указывающие какие подстановки нужно сделать.
2631 Для каждого уравнения, правая сторона будет подставлена вместо левой в выражении @var{expr}.
2633 Если @code{exptsubst} равно @code{true}, то позволяются подстановки,
2634 на подобии @code{y} для @code{%e^x} в @code{%e^(a*x)}.
2636 @c WHAT IS THIS ABOUT ??
2637 Когда @code{opsubst} есть @code{false},
2638 @code{subst} не пытается подставить в оператор выражения.
2639 Например, @code{(opsubst: false, subst (x^2, r, r+r[0]))} будет работать.
2644 @c subst (a, x+y, x + (x+y)^2 + y);
2645 @c subst (-%i, %i, a + b*%i);
2648 (%i1) subst (a, x+y, x + (x+y)^2 + y);
2651 (%i2) subst (-%i, %i, a + b*%i);
2656 Чтобы узнать о других примерах, выполните @code{example (subst)}.
2658 @opencatbox{Категории:}
2659 @category{Выражения}
2664 @c NEEDS CLARIFICATION
2665 @deffn {Функция} substinpart (@var{x}, @var{expr}, @var{n_1}, ..., @var{n_k})
2666 Аналогично @code{substpart}, но @code{substinpart} работает с
2667 внутренним представление @var{expr}.
2672 @c x . 'diff (f(x), x, 2);
2673 @c substinpart (d^2, %, 2);
2674 @c substinpart (f1, f[1](x + 1), 0);
2677 (%i1) x . 'diff (f(x), x, 2);
2680 (%o1) x . (--- (f(x)))
2683 (%i2) substinpart (d^2, %, 2);
2686 (%i3) substinpart (f1, f[1](x + 1), 0);
2690 Если последний аргумент функции @code{part} есть список индексов, то будут выбраны
2691 несколько подвыражений, каждый из которых будет соответствовать
2692 индексу в списке. Таким образом
2695 @c part (x + y + z, [1, 3]);
2698 (%i1) part (x + y + z, [1, 3]);
2702 Переменная @code{piece} содержит значение последнего выражения, выбранного при использовании функции @code{part}.
2703 Оно устанавливается во время выполнения функции и,
2704 таким образом, может быть передано в саму функцию как показано ниже.
2705 Если @code{partswitch} равно @code{true}, то @code{end} возвращается когда
2706 выбранная часть выражения не существует, иначе
2707 выдается сообщение об ошибке.
2710 @c expr: 27*y^3 + 54*x*y^2 + 36*x^2*y + y + 8*x^3 + x + 1;
2711 @c part (expr, 2, [1, 3]);
2713 @c substpart (factor (piece), expr, [1, 2, 3, 5]);
2714 @c expr: 1/x + y/x - 1/z;
2715 @c substpart (xthru (piece), expr, [2, 3]);
2718 (%i1) expr: 27*y^3 + 54*x*y^2 + 36*x^2*y + y + 8*x^3 + x + 1;
2720 (%o1) 27 y + 54 x y + 36 x y + y + 8 x + x + 1
2721 (%i2) part (expr, 2, [1, 3]);
2724 (%i3) sqrt (piece/54);
2726 (%i4) substpart (factor (piece), expr, [1, 2, 3, 5]);
2728 (%o4) (3 y + 2 x) + y + x + 1
2729 (%i5) expr: 1/x + y/x - 1/z;
2733 (%i6) substpart (xthru (piece), expr, [2, 3]);
2739 Также, установка опции @code{inflag} в @code{true} и вызов @code{part} или @code{substpart} есть
2740 тоже самое, что и вызов @code{inpart} или @code{substinpart}.
2742 @opencatbox{Категории:}
2743 @category{Выражения}
2748 @c NEEDS CLARIFICATION
2749 @deffn {Функция} substpart (@var{x}, @var{expr}, @var{n_1}, ..., @var{n_k})
2750 Делает подстановку @var{x} в подвыражение,
2751 выбираемое последними аргументами, как в @code{part}. Возвращает
2752 новое значение @var{expr}. @var{x} может быть некоторым оператором для подстановки вместо
2753 оператора в @var{expr}. В некоторых случаях @var{x} нужно заключать в двойной кавычки @code{"}
2754 (Например, @code{substpart ("+", a*b, 0)} дает @code{b + a}).
2758 @c substpart (3/2, %, 2, 1, 2);
2760 @c substpart ("+", %, 1, 0);
2768 (%i2) substpart (3/2, %, 2, 1, 2);
2773 (%i3) a*x + f(b, y);
2775 (%i4) substpart ("+", %, 1, 0);
2776 (%o4) x + f(b, y) + a
2779 Также, установка опции @code{inflag} в @code{true} и вызов @code{part} или @code{substpart}, есть
2780 тоже самое, что и вызов @code{inpart} или @code{substinpart}.
2782 @opencatbox{Категории:}
2783 @category{Выражения}
2788 @c NEEDS EXPANSION AND EXAMPLES
2789 @deffn {Функция} subvarp (@var{expr})
2790 Возвращает @code{true}, если @var{expr} есть переменная с индексом,
2791 например @code{a[i]}.
2793 @opencatbox{Категории:}
2794 @category{Функции предикаты}
2799 @deffn {Функция} symbolp (@var{expr})
2800 Возвращает @code{true}, если @var{expr} есть символ, иначе @code{false}.
2801 На самом деле, @code{symbolp(x)} эквивалентно предикату @code{atom(x) and not numberp(x)}.
2803 @c FOLLOWING REALLY WANTS TO BE @xref{Identiifers} BUT THAT
2804 @c LEAVES THE UNPLEASANT RESIDUE *Note ...:: IN THE OUTPUT OF describe
2805 См. также @ref{Идентификаторы}.
2807 @opencatbox{Категории:}
2808 @category{Функции предикаты}
2813 @deffn {Функция} unorder ()
2814 Блокирует связывания, созданные последним вызовом упорядочивающих
2815 команд @code{ordergreat} и @code{orderless}. @code{ordergreat} и @code{orderless} не могут
2816 использоваться больше одного раза каждый, без вызова @code{unorder}.
2817 См. также @code{ordergreat} и @code{orderless}.
2821 @c HMM, IN THIS EXAMPLE, WHY ISN'T %o5 EQUAL TO ZERO ???
2836 (%i3) ordergreat (a);
2847 @opencatbox{Категории:}
2848 @category{Выражения}
2853 @c THIS ITEM SEEMS OUT OF PLACE -- IS IT FROM A SHARE PACKAGE ??
2855 @deffn {Функция} vectorpotential (@var{givencurl})
2856 Возвращает векторный потенциал заданного
2857 вектора кручения, в текущей системе координат.
2858 @code{potentialzeroloc} имеет аналогичную роль для @code{potential}, но порядок
2859 левосторонних частей уравнений должен быть циклической перестановкой
2860 координатных переменных.
2862 @opencatbox{Категории:}
2863 @category{Пакет vect}
2868 @deffn {Функция} xthru (@var{expr})
2869 Объединяет все члены @var{expr} (которое должно быть суммой) для общего знаменателя
2870 без раскрытия произведений и степеней сумм,
2871 что делает @code{ratsimp}. Функция @code{xthru} сокращает общие множители в числителе и
2872 знаменателе рациональных выражений, но только если эти множители явные.
2874 @c REPHRASE IN NEUTRAL TONE (GET RID OF "IT IS BETTER")
2875 Иногда лучше использовать @code{xthru} перед выражением, упрощенным с помощью @code{ratsimp},
2876 для того чтобы вызывать сокращение явных множителей наибольшего общего делителя
2877 числителя и знаменателя, таким образом, упрощая выражение перед @code{ratsimp}.
2880 @c ((x+2)^20 - 2*y)/(x+y)^20 + (x+y)^(-19) - x/(x+y)^20;
2884 (%i1) ((x+2)^20 - 2*y)/(x+y)^20 + (x+y)^(-19) - x/(x+y)^20;
2887 (%o1) --------- + --------------- - ---------
2889 (y + x) (y + x) (y + x)
2898 @opencatbox{Категории:}
2899 @category{Выражения}
2904 @c THIS FUNCTION APPEARS TO BE A HACK; SEE 4'TH ITEM BELOW
2905 @c DUNNO WHETHER WE CAN CLEAR THIS UP
2906 @deffn {Функция} zeroequiv (@var{expr}, @var{v})
2907 Проверяет эквивалентно ли выражение @var{expr} в переменной
2908 @var{v} нулю, возвращает @code{true}, @code{false} или
2911 @code{zeroequiv} имеет следующие ограничения:
2914 Не используйте функции, для которых Maxima не знает как
2915 их дифференцировать и вычислять.
2917 Если выражение имеет полюсы на вещественной прямой, могут быть ошибки
2918 в результате (это может произойти с малой вероятностью).
2920 Если выражение содержит функции, который не являются решением
2921 дифференциальных уравнений первого порядка (например, функции Бесселя),
2922 могут быть некорректные результаты.
2924 Этот алгоритм использует вычисление в случайно выбранных точках для
2925 аккуратно выбранных подвыражений. Это всегда, в некотором смысле,
2926 рискованное дело, хотя алгоритм пытается минимизировать возможность ошибки.
2929 Например @code{zeroequiv (sin(2*x) - 2*sin(x)*cos(x), x)} возвращает
2930 @code{true} и @code{zeroequiv (%e^x + x, x)} возвращает @code{false}.
2931 С другой стороны @code{zeroequiv (log(a*b) - log(a) - log(b), a)} возвращает
2932 @code{dontknow} из-за присутствия дополнительного параметра @code{b}.
2934 @opencatbox{Категории:}
2935 @category{Функции предикаты}