3 @c File=Expressions.texi
4 @c OriginalRevision=1.61
5 @c TranslatedBy: (c) 2007-12-24 Andrey Siver <ihep-2005@yandex.ru>
9 * Основные сведения о выражениях::
10 * Комплексные выражения::
11 * Невычисляемые и вычисляемые формы::
16 * Функции и переменные для выражений::
19 @node Основные сведения о выражениях, Комплексные выражения, Выражения, Выражения
20 @section Основные сведения о выражениях
22 Есть некоторое число зарезервированных слов, которые не могут быть использованы
23 как имена переменных. Их использование может вызвать скрытую
24 синтаксическую ошибку.
27 integrate next from diff
31 unless product while thru
35 Большинство сущностей в Maxima являются выражениями. Последовательность
36 выражений может превратиться в одно выражение, если элементы последовательности
37 разделены запятыми и последовательность взята в скобки. Это аналогично
38 подобным выражениям последовательного вычисления (comma expressions)
39 в языке программирования @b{C}.
43 (%i2) (x: x+1, x: x^2);
45 (%i3) (if (x > 17) then 2 else 4);
47 (%i4) (if (x > 17) then x: 2 else y: 4, y+x);
51 Даже циклы в Maxima являются выражениями, хотя то значение, которое они
52 возвращают, не слишком полезное @code{done}.
55 (%i1) y: (x: 1, for i from 1 thru 10 do (x: x*i))$
60 То, что Вы действительно хотите получить, нужно включить как третий
61 аргумент в выражение последовательного вычисления,
62 который в действительности возвращает значение.
65 (%i3) y: (x: 1, for i from 1 thru 10 do (x: x*i), x)$
71 @c THIS REALLY NEEDS EXPANSION
72 @node Комплексные выражения, Невычисляемые и вычисляемые формы, Основные сведения о выражениях, Выражения
73 @section Комплексные выражения
75 Комплексное выражение задается в Maxima добавлением к
76 вещественной части выражения @code{%i}, умноженного на мнимую часть.
77 Таким образом, корни уравнения @code{x^2 - 4*x + 13 = 0} равны @code{2 + 3*%i}
78 и @code{2 - 3*%i}. Заметим, что
79 упрощение произведений комплексных выражений может произойти после
80 раскрытия произведения. Упрощение отношений, корней и других
81 функций комплексных выражений, обычно, может быть произведено, с использованием
83 @code{realpart}, @code{imagpart}, @code{rectform}, @code{polarform}, @code{abs}
86 @opencatbox{Категории:}
87 @category{Комплексные переменные}
90 @node Невычисляемые и вычисляемые формы, Идентификаторы, Комплексные выражения, Выражения
91 @section Невычисляемые и вычисляемые формы
93 Maxima различает операторы, которые являются невычисляемыми (nouns) и операторы,
94 который являются вычисляемыми (verbs).
95 Вычисляемым является оператор, который может быть выполнен.
96 Невычисляемым является оператор, который встречается как символ в выражении,
98 По умолчанию, имена функций является вычисляемыми.
99 Вычисляемая форма может быть переведена в невычисляемую, экранированием (quoting) имени функции
100 или применением функции @code{nounify}.
101 Невычисляемая форма может быть переведена в вычисляемую, применением функции @code{verbify}.
102 Флаг вычисления @code{nouns} вызывает функцию @code{ev} для вычисления невычисляемых
105 Вычисляемая форма отличается первым знаком доллара @code{$} в
106 соответствующем Lisp-символе.
107 Невычисляемая форма, наоборот, отличается
108 первым знаком процента @code{%} в соответствующем Lisp-символе.
109 Некоторые невычисляемые формы, такие как @code{'integrate} и @code{'derivative}
110 (возвращаемые @code{diff}),
111 имеют специальные свойства вывода, но не всегда.
112 По умолчанию, невычисляемые и вычисляемые формы функции идентичны при выводе.
113 Глобальный флаг @code{noundisp} вызывает то, что Maxima выводит невычисляемые
114 формы с предшествующей одиночной кавычкой @code{'}.
116 См. также @code{noun}, @code{nouns}, @code{nounify} и @code{verbify}.
125 @c declare (bar, noun);
129 @c integrate (1/x, x, 1, 42);
130 @c 'integrate (1/x, x, 1, 42);
134 (%i1) foo (x) := x^2;
141 (%i4) 'foo (42), nouns;
143 (%i5) declare (bar, noun);
145 (%i6) bar (x) := x/17;
151 (%i8) bar (52), nouns;
155 (%i9) integrate (1/x, x, 1, 42);
157 (%i10) 'integrate (1/x, x, 1, 42);
165 (%i11) ev (%, nouns);
169 @opencatbox{Категории:}
170 @category{Вычисление}
171 @category{Вычисляемые и невычисляемые формы}
174 @node Идентификаторы, Строки, Невычисляемые и вычисляемые формы, Выражения
175 @section Идентификаторы
177 Идентификаторы Maxima могут содержать буквы алфавита,
178 плюс цифры от 0 до 9,
179 плюс любые специальные символы, с предшествующим знаком @code{\}.
181 Цифра может быть первым символом идентификатора,
182 если ей предшествует бэкслеш @code{\}.
183 Для цифр, которые являются вторыми или последующими символами, бэкслеш
186 Специальный символ может быть объявлен алфавитным, с помощью функции @code{declare}.
187 Если это так, его не нужно экранировать бэкслешом в идентификаторе.
188 Изначально к алфавитным символам относятся
189 @code{A} до @code{Z}, @code{a} до @code{z}, @code{%} и @code{_}.
191 Maxima чувствительна к регистру символов. Идентификаторы @code{foo}, @code{FOO} и @code{Foo} различны.
192 Для дальнейших сведений по этому вопросу смотрите @ref{Lisp и Maxima}.
194 Maxima идентификатор является Lisp-символом, который начинается со знака доллар @code{$}.
195 Любой другой Lisp-символ, когда он встречается в Maxima, предваряется знаком вопроса @code{?}.
196 См. @ref{Lisp и Maxima} для более подробной информации по этому вопросу.
201 @c %an_ordinary_identifier42;
202 @c embedded\ spaces\ in\ an\ identifier;
204 @c [foo+bar, foo\+bar];
206 @c [symbolp (foo\+bar), symbolp (\1729)];
207 @c [is (foo\+bar = foo+bar), is (\1729 = 1729)];
209 @c declare ("~", alphabetic);
211 @c [is (foo = FOO), is (FOO = Foo), is (Foo = foo)];
212 @c :lisp (defvar *my-lisp-variable* '$foo)
213 @c ?\*my\-lisp\-variable\*;
217 (%i1) %an_ordinary_identifier42;
218 (%o1) %an_ordinary_identifier42
219 (%i2) embedded\ spaces\ in\ an\ identifier;
220 (%o2) embedded spaces in an identifier
223 (%i4) [foo+bar, foo\+bar];
224 (%o4) [foo + bar, foo+bar]
227 (%i6) [symbolp (foo\+bar), symbolp (\1729)];
229 (%i7) [is (foo\+bar = foo+bar), is (\1729 = 1729)];
233 (%i9) declare ("~", alphabetic);
237 (%i11) [is (foo = FOO), is (FOO = Foo), is (Foo = foo)];
238 (%o11) [false, false, false]
239 (%i12) :lisp (defvar *my-lisp-variable* '$foo)
241 (%i12) ?\*my\-lisp\-variable\*;
245 @opencatbox{Категории:}
249 @node Строки, Неравенства, Идентификаторы, Выражения
252 Строки (последовательности символов в кавычках) заключаются в двойные
253 кавычки @code{"} при вводе и выводятся с или без кавычек,
254 в зависимости от значения глобальной переменной @code{stringdisp}.
256 Строки могут содержать любые символы,
257 включая символы табуляции, новой строки и возврат каретки.
258 Последовательность @code{\"} распознается как литерал двойной кавычки,
259 а @code{\\} как литерал бэкслеша.
260 Когда бэкслеш появляется в конце строки,
261 то бэкслеш и символ завершение строки (либо новая строка, либо возврат каретки)
262 игнорируются, так что данная строка продолжается со следующей строки.
263 Никакие другие специальные комбинации бэкслеша с другим символом не распознаются.
264 Если бэкслеш появляется перед любым символом, отличным от @code{"}, @code{\},
265 или конец строки, то он игнорируется.
266 Нет других способов для представления специальных символов
267 (таких как табуляция, новая строка или возврат каретки)
268 кроме как вставка этого символа в строку.
270 В Maxima нет типа одиночный символ.
271 Одиночный символ представляется как одно-символьная строка.
273 Дополнительный пакет @code{stringproc} содержит
274 много функций для работы со строками.
279 @c s_1 : "This is a string.";
280 @c s_2 : "Embedded \"double quotes\" and backslash \\ characters.";
281 @c s_3 : "Embedded line termination
283 @c s_4 : "Ignore the \
284 @c line termination \
287 @c stringdisp : false;
289 @c stringdisp : true;
293 (%i1) s_1 : "This is a string.";
294 (%o1) This is a string.
295 (%i2) s_2 : "Embedded \"double quotes\" and backslash \\ characters.";
296 (%o2) Embedded "double quotes" and backslash \ characters.
297 (%i3) s_3 : "Embedded line termination
299 (%o3) Embedded line termination
301 (%i4) s_4 : "Ignore the \
305 (%o4) Ignore the line termination characters in this string.
306 (%i5) stringdisp : false;
309 (%o6) This is a string.
310 (%i7) stringdisp : true;
313 (%o8) "This is a string."
316 @opencatbox{Категории:}
320 @node Неравенства, Синтаксис, Строки, Выражения
323 Maxima имеет операторы неравенства @code{<}, @code{<=}, @code{>=},
324 @code{>}, @code{#} и @code{notequal}.
325 См. @code{if} для описания условных выражений.
327 @opencatbox{Категории:}
332 @node Синтаксис, Функции и переменные для выражений, Неравенства, Выражения
335 Возможно определять новые операторы с заданным приоритетом,
336 удалять определения существующих операторов
337 или переопределять приоритет существующих операторов.
338 Оператор может быть унарным префиксным или унарным постфиксным,
339 бинарным инфиксным, n-арным (n-ary) инфиксным, матчфиксным (matchfix)
340 или безфиксным (nofix).
341 Матчфиксный (matchfix) обозначает пару символов, которые заключают между собой свой
342 аргумент или аргументы,
343 а безфиксный (nofix) означает оператор, который не принимает аргументы.
344 Следующие примеры демонстрируют различные типы операторов.
347 @item унарный префиксный
348 изменение знака @code{- a}
349 @item унарный постфиксный
351 @item бинарный инфиксный
352 экспонента @code{a^b}
353 @item n-арный инфиксный
354 сложение @code{a + b}
359 (Встроенных безфиксных операторов нет;
360 для примера такого оператора см. @code{nofix}.)
362 Механизм определения нового оператора прост.
363 Необходимо только объявить функцию как оператор;
364 сама функция оператора может быть определена или нет.
366 Вот пример определенных пользователем операторов.
367 Заметим, что явный вызов функции @code{"dd" (a)} эквивалентен
368 @code{dd a}, также как @code{"<-" (a, b)} эквивалентно @code{a <- b}.
369 Заметим также, что функции @code{"dd"} и @code{"<-"} не определены в этом
378 @c "<-" (a, "dd" (b));
391 (%i6) "<-" (a, "dd" (b));
395 Maxima функции, которые определяют новые операторы, сведены в нижеследующей таблице,
396 с установленными по умолчанию левыми и правыми степенями связывания (lbp и rbp, соответственно).
397 @c REWORK FOLLOWING COMMENT. IT'S NOT CLEAR ENOUGH, GIVEN THAT IT'S FAIRLY IMPORTANT
398 (Степень связывания определяет приоритет операторов. Однако, так как левые
399 и правые степени связывания могут отличаться, степень связывания - это что-то более сложное чем приоритет.)
400 Некоторые функции определения операций принимают дополнительные аргументы,
401 см. описания этих функций для более полного описания деталей.
403 @c MAKE ANCHORS FOR ALL 6 FUNCTIONS AND CHANGE @code TO @ref ACCORDINGLY
414 (степень связывания не применима)
416 (степень связывания не применима)
419 Для сравнения, приведем некоторые встроенные операторы, и их левые и правые
451 @code{remove} и @code{kill} удаляют свойства оператора из атома.
452 @code{remove ("@var{a}", op)} удаляет только свойства оператора @var{a}.
453 @code{kill ("@var{a}")} удаляет все свойства @var{a}, включая свойства
455 Заметим, что имя оператора должно быть взято в кавычки.
457 @c MAYBE COPY THIS EXAMPLE TO remove AND/OR kill
460 @c "@" (a, b) := a^b;
474 (%i2) "@@" (a, b) := a^b;
479 (%i4) remove ("@@", op);
482 Incorrect syntax: @@ is not an infix operator
494 Incorrect syntax: @@ is not an infix operator
501 @node Функции и переменные для выражений, , Синтаксис, Выражения
502 @section Функции и переменные для выражений
504 @deffn {Функция} at (@var{expr}, [@var{eqn_1}, ..., @var{eqn_n}])
505 @deffnx {Функция} at (@var{expr}, @var{eqn})
506 Вычисляет выражение @var{expr}, предполагая значения для переменных,
508 уравнений @code{[@var{eqn_1}, ..., @var{eqn_n}]} или одном уравнении @var{eqn}.
510 Если подвыражение зависит от переменных, для которых заданы значения,
511 но нет, заданного при помощи @code{atvalue} значения, или оно не может быть вычислено
512 иным способом, то возвращается невычисляемая форма @code{at}, которая выводится
515 Функция @code{at} выполняет множественные подстановки последовательно, не параллельно.
517 См. также @code{atvalue}.
518 Для описания других функций, которые выполняют подстановки,
519 см. также @code{subst} и @code{ev}.
522 @c COPIED FROM example(at)
525 @c atvalue (f(x,y), [x = 0, y = 1], a^2);
526 @c atvalue ('diff (f(x,y), x), x = 0, 1 + y);
527 @c printprops (all, atvalue);
528 @c diff (4*f(x, y)^2 - u(x, y)^2, x);
529 @c at (%, [x = 0, y = 1]);
532 (%i1) atvalue (f(x,y), [x = 0, y = 1], a^2);
535 (%i2) atvalue ('diff (f(x,y), x), x = 0, 1 + y);
537 (%i3) printprops (all, atvalue);
540 --- (f(@@1, @@2))! = @@2 + 1
548 (%i4) diff (4*f(x, y)^2 - u(x, y)^2, x);
550 (%o4) 8 f(x, y) (-- (f(x, y))) - 2 u(x, y) (-- (u(x, y)))
552 (%i5) at (%, [x = 0, y = 1]);
555 (%o5) 16 a - 2 u(0, 1) (-- (u(x, y))! )
562 @opencatbox{Категории:}
563 @category{Вычисление}
564 @category{Дифференциальные уравнения}
567 @deffn {Функция} box (@var{expr})
568 @deffnx {Функция} box (@var{expr}, @var{a})
569 Возвращает @var{expr}, заключенное в бокс (box).
570 Возвращаемое значение есть выражение с @code{box} в качестве оператора и
571 @var{expr} как аргумент.
572 Бокс изображается при выводе, когда @code{display2d} есть @code{true}.
574 @code{box (@var{expr}, @var{a})}
575 заключает @var{expr} в бокс, обозначенный символом @var{a}.
576 Эта метка обрезается, если она длиннее чем ширина бокса.
578 @code{box} вычисляет свои аргументы.
579 Однако, выражение, взятое в бокс, не вычисляется до его содержимого,
580 так что выражения в боксе эффективно исключается из вычислений.
582 @code{boxchar} есть символ, используемый для отображения бокса в
583 функциях @code{box}, в @code{dpart} и в @code{lpart}.
592 @c box (a^2 + b^2, term_1);
593 @c 1729 - box (1729);
595 @c box (sin(x) + cos(y));
598 (%i1) box (a^2 + b^2);
607 (%i4) box (a^2 + b^2);
610 (%o4) "(c - d) + 1522756"
612 (%i5) box (a^2 + b^2, term_1);
615 (%o5) "(c - d) + 1522756"
617 (%i6) 1729 - box (1729);
623 (%i8) box (sin(x) + cos(y));
625 (%o8) -cos(y) + sin(x)-
629 @opencatbox{Категории:}
635 @defvr {Управляющая переменная} boxchar
636 Значение по умолчанию: @code{"}
638 @code{boxchar} есть символ, который используется для изображения бокса в
639 функциях @code{box}, в @code{dpart} и в @code{lpart} .
641 Все боксы в выражении изображаются с текущим значением @code{boxchar}.
642 Изображаемый символ не сохраняется в выражении бокса.
644 @opencatbox{Категории:}
650 @deffn {Функция} carg (@var{z})
651 Возвращает комплексный аргумент @var{z}.
652 Этот комплексный аргумент есть угол @code{theta} в пределах @code{(-%pi, %pi]}
653 такой что @code{r exp (theta %i) = @var{z}}, где @code{r} есть модуль
655 @c ACTUALLY carg DOESN'T ALWAYS RETURN A VALUE IN (-%pi, %pi]; SEE SF BUG REPORT # 816166
657 @code{carg} есть вычислительная функция,
658 но не функция упрощения.
659 @c PROBABLY NEED TO EXPLAIN IMPLICATIONS OF ABOVE STATEMENT
660 @c SEE ALSO SF BUG REPORT # 902290
662 @code{carg} игнорирует декларацию @code{declare (@var{x}, complex)}
663 и рассматривает @var{x} как вещественную переменную.
664 Это ошибка. @c SEE SF BUG REPORT # 620246
666 См. также @code{abs} (комплексный модуль), @code{polarform}, @code{rectform},
667 @code{realpart} и @code{imagpart}.
675 @c carg (exp (%pi * %i));
676 @c carg (exp (3/2 * %pi * %i));
677 @c carg (17 * exp (2 * %i));
687 (%i3) carg (exp (%i));
689 (%i4) carg (exp (%pi * %i));
691 (%i5) carg (exp (3/2 * %pi * %i));
695 (%i6) carg (17 * exp (2 * %i));
699 @opencatbox{Категории:}
700 @category{Комплексные переменные}
705 @c NEEDS EXPANSION, CLARIFICATION, AND EXAMPLES
706 @c CROSS REF declare, properties, ETC
707 @deffn {Специальный оператор} constant
708 @code{declare (@var{a}, constant)} объявляет @var{a} как константу.
710 @c WHAT EXACTLY ARE THE CONSEQUENCES OF DECLARING AN ATOM TO BE CONSTANT ??
712 @opencatbox{Категории:}
713 @category{Факты и выводы}
719 @deffn {Функция} constantp (@var{expr})
720 Возвращает @code{true}, если @var{expr} есть константное выражение,
721 иначе возвращает @code{false}.
722 @c WHAT DOES MAXIMA KNOW ABOUT CONSTANT EXPRESSIONS ??
724 Выражение рассматривается как константное, если его аргументы
726 числа (включая рациональные числа, которые отображаются с помощью @code{/R/}),
727 символьные константы, такие как @code{%pi}, @code{%e} и @code{%i},
728 переменные, равные константами, или объявленные константами с помощью @code{declare},
729 или функции, чьи аргументы есть константы.
731 @code{constantp} вычисляет свои аргументы.
736 @c constantp (7 * sin(2));
737 @c constantp (rat (17/29));
738 @c constantp (%pi * sin(%e));
739 @c constantp (exp (x));
740 @c declare (x, constant);
741 @c constantp (exp (x));
742 @c constantp (foo (x) + bar (%e) + baz (2));
746 (%i1) constantp (7 * sin(2));
748 (%i2) constantp (rat (17/29));
750 (%i3) constantp (%pi * sin(%e));
752 (%i4) constantp (exp (x));
754 (%i5) declare (x, constant);
756 (%i6) constantp (exp (x));
758 (%i7) constantp (foo (x) + bar (%e) + baz (2));
763 @opencatbox{Категории:}
764 @category{Функции предикаты}
770 @c NEEDS EXPANSION, CLARIFICATION, AND EXAMPLES
771 @c THIS ITEM IS EXTREMELY IMPORTANT
772 @c ENSURE THAT ALL KEYWORDS RECOGNIZED BY declare HAVE THEIR OWN DOCUMENTATION ITEMS !!
773 @c ALSO: HOW TO FIND THE LIST OF ALL SYMBOLS WHICH HAVE A GIVEN PROPERTY ??
774 @deffn {Функция} declare (@var{a_1}, @var{p_1}, @var{a_2}, @var{p_2}, ...)
775 Присваивает атому или списку атомов @var{a_i} свойство или список свойств @var{p_i}.
776 Когда @var{a_i} и/или @var{p_i} есть списки,
777 каждый из атомом получает все свойства.
779 @code{declare} не вычисляет свои аргументы.
780 @code{declare} всегда возвращает @code{done}.
782 Как отмечено в описании для каждого флага декларации,
784 @code{featurep(@var{object}, @var{feature})}
785 возвращает @code{true}, если @var{object} был объявлен, как имеющий @var{feature}.
786 Однако, @code{featurep} не распознает некоторые флаги. Это ошибка.
788 См. также @code{features}.
790 @code{declare} распознает следующие свойства:
794 Делает @var{a_i} известным для @code{ev} так, что эта функция названная как @var{a_i},
795 применяется когда @var{a_i} появляется как флаговый аргумент @code{ev}.
799 Делает @var{a_i} известным для функции @code{ev} так, что @var{a_i}
800 связывается с @code{true}
801 во время выполнение @code{ev}, когда @var{a_i} появляется как флаговый аргумент @code{ev}.
804 @c OBSOLETE @code{special} (RECOGNIZED BY DECLARE BUT NEVER USED ANYWHERE)
806 @c OBSOLETE @code{nonarray} (RECOGNIZED BY DECLARE BUT NEVER USED ANYWHERE)
808 @item @code{bindtest}
809 Указывает Maxima то, что следует вызвать ошибку, когда при вычислении значение @var{a_i} не определено.
812 Указывает Maxima считать @var{a_i} невычисляемой формой.
813 Эффект состоит в замене @var{a_i} на @code{'@var{a_i}}
814 или @code{nounify(@var{a_i})}, в зависимости от контекста.
816 @item @code{constant}
817 Указывает Maxima рассматривать @var{a_i} как символьную константу.
818 @c WHAT MAXIMA KNOWS ABOUT SYMBOLIC CONSTANTS IS PRETTY LIMITED
819 @c DUNNO IF WE WANT TO GET INTO DETAILS HERE.
820 @c MAYBE IN THE DOCUMENTATION FOR CONSTANT (IF THERE IS SUCH)
823 Указывает Maxima рассматривать @var{a_i} как скалярную переменную.
825 @item @code{nonscalar}
826 Указывает Maxima рассматривать @var{a_i} как нескалярную переменную.
827 Обычное применение состоит в том, чтобы объявлять переменная как символьный вектор или матрицу.
830 Указывает Maxima рассматривать @var{a_i} как "главную переменную" (@code{mainvar}).
831 @code{ordergreatp} определяет упорядочивание атомов таким образом:
833 (главные переменные) > (другие переменные) > (скалярный переменные) > (константы) > (числа)
835 @item @code{alphabetic}
836 Указывает Maxima рассматривать @var{a_i} как алфавитный символ.
839 Указывает Maxima рассматривать @var{a_i} как имя свойства.
840 Тогда другие атомы могут иметь свойство @var{a_i}.
842 @item @code{rassociative}, @code{lassociative}
843 Указывает Maxima рассматривать @var{a_i} как право-ассоциативную или лево-ассоциативную функцию.
846 Указывает Maxima рассматривать @var{a_i} как n-арную функцию.
848 Декларация @code{nary} это не тоже, что вызов функции @code{nary}.
849 Единственный эффект @code{declare(foo, nary)} состоит в том, чтобы обучить упрощатель Maxima
850 упрощать вложенные выражения,
851 например, чтобы @code{foo(x, foo(y, z))} упрощалось до @code{foo(x, y, z)}.
853 @item @code{symmetric}, @code{antisymmetric}, @code{commutative}
854 Указывает Maxima рассматривать @var{a_i} как симметричную или антисимметричную функцию.
855 @code{commutative} это тоже самое, что @code{symmetric}.
857 @item @code{oddfun}, @code{evenfun}
858 Указывает Maxima рассматривать @var{a_i} как нечетную или четную функцию.
860 @item @code{outative}
861 Указывает Maxima упрощать выражения с @var{a_i}
862 путем выноса константных множителей за пределы первого аргумента.
864 Когда @var{a_i} имеет один аргумент,
865 множитель рассматривается константным, если он есть литерал или объявлен константой.
867 Когда @var{a_i} имеет два или более аргументов,
868 множитель рассматривается константой,
869 если второй аргумент есть символ
870 и этот множитель свободен от этого второго аргумента.
872 @item @code{multiplicative}
873 Указывает Maxima упрощать выражения @var{a_i}
874 путем подстановки @code{@var{a_i}(x * y * z * ...)} @code{-->}
875 @code{@var{a_i}(x) * @var{a_i}(y) * @var{a_i}(z) * ...}.
876 Эта подстановка выполняется только для первого аргумента.
878 @item @code{additive}
879 Указывает Maxima упрощать @var{a_i} выражения
880 путем подстановки @code{@var{a_i}(x + y + z + ...)} @code{-->}
881 @code{@var{a_i}(x) + @var{a_i}(y) + @var{a_i}(z) + ...}.
882 Эта подстановка выполняется только для первого аргумента.
885 Эквивалентно объявлению @var{a_i} совместно @code{outative} и @code{additive}.
887 @c OBSOLETE @code{analytic} (RECOGNIZED BY DECLARE BUT NEVER USED ANYWHERE)
889 @item @code{integer}, @code{noninteger}
890 Указывает Maxima рассматривать @var{a_i} как целую или нецелую переменную.
892 @item @code{even}, @code{odd}
893 Указывает Maxima рассматривать @var{a_i} как четную или нечетную целую переменную.
895 @item @code{rational}, @code{irrational}
896 Указывает Maxima рассматривать @var{a_i} как рациональную или иррациональную вещественную переменную.
898 @item @code{real}, @code{imaginary}, @code{complex}
899 Указывает Maxima рассматривать @var{a_i} как вещественную, чисто мнимую или комплексную переменную.
901 @item @code{increasing}, @code{decreasing}
902 Указывает Maxima рассматривать @var{a_i} как растущую или убывающую функцию.
903 @c MAXIMA FAILS TO DEDUCE F(2) > F(1) FOR INCREASING FUNCTION F
904 @c AND FAILS TO DEDUCE ANYTHING AT ALL ABOUT DECREASING FUNCTIONS
905 @c REPORTED AS SF BUG # 1483194
908 Указывает Maxima рассматривать @var{a_i} как положительную функцию.
910 @item @code{integervalued}
911 Указывает Maxima рассматривать @var{a_i} как целочисленную функцию.
917 Декларации @code{evfun} и @code{evflag}.
919 @c declare (expand, evfun);
921 @c (a + b)^3, expand;
922 @c declare (demoivre, evflag);
924 @c exp (a + b*%i), demoivre;
927 (%i1) declare (expand, evfun);
932 (%i3) (a + b)^3, expand;
934 (%o3) b + 3 a b + 3 a b + a
935 (%i4) declare (demoivre, evflag);
937 (%i5) exp (a + b*%i);
940 (%i6) exp (a + b*%i), demoivre;
942 (%o6) %e (%i sin(b) + cos(b))
945 Декларация @code{bindtest}.
948 @c declare (aa, bindtest);
956 (%i2) declare (aa, bindtest);
960 -- an error. Quitting. To debug this try debugmode(true);
967 Декларация @code{noun}.
969 @c factor (12345678);
970 @c declare (factor, noun);
971 @c factor (12345678);
975 (%i1) factor (12345678);
978 (%i2) declare (factor, noun);
980 (%i3) factor (12345678);
981 (%o3) factor(12345678)
987 Декларации @code{constant}, @code{scalar}, @code{nonscalar} и @code{mainvar}.
989 @c declare (bb, constant);
990 @c declare (cc, scalar);
991 @c declare (dd, nonscalar);
992 @c declare (ee, mainvar);
997 Декларация @code{alphabetic}.
1000 @c declare ("~", alphabetic);
1001 @c xx~yy + yy~xx + ~xx~~yy~;
1004 (%i1) xx\~yy : 1729;
1006 (%i2) declare ("~", alphabetic);
1008 (%i3) xx~yy + yy~xx + ~xx~~yy~;
1009 (%o3) ~xx~~yy~ + yy~xx + 1729
1012 Декларация @code{feature}.
1014 @c declare (FOO, feature);
1015 @c declare (x, FOO);
1016 @c featurep (x, FOO);
1019 (%i1) declare (FOO, feature);
1021 (%i2) declare (x, FOO);
1023 (%i3) featurep (x, FOO);
1027 Декларации @code{rassociative} и @code{lassociative}.
1029 @c declare (F, rassociative);
1030 @c declare (G, lassociative);
1035 Декларация @code{nary}.
1037 @c H (H (a, b), H (c, H (d, e)));
1038 @c declare (H, nary);
1039 @c H (H (a, b), H (c, H (d, e)));
1042 (%i1) H (H (a, b), H (c, H (d, e)));
1043 (%o1) H(H(a, b), H(c, H(d, e)))
1044 (%i2) declare (H, nary);
1046 (%i3) H (H (a, b), H (c, H (d, e)));
1047 (%o3) H(a, b, c, d, e)
1050 Декларации @code{symmetric} и @code{antisymmetric}.
1053 @c declare (S, symmetric);
1055 @c S (a, c, e, d, b);
1057 @c declare (T, antisymmetric);
1059 @c T (a, c, e, d, b);
1064 (%i2) declare (S, symmetric);
1068 (%i4) S (a, c, e, d, b);
1069 (%o4) S(a, b, c, d, e)
1072 (%i6) declare (T, antisymmetric);
1076 (%i8) T (a, c, e, d, b);
1077 (%o8) T(a, b, c, d, e)
1080 Декларации @code{oddfun} и @code{evenfun}.
1083 @c declare (o, oddfun);
1086 @c declare (e, evenfun);
1090 (%i1) o (- u) + o (u);
1092 (%i2) declare (o, oddfun);
1094 (%i3) o (- u) + o (u);
1096 (%i4) e (- u) - e (u);
1098 (%i5) declare (e, evenfun);
1100 (%i6) e (- u) - e (u);
1104 Декларация @code{outative}.
1107 @c declare (F1, outative);
1109 @c declare (zz, constant);
1115 (%i2) declare (F1, outative);
1119 (%i4) declare (zz, constant);
1125 Декларация @code{multiplicative}.
1128 @c declare (F2, multiplicative);
1132 (%i1) F2 (a * b * c);
1134 (%i2) declare (F2, multiplicative);
1136 (%i3) F2 (a * b * c);
1137 (%o3) F2(a) F2(b) F2(c)
1140 Декларация @code{additive}.
1143 @c declare (F3, additive);
1147 (%i1) F3 (a + b + c);
1149 (%i2) declare (F3, additive);
1151 (%i3) F3 (a + b + c);
1152 (%o3) F3(c) + F3(b) + F3(a)
1155 Декларация @code{linear}.
1157 @c 'sum (F(k) + G(k), k, 1, inf);
1158 @c declare (nounify (sum), linear);
1159 @c 'sum (F(k) + G(k), k, 1, inf);
1162 (%i1) 'sum (F(k) + G(k), k, 1, inf);
1166 (%o1) > (G(k) + F(k))
1170 (%i2) declare (nounify (sum), linear);
1172 (%i3) 'sum (F(k) + G(k), k, 1, inf);
1176 (%o3) > G(k) + > F(k)
1182 @opencatbox{Категории:}
1183 @category{Факты и выводы}
1189 @deffn {Функция} disolate (@var{expr}, @var{x_1}, ..., @var{x_n})
1190 аналогична @code{isolate (@var{expr}, @var{x})},
1191 за исключением того, что она дает возможность пользователю изолировать
1192 более чем одну переменную одновременно. Это может быть полезно, например,
1193 если пользователь пытается заменить переменные в многократном
1194 интегрировании и эта замена переменных включает две или более переменных интегрирования.
1195 Данная функция автоматически загружается из
1196 @file{simplification/disol.mac}. Демонстрация доступна по
1197 @code{demo("disol")$}.
1199 @opencatbox{Категории:}
1200 @category{Выражения}
1206 @deffn {Функция} dispform (@var{expr})
1207 Возвращает внешнее представление @var{expr} по отношению к его
1208 главному оператору. Это может быть полезно в сочетании с @code{part}, которая
1209 также имеет дело с внешним представлением. Предположим @var{expr} есть -A.
1210 Тогда внутреннее представление @var{expr} есть "*"(-1,A), в то время как
1211 внешнее представление есть "-"(A). @code{dispform (@var{expr}, all)} конвертирует
1212 все выражение (не только верхний уровень) в внешний формат. Например,
1213 если @code{expr: sin (sqrt (x))}, то @code{freeof (sqrt, expr)} и
1214 @code{freeof (sqrt, dispform (expr))} дают @code{true}, в то время как
1215 @code{freeof (sqrt, dispform (expr, all))} дает @code{false}.
1217 @opencatbox{Категории:}
1218 @category{Выражения}
1224 @deffn {Функция} distrib (@var{expr})
1225 Распространяет суммы над произведениями. Она отличается от @code{expand}
1226 тем, что она работает только на самом верхнем уровне выражения, то есть она не
1227 рекурсивная и работает быстрее чем @code{expand}. Она отличается от @code{multthru} тем,
1228 что раскрывает все суммы на этом уровне.
1233 (%i1) distrib ((a+b) * (c+d));
1234 (%o1) b d + a d + b c + a c
1235 (%i2) multthru ((a+b) * (c+d));
1236 (%o2) (b + a) d + (b + a) c
1237 (%i3) distrib (1/((a+b) * (c+d)));
1239 (%o3) ---------------
1241 (%i4) expand (1/((a+b) * (c+d)), 1, 0);
1243 (%o4) ---------------------
1244 b d + a d + b c + a c
1247 @opencatbox{Категории:}
1248 @category{Выражения}
1254 @deffn {Функция} dpart (@var{expr}, @var{n_1}, ..., @var{n_k})
1255 Выбирает тоже подвыражение что и @code{part}, но
1256 вместо только возвращения этого подвыражения как значения, она возвращает
1257 все выражение с выбранным подвыражением, изображенным внутри
1258 бокса. Данный бокс в действительности является частью выражения.
1261 (%i1) dpart (x+y/z^2, 1, 2, 1);
1270 @opencatbox{Категории:}
1271 @category{Выражения}
1276 @c PROBABLY MORE TO BE SAID HERE
1277 @deffn {Функция} exp (@var{x})
1278 Представляет собой экспоненциальную функцию.
1279 Все экземпляры @code{exp (@var{x})} при вводе упрощаются до @code{%e^@var{x}}.
1280 @code{exp} не присутствует в упрощенных выражениях.
1282 Если @code{demoivre} равно @code{true}, то @code{%e^(a + b %i)} упрощается до
1283 @code{%e^(a (cos(b) + %i sin(b)))}, если @code{b} свободна от @code{%i}. См. @code{demoivre}.
1285 Если @code{%emode}, равно @code{true}, то
1286 @code{%e^(%pi %i x)} упрощается. См. @code{%emode}.
1288 Если @code{%enumer}, равно @code{true}, то @code{%e} заменяется на
1289 2.718..., когда @code{numer} есть @code{true}. См. @code{%enumer}.
1291 @c NEED EXAMPLES HERE
1293 @opencatbox{Категории:}
1294 @category{Экспоненциальные и логарифмические функции}
1299 @defvr {Управляющая переменная} %emode
1300 Значение по умолчанию: @code{true}
1302 Когда @code{%emode} есть @code{true},
1303 то @code{%e^(%pi %i x)} упрощается следующим образом.
1305 @code{%e^(%pi %i x)} упрощается до @code{cos (%pi x) + %i sin (%pi x)}, если @code{x} есть
1306 число с плавающей точкой, целое или произведение 1/2, 1/3, 1/4 или 1/6 и тогда в дальнейшем упрощается.
1308 Для других численных @code{x},
1309 @code{%e^(%pi %i x)} упрощается до @code{%e^(%pi %i y)}, где @code{y} есть
1310 @code{x - 2 k} для некоторых целых @code{k}, таких что @code{abs(y) < 1}.
1312 Когда @code{%emode} есть @code{false},
1313 специальное упрощение @code{%e^(%pi %i x)} не выполняется.
1315 @c NEED EXAMPLES HERE
1317 @opencatbox{Категории:}
1318 @category{Экспоненциальные и логарифмические функции}
1319 @category{Флаги и переменные упрощения}
1324 @defvr {Управляющая переменная} %enumer
1325 Значение по умолчанию: @code{false}
1327 Когда @code{%enumer} есть @code{true},
1328 то @code{%e} заменяется своим численным значением
1329 2.718..., когда @code{numer} есть @code{true}.
1331 Когда @code{%enumer} есть @code{false}, эта подстановка выполняется
1332 только если экспонента в @code{%e^x} вычисляется до численного значения.
1334 См. также @code{ev} и @code{numer}.
1336 @c NEED EXAMPLES HERE
1338 @opencatbox{Категории:}
1339 @category{Экспоненциальные и логарифмические функции}
1340 @category{Флаги вычисления}
1345 @defvr {Управляющая переменная} exptisolate
1346 Значение по умолчанию: @code{false}
1348 @c WHAT DOES THIS MEAN EXACTLY ??
1349 Если @code{exptisolate} равно @code{true}, то @code{isolate (expr, var)}
1350 исследует показатели атомов (таких как @code{%e}), которые содержат @code{var}.
1352 @c NEED EXAMPLES HERE
1354 @opencatbox{Категории:}
1355 @category{Выражения}
1360 @defvr {Управляющая переменная} exptsubst
1361 Значение по умолчанию: @code{false}
1363 Если @code{exptsubst} равно @code{true}, то позволяется выполнять подстановки, такие как @code{y}
1364 для @code{%e^x} в @code{%e^(a x)}.
1366 @c NEED EXAMPLES HERE
1368 @opencatbox{Категории:}
1369 @category{Экспоненциальные и логарифмические функции}
1370 @category{Выражения}
1375 @deffn {Функция} freeof (@var{x_1}, ..., @var{x_n}, @var{expr})
1376 @code{freeof (@var{x_1}, @var{expr})}
1377 Возвращает @code{true}, если никакое подвыражение @var{expr} не равно @var{x_1}
1378 или если @var{x_1} возникает только как немая переменная в
1379 @var{expr}, иначе возвращает @code{false}.
1381 @code{freeof (@var{x_1}, ..., @var{x_n}, @var{expr})}
1382 эквивалентно @code{freeof (@var{x_1}, @var{expr}) and ... and freeof (@var{x_n}, @var{expr})}.
1384 Аргументы @var{x_1}, ..., @var{x_n}
1385 могут быть именами функций или переменных, именами с индексами,
1386 операторами (заключенными в двойные кавычки) или выражениями общего вида.
1387 @code{freeof} вычисляет свои аргументы.
1389 @code{freeof} действует только на @var{expr} в том виде, в как оно есть,
1390 (после упрощения и вычисления) и
1391 не пытается определить, может ли некоторое эквивалентное выражение дать другой результат.
1392 В частности, упрощение может давать эквивалентное, но другое выражение, которое
1393 содержит некоторые различные элементы чем исходная форма @var{expr}.
1395 Переменная является немой переменной в некотором выражении, если она не имеет значения за пределами выражения.
1396 Немые переменные, распознаваемые @code{freeof}, есть
1397 индекс суммы или произведения, переменная предела в @code{limit},
1398 переменная интегрирования в определенном интеграле @code{integrate},
1399 исходная переменная в @code{laplace},
1400 формальные переменные в выражениях @code{at}
1401 и аргументы в @code{lambda} выражениях.
1402 Локальные переменные в @code{block} не распознаются @code{freeof} как немые
1403 переменные. Это ошибка.
1405 Неопределенное интегрирование @code{integrate} @i{не} свободно от
1406 переменной интегрирования.
1410 Аргументы есть имена функций, переменные, имена с индексами, операторы и выражения.
1411 @code{freeof (a, b, expr)} эквивалентно
1412 @code{freeof (a, expr) and freeof (b, expr)}.
1415 (%i1) expr: z^3 * cos (a[1]) * b^(c+d);
1419 (%i2) freeof (z, expr);
1421 (%i3) freeof (cos, expr);
1423 (%i4) freeof (a[1], expr);
1425 (%i5) freeof (cos (a[1]), expr);
1427 (%i6) freeof (b^(c+d), expr);
1429 (%i7) freeof ("^", expr);
1431 (%i8) freeof (w, sin, a[2], sin (a[2]), b*(c+d), expr);
1436 @code{freeof} вычисляет свои аргументы.
1439 (%i1) expr: (a+b)^5$
1441 (%i3) freeof (c, expr);
1446 @code{freeof} не учитывает эквивалентные выражения.
1447 Упрощение может дать эквивалентное, но отличное выражение.
1450 (%i1) expr: (a+b)^5$
1451 (%i2) expand (expr);
1453 (%o2) b + 5 a b + 10 a b + 10 a b + 5 a b + a
1454 (%i3) freeof (a+b, %);
1456 (%i4) freeof (a+b, expr);
1461 (%i6) freeof (exp, exp (x));
1465 @item Суммирование или определенный интеграл свободно от своих немых переменных.
1466 Неопределенный интеграл не свободен от своей переменной интегрирования.
1469 (%i1) freeof (i, 'sum (f(i), i, 0, n));
1471 (%i2) freeof (x, 'integrate (x^2, x, 0, 1));
1473 (%i3) freeof (x, 'integrate (x^2, x));
1478 @opencatbox{Категории:}
1479 @category{Выражения}
1484 @c IS THIS DEFINITION CORRECT ??
1485 @deffn {Функция} genfact (@var{x}, @var{y}, @var{z})
1486 Возвращает обобщенный факториал, заданный как
1487 @code{x (x-z) (x - 2 z) ... (x - (y - 1) z)}. Таким образом, для целого @var{x},
1488 @code{genfact (x, x, 1) = x!} и @code{genfact (x, x/2, 2) = x!!}.
1490 @opencatbox{Категории:}
1491 @category{Гамма функция и факториал}
1496 @deffn {Функция} imagpart (@var{expr})
1497 Возвращает мнимую часть выражения @var{expr}.
1499 @code{imagpart} есть вычислительная функция,
1500 а не функция упрощения.
1501 @c PROBABLY NEED TO EXPLAIN IMPLICATIONS OF ABOVE STATEMENT
1502 @c SEE ALSO SF BUG REPORT # 902290
1504 См. также @code{abs}, @code{carg}, @code{polarform}, @code{rectform}
1507 @c NEED EXAMPLES HERE
1509 @opencatbox{Категории:}
1510 @category{Комплексные переменные}
1515 @deffn {Функция} infix (@var{op})
1516 @deffnx {Функция} infix (@var{op}, @var{lbp}, @var{rbp})
1517 @deffnx {Функция} infix (@var{op}, @var{lbp}, @var{rbp}, @var{lpos}, @var{rpos}, @var{pos})
1518 Объявляет @var{op} инфиксным оператором.
1519 Инфиксный оператор есть функция двух аргументов,
1520 с именем функции, записанным между этими аргументами.
1521 Например, оператор вычитания @code{-} есть инфиксный оператор.
1523 @code{infix (@var{op})} объявляет @var{op} инфиксным оператором
1524 со степенями связывания по умолчанию (левая и правая, обе равны 180)
1525 и частями речи по умолчанию (левая и правая, обе равны @code{any}).
1526 @c HOW IS pos DIFFERENT FROM lpos AND rpos ??
1528 @code{infix (@var{op}, @var{lbp}, @var{rbp})} объявляет @var{op} инфиксным оператором
1529 с указанными левой и правой степени связывания
1530 и частями речи по умолчанию (левая и правая, обе равны @code{any}).
1532 @code{infix (@var{op}, @var{lbp}, @var{rbp}, @var{lpos}, @var{rpos}, @var{pos})} объявляет @var{op} инфиксным оператором
1533 с указанными левой и правой степенями связывания и частями речи
1534 @var{lpos}, @var{rpos} и @var{pos} для левого операнда, правого операнда и результата
1537 Термин "часть речи" по отношению к объявлению операторов, означает тип выражения.
1538 Различается три типа: @code{expr}, @code{clause} и @code{any},
1539 которые означают алгебраическое выражение, логическое выражение и выражение
1540 произвольного типа соответственно.
1541 Maxima может обнаружить некоторые синтаксические ошибки, сравнивая
1542 объявленные для оператора части речи с актуальными выражениями.
1544 Приоритет @var{op} по отношению к другим операторам
1545 выводится из левой и правой степеней связывания рассматриваемых операторов.
1546 Если левые и правые степени связывания @var{op} обе больше
1547 левых и правых степеней связывания другого оператора,
1548 то @var{op} имеет более высокий приоритет чем этот оператор.
1549 Если степени связывания обе не больше или меньше,
1550 то имеют место некоторые более сложные соотношения.
1552 Ассоциативность @var{op} зависит от его степени связывания.
1553 Большая левая степень связывания (@var{lbp}) означает, что
1554 @var{op} вычисляется до других операторов, стоящих слева от него в выражении,
1555 в то время как большая правая степень связывания (@var{rbp}) означает, что
1556 @var{op} вычисляется до других операторов, стоящих справа от него в выражении.
1557 Таким образом, большее @var{lbp} делает @var{op} право-ассоциативным,
1558 в то время как большее @var{rbp} делает @var{op} лево-ассоциативным.
1559 Если @var{lbp} равно @var{rbp}, то @var{op} является лево-ассоциативный.
1561 См. также @code{Syntax}.
1567 Если левые и правые степени связывания @var{op} обе больше
1568 левых и правых степеней связывания другого оператора,
1569 то @var{op} имеет более высокий приоритет чем этот оператор.
1572 (%i1) "@@"(a, b) := sconcat("(", a, ",", b, ")")$
1573 (%i2) :lisp (get '$+ 'lbp)
1575 (%i2) :lisp (get '$+ 'rbp)
1577 (%i2) infix ("@@", 101, 101)$
1580 (%i4) infix ("@@", 99, 99)$
1587 Большее @var{lbp} делает @var{op} право-ассоциативным,
1588 в том время как большее @var{rbp} делает @var{op} лево-ассоциативным.
1591 (%i1) "@@"(a, b) := sconcat("(", a, ",", b, ")")$
1592 (%i2) infix ("@@", 100, 99)$
1593 (%i3) foo @@ bar @@ baz;
1594 (%o3) (foo,(bar,baz))
1595 (%i4) infix ("@@", 100, 101)$
1596 (%i5) foo @@ bar @@ baz;
1597 (%o5) ((foo,bar),baz)
1600 Maxima может обнаружить некоторые синтаксические ошибки, сравнивая
1601 объявленные для оператора части речи с актуальными выражениями.
1604 @c infix ("##", 100, 99, expr, expr, expr);
1605 @c if x ## y then 1 else 0;
1606 @c infix ("##", 100, 99, expr, expr, clause);
1607 @c if x ## y then 1 else 0;
1610 (%i1) infix ("##", 100, 99, expr, expr, expr);
1612 (%i2) if x ## y then 1 else 0;
1613 Incorrect syntax: Found algebraic expression where logical expression expected
1616 (%i2) infix ("##", 100, 99, expr, expr, clause);
1618 (%i3) if x ## y then 1 else 0;
1619 (%o3) if x ## y then 1 else 0
1622 @opencatbox{Категории:}
1623 @category{Операторы}
1624 @category{Факты и выводы}
1625 @category{Синтаксис}
1630 @defvr {Управляющая переменная} inflag
1631 Значение по умолчанию: @code{false}
1633 Когда @code{inflag} есть @code{true}, функции для извлечения частей
1634 выражения работает с внутренней формой @code{expr}.
1636 Заметим, что упрощатель переупорядочивает выражения.
1637 Таким образом, @code{first (x + y)} возвращает @code{x} если @code{inflag}
1638 есть @code{true}, и @code{y}, если @code{inflag} есть @code{false}
1639 (@code{first (y + x)} дает те же результаты.)
1641 Также, установка @code{inflag} равным @code{true} и вызов @code{part} или @code{substpart} есть
1642 тоже самое, что вызов @code{inpart} или @code{substinpart}.
1644 Функции, на которые влияет значение @code{inflag}:
1645 @code{part}, @code{substpart}, @code{first}, @code{rest}, @code{last}, @code{length},
1646 конструкция @code{for} ... @code{in},
1647 @code{map}, @code{fullmap}, @code{maplist}, @code{reveal} и @code{pickapart}.
1649 @c NEED EXAMPLES HERE
1651 @opencatbox{Категории:}
1652 @category{Выражения}
1658 @deffn {Функция} inpart (@var{expr}, @var{n_1}, ..., @var{n_k})
1659 аналогична @code{part}, но работает с внутренним
1660 представлением выражения, а не с выводимой формой, и,
1661 таким образом, может быть быстрее, так как форматирование не выполняется.
1662 Нужно быть осторожным
1663 по отношению к порядку подвыражений в суммах и произведениях
1664 (так как этот порядок переменных в внутренней форме часто отличается
1665 от порядка в выводимой форме) и в работе с унарным минусом,
1666 вычитанием и делением (так как эти операторы удаляются из
1667 выражения). @code{part (x+y, 0)} или @code{inpart (x+y, 0)} дает @code{+},
1668 хотя для ссылки на оператор он должен быть заключен в двойные кавычки.
1669 Например @code{... if inpart (%o9,0) = "+" then ...}.
1676 (%i2) inpart (%, 3, 2);
1678 (%i3) part (%th (2), 1, 2);
1680 (%i4) 'limit (f(x)^g(x+1), x, 0, minus);
1684 (%i5) inpart (%, 1, 2);
1688 @opencatbox{Категории:}
1689 @category{Выражения}
1695 @deffn {Функция} isolate (@var{expr}, @var{x})
1696 Возвращает @var{expr} с подвыражениями, которые есть суммы, и
1697 которые не содержат переменную @var{var}, замененные метками промежуточных выражений
1698 (атомарными символами, такими как @code{%t1}, @code{%t2}, ...). Это часто бывает полезно,
1699 чтобы избежать ненужного раскрытия подвыражений, которые не содержат
1700 интересующих переменных. Так как данные метки промежуточных выражений имеют подвыражения
1701 в качестве своих значений, то они могут быть подставлены обратно вычислением этого
1704 Если @code{exptisolate} (значение по умолчанию: @code{false}) равно @code{true},
1705 то @code{isolate} исследует показатели атомов (таких как @code{%e}),
1706 которые содержат переменную @var{var}.
1708 Если @code{isolate_wrt_times} равно @code{true}, то @code{isolate} изолирует
1709 также по отношению к произведениям. См. @code{isolate_wrt_times}.
1711 Выполните @code{example (isolate)} для других примеров.
1713 @opencatbox{Категории:}
1714 @category{Выражения}
1720 @defvr {Управляющая переменная} isolate_wrt_times
1721 Значение по умолчанию: @code{false}
1723 Когда @code{isolate_wrt_times} равно @code{true}, то @code{isolate}
1724 также изолирует по отношению к произведениям. Например, сравнивает обе установки
1727 (%i1) isolate_wrt_times: true$
1728 (%i2) isolate (expand ((a+b+c)^2), c);
1740 (%o4) c + %t3 c + %t2 c + %t4
1741 (%i4) isolate_wrt_times: false$
1742 (%i5) isolate (expand ((a+b+c)^2), c);
1744 (%o5) c + 2 b c + 2 a c + %t4
1747 @opencatbox{Категории:}
1748 @category{Выражения}
1754 @defvr {Управляющая переменная} listconstvars
1755 Значение по умолчанию: @code{false}
1757 Когда @code{listconstvars} есть @code{true}, то в список,
1758 возвращаемый @code{listofvars}, включаются @code{%e}, @code{%pi}, @code{%i} и
1759 другие переменные, объявленные константами.
1760 По умолчанию они опускаются.
1762 @opencatbox{Категории:}
1763 @category{Выражения}
1768 @defvr {Управляющая переменная} listdummyvars
1769 Значение по умолчанию: @code{true}
1771 Когда @code{listdummyvars} есть @code{false}, "немые переменные" в
1772 выражении не будут включаться в список, возвращаемый @code{listofvars}.
1773 (Смысл "немых переменных" тот же, что и в @code{freeof}.
1774 "Немые переменные" -- это математические объекты, такие
1775 как индекс суммы или произведения, переменная предела и переменная интегрирования
1776 в определенном интеграле).
1781 (%i1) listdummyvars: true$
1782 (%i2) listofvars ('sum(f(i), i, 0, n));
1784 (%i3) listdummyvars: false$
1785 (%i4) listofvars ('sum(f(i), i, 0, n));
1789 @opencatbox{Категории:}
1790 @category{Выражения}
1796 @deffn {Функция} listofvars (@var{expr})
1797 Возвращает список переменных в @var{expr}.
1799 Когда @code{listconstvars} есть @code{true}, то в список,
1800 возвращаемый @code{listofvars}, включаются @code{%e}, @code{%pi}, @code{%i} и
1801 другие переменные, объявленные константами.
1802 По умолчанию они опускаются.
1805 (%i1) listofvars (f (x[1]+y) / g^(2+a));
1810 @opencatbox{Категории:}
1811 @category{Выражения}
1817 @deffn {Функция} lfreeof (@var{list}, @var{expr})
1818 Для каждого члена @var{m} списка @var{list}, вызывает @code{freeof (@var{m}, @var{expr})}.
1819 Возвращает @code{false}, если какой либо из вызовов @code{freeof} дает @code{false},
1820 иначе возвращает @code{true}.
1822 @opencatbox{Категории:}
1823 @category{Выражения}
1828 @deffn {Функция} lopow (@var{expr}, @var{x})
1829 Возвращает наименьший показатель степени @var{x}, который явно присутствует
1830 в @var{expr}. Таким образом,
1833 (%i1) lopow ((x+y)^2 + (x+y)^a, x+y);
1837 @opencatbox{Категории:}
1838 @category{Выражения}
1844 @deffn {Функция} lpart (@var{label}, @var{expr}, @var{n_1}, ..., @var{n_k})
1845 Аналогично @code{dpart}, но использует
1846 помеченный бокс. Помеченный бокс аналогичен боксу сделанному с помощью
1847 @code{dpart}, но имеет имя в верхней строке.
1849 @opencatbox{Категории:}
1850 @category{Выражения}
1856 @deffn {Функция} multthru (@var{expr})
1857 @deffnx {Функция} multthru (@var{expr_1}, @var{expr_2})
1858 Умножает множитель @var{expr} (который должен быть суммой) на
1859 другие множители @var{expr}. То есть, @var{expr} есть
1860 @code{@var{f_1} @var{f_2} ... @var{f_n}},
1862 один множитель, скажем @var{f_i}, есть сумма членов. Каждый член
1863 в той сумме умножается на остальные множители в этом произведении.
1864 (А именно на все множители, за исключением @var{f_i}). @code{multthru}
1865 не раскрывает суммы, возведенные в степень.
1866 Эта функция есть самый быстрый способ распространять произведения (коммутативные
1867 или некоммутативные) на суммы. Так как дроби представляются как
1868 произведения, то @code{multthru} может также использоваться для деления сумм
1871 @code{multthru (@var{expr_1}, @var{expr_2})} умножает каждый член в @var{expr_2}
1872 (который должен быть суммой или уравнением) на @var{expr_1}.
1873 Если @var{expr_1} сам по себе не является суммой, то эта
1874 форма эквивалентна @code{multthru (@var{expr_1}*@var{expr_2})}.
1877 (%i1) x/(x-y)^2 - 1/(x-y) - f(x)/(x-y)^3;
1879 (%o1) - ----- + -------- - --------
1882 (%i2) multthru ((x-y)^3, %);
1884 (%o2) - (x - y) + x (x - y) - f(x)
1885 (%i3) ratexpand (%);
1887 (%o3) - y + x y - f(x)
1888 (%i4) ((a+b)^10*s^2 + 2*a*b*s + (a*b)^2)/(a*b*s^2);
1890 (b + a) s + 2 a b s + a b
1891 (%o4) ------------------------------
1894 (%i5) multthru (%); /* note that this does not expand (b+a)^10 */
1897 (%o5) - + --- + ---------
1900 (%i6) multthru (a.(b+c.(d+e)+f));
1901 (%o6) a . f + a . c . (e + d) + a . b
1902 (%i7) expand (a.(b+c.(d+e)+f));
1903 (%o7) a . f + a . c . e + a . c . d + a . b
1906 @opencatbox{Категории:}
1907 @category{Выражения}
1913 @deffn {Функция} nounify (@var{f})
1914 Возвращает невычисляемую форму функции с именем @var{f}. Это
1915 необходимо, если требуется представить имя вычисляемой функции так,
1916 если бы она была невычисляемой. Заметим, что некоторые вычисляемые функции
1917 возвращают их невычисляемые формы,
1918 если они не могут быть вычислены для определенных значений аргументов.
1919 Невычисляемая форма возвращается также в случае, если перед функцией стоит кавычка.
1921 @opencatbox{Категории:}
1922 @category{Невычисляемые и вычисляемые формы}
1928 @deffn {Функция} nterms (@var{expr})
1929 Возвращает число членов, которое выражение @var{expr} имело бы, если оно было бы
1930 полностью раскрыто и не возникло бы сокращений или комбинаций членов.
1931 Заметим, что выражения такие как @code{sin (@var{expr})}, @code{sqrt (@var{expr})}, @code{exp (@var{expr})} и др.
1932 считаются только как один член, вне независимости от того, как много членов @var{expr} имеет (если оно сумма).
1934 @opencatbox{Категории:}
1935 @category{Выражения}
1941 @deffn {Функция} op (@var{expr})
1942 Возвращает главный оператор выражения @var{expr}.
1943 @code{op (@var{expr})} эквивалентно @code{part (@var{expr}, 0)}.
1945 @code{op} возвращает строку, если главный оператор
1946 встроенный или определенный пользователем префиксный,
1947 бинарный или n-арный инфиксный, постфиксный, матчфиксный
1948 или безфиксный оператор.
1949 Иначе @code{op} возвращает символ.
1951 @code{op} следит за значением глобального флага @code{inflag}.
1953 @code{op} вычисляет свой аргумент.
1955 См. также @code{args}.
1960 @c stringdisp: true$
1963 @c op ('sin (a + b));
1967 @c op ('(if a > b then c else d));
1974 (%i1) stringdisp: true$
1975 (%i2) op (a * b * c);
1977 (%i3) op (a * b + c);
1979 (%i4) op ('sin (a + b));
1985 (%i7) op ([a, b, c]);
1987 (%i8) op ('(if a > b then c else d));
1989 (%i9) op ('foo (a));
1991 (%i10) prefix (foo);
1997 @opencatbox{Категории:}
1998 @category{Выражения}
1999 @category{Операторы}
2005 @deffn {Функция} operatorp (@var{expr}, @var{op})
2006 @deffnx {Функция} operatorp (@var{expr}, [@var{op_1}, ..., @var{op_n}])
2008 @code{operatorp (@var{expr}, @var{op})} возвращает @code{true},
2009 если @var{op} равен оператору @var{expr}.
2011 @code{operatorp (@var{expr}, [@var{op_1}, ..., @var{op_n}])} возвращает @code{true},
2012 если какой-нибудь элемент @var{op_1}, ..., @var{op_n} равен оператору @var{expr}.
2014 @opencatbox{Категории:}
2015 @category{Функции предикаты}
2016 @category{Операторы}
2022 @deffn {Функция} optimize (@var{expr})
2023 Возвращает выражение, которое выдает тоже самое значение и
2024 побочные эффекты, как и @var{expr}, но выполняется более
2025 эффективно за счет устранения лишних повторных вычислений
2026 общих подвыражений. @code{optimize} также имеет побочный
2027 эффект "сворачивания" своего аргумента так что все общие
2028 подвыражения используются совместно.
2029 Выполните @code{example (optimize)} для примеров.
2031 @opencatbox{Категории:}
2032 @category{Выражения}
2037 @defvr {Управляющая переменная} optimprefix
2038 Значение по умолчанию: @code{%}
2040 @code{optimprefix} это префикс, используемый для генерации символов
2041 командой @code{optimize}.
2043 @opencatbox{Категории:}
2044 @category{Выражения}
2050 @c WHAT DOES ">" MEAN IN THIS CONTEXT ??
2051 @deffn {Функция} ordergreat (@var{v_1}, ..., @var{v_n})
2052 Устанавливает синонимы для переменных @var{v_1}, ..., @var{v_n},
2053 такие, что @var{v_1} > @var{v_2} > ... > @var{v_n},
2054 и @var{v_n} > любой другой переменной, не включенной в аргументы.
2056 См. также @code{orderless}.
2058 @opencatbox{Категории:}
2059 @category{Выражения}
2065 @c WHAT DOES "PRECEDES" MEAN IN THIS CONTEXT ??
2066 @deffn {Функция} ordergreatp (@var{expr_1}, @var{expr_2})
2067 Возвращает @code{true}, если @var{expr_2} предшествует @var{expr_1} в
2068 упорядочивании, установленном с помощью функции @code{ordergreat}.
2070 @opencatbox{Категории:}
2071 @category{Выражения}
2072 @category{Функции предикаты}
2078 @c WHAT DOES "<" MEAN IN THIS CONTEXT
2079 @deffn {Функция} orderless (@var{v_1}, ..., @var{v_n})
2080 Устанавливает синонимы для переменных @var{v_1}, ..., @var{v_n},
2081 такие, что @var{v_1} < @var{v_2} < ... < @var{v_n},
2082 и @var{v_n} < любой другой переменная, не включенной в аргументы.
2084 @c EXPRESS THIS ORDER IN A MORE COMPREHENSIBLE FASHION
2085 Таким образом, полная шкала упорядочивания такова:
2086 численные константы < объявленные константы < объявленные скаляры < первый аргумент @code{orderless} <
2087 ... < последний аргумент @code{orderless} < переменные, которые начинаются
2089 < переменные, которые начинаются с Z < последний аргумент @code{ordergreat} <
2090 ... < первый аргумент @code{ordergreat} < объявленные главные переменные @code{mainvar}.
2092 См. также @code{ordergreat} и @code{mainvar}.
2094 @opencatbox{Категории:}
2095 @category{Выражения}
2101 @c WHAT DOES "PRECEDES" MEAN IN THIS CONTEXT ??
2102 @deffn {Функция} orderlessp (@var{expr_1}, @var{expr_2})
2103 Возвращает @code{true}, если @var{expr_1} предшествует @var{expr_2} в
2104 упорядочивании, установленном командой @code{orderless}.
2106 @opencatbox{Категории:}
2107 @category{Выражения}
2108 @category{Функции предикаты}
2114 @deffn {Функция} part (@var{expr}, @var{n_1}, ..., @var{n_k})
2115 Возвращает части внешней формы @code{expr}. Функция
2116 получает часть @code{expr}, которая определена индексами @var{n_1}, ..., @var{n_k}.
2118 часть @var{n_1} @code{expr} взята, берется часть @var{n_2} от нее и т.д.
2120 часть @var{n_k} от ... части @var{n_2}, от части @var{n_1} выражения @code{expr}.
2122 @code{part} может быть использована для того, чтобы получить элемент списка,
2123 строку матрицы и т.п.
2125 @c "If the last argument to a part function" => FOLLOWING APPLIES TO OTHER FUNCTIONS ??
2126 @c ATTEMPT TO VERIFY; IF SO, COPY THIS COMMENTARY TO DESCRIPTIONS OF OTHER FUNCTIONS
2127 Если последний аргумент функции @code{part} есть список индексов, то
2128 выбираются несколько подвыражений, каждое из которых соответствует
2129 индексу в списке. Таким образом, @code{part (x + y + z, [1, 3])} есть @code{z+x}.
2131 @code{piece} запоминает последнее выражение, выбранное при использовании
2132 функции @code{part}. Оно доступно во время выполнения этой функция и, таким образом,
2133 может быть использовано в самой функции, как показано ниже.
2135 Если @code{partswitch} установлен равным @code{true}, то @code{end} возвращается
2136 когда выбранная часть выражения не существует, иначе выдается сообщение об
2139 @c NEED "SEE ALSO" POINTING TO ALL OTHER PART FUNCTIONS
2141 Пример: @code{part (z+2*y, 2, 1)} дает 2.
2143 @c MERGE IN example (part) OUTPUT HERE
2144 @code{example (part)} показывает дополнительные примеры.
2146 @opencatbox{Категории:}
2147 @category{Выражения}
2153 @deffn {Функция} partition (@var{expr}, @var{x})
2154 Возвращает список из двух выражений. Они есть (1)
2155 множители @var{expr} (если оно произведение), члены @var{expr}
2156 (если оно является суммой), или список (если оно является списком), которые
2157 не содержит @var{x} и, (2) те множители, члены или список, которые содержат.
2160 (%i1) partition (2*a*x*f(x), x);
2162 (%i2) partition (a+b, x);
2164 (%i3) partition ([a, b, f(a), c], a);
2165 (%o3) [[b, c], [a, f(a)]]
2168 @opencatbox{Категории:}
2169 @category{Выражения}
2175 @defvr {Управляющая переменная} partswitch
2176 Значение по умолчанию: @code{false}
2178 Когда @code{partswitch} есть @code{true}, то @code{end} возвращается,
2179 если выбранная часть выражения не существует, иначе выдается сообщение
2182 @opencatbox{Категории:}
2183 @category{Выражения}
2188 @deffn {Функция} pickapart (@var{expr}, @var{n})
2189 Присваивает меткам промежуточных выражений все подвыражения
2190 @var{expr} глубины @var{n} (целое число).
2191 Подвыражения большей или меньшей глубин меткам не присваиваются.
2192 @code{pickapart} возвращает выражение в терминах промежуточных выражений
2193 эквивалентное исходному @var{expr}.
2195 См. также @code{part}, @code{dpart}, @code{lpart}, @code{inpart} и @code{reveal}.
2200 (%i1) expr: (a+b)/2 + sin (x^2)/3 - log (1 + sqrt(x+1));
2203 (%o1) - log(sqrt(x + 1) + 1) + ------- + -----
2205 (%i2) pickapart (expr, 0);
2209 (%t2) - log(sqrt(x + 1) + 1) + ------- + -----
2213 (%i3) pickapart (expr, 1);
2215 (%t3) - log(sqrt(x + 1) + 1)
2228 (%o5) %t5 + %t4 + %t3
2229 (%i5) pickapart (expr, 2);
2231 (%t6) log(sqrt(x + 1) + 1)
2241 (%o8) --- + --- - %t6
2243 (%i8) pickapart (expr, 3);
2245 (%t9) sqrt(x + 1) + 1
2252 (%o10) ----- - log(%t9) + ---------
2254 (%i10) pickapart (expr, 4);
2260 (%o11) ------- + ----- - log(%t11 + 1)
2262 (%i11) pickapart (expr, 5);
2268 (%o12) ------- + ----- - log(sqrt(%t12) + 1)
2270 (%i12) pickapart (expr, 6);
2273 (%o12) ------- + ----- - log(sqrt(x + 1) + 1)
2277 @opencatbox{Категории:}
2278 @category{Выражения}
2284 @defvr {Системная переменная} piece
2285 Содержит последнее выражение, выбранное при использовании функции @code{part}.
2286 @c WHAT DOES THIS MEAN EXACTLY ??
2287 Оно доступно во время выполнения функции и, таким образом,
2288 может быть в ней использовано.
2290 @c NEED "SEE ALSO" TO POINT TO LIST OF ALL RELEVANT FUNCTIONS
2292 @opencatbox{Категории:}
2293 @category{Выражения}
2299 @deffn {Функция} polarform (@var{expr})
2300 Возвращает выражение @code{r %e^(%i theta)} эквивалентное @var{expr},
2301 такое, что @code{r} и @code{theta} чисто вещественные.
2303 @opencatbox{Категории:}
2304 @category{Комплексные переменные}
2305 @category{Экспоненциальные и логарифмические функции}
2310 @c ISN'T THERE AN EQUIVALENT FUNCTION SOMEWHERE ??
2311 @c NEEDS WORK (IF KEPT)
2312 @deffn {Функция} powers (@var{expr}, @var{x})
2313 Выдает степени @var{x}, встречающиеся в @var{expr}.
2315 @code{load ("powers")} загружает эту функцию.
2316 @c HMM, THERE'S A BUNCH OF MAXIMA FUNCTIONS IN src/powers.lisp ...
2317 @c FOR SOME REASON src/powers.lisp IS NOT PART OF THE USUAL BUILD -- STRANGE
2319 @c HERE IS THE TEXT FROM archive/share/unknown/powers.usg -- MERGE !!!
2320 @c THIS FUNCTION IS A GENERALISATION OF "HIPOW" AND "LOPOW"
2321 @c IN THAT IT RETURNS A LIST OF ALL THE POWERS OF VAR OCCURING
2322 @c IN EXPR. IT IS STILL NECESSARY TO EXPAND EXPR BEFORE APPLYING
2323 @c POWERS (ON PAIN OF GETTING THE WRONG ANSWER).
2325 @c THIS FUNCTION HAS MANY USES, E.G. IF YOU WANT TO FIND ALL
2326 @c THE COEFFICIENTS OF X IN A POLYNOMIAL POLY YOU CAN USE
2327 @c MAP(LAMBDA([POW],COEFF(POLY,X,POW)),POWERS(POLY,X));
2328 @c AND MANY OTHER SIMILAR USEFUL HACKS.
2330 @opencatbox{Категории:}
2331 @category{Выражения}
2332 @category{Многочлены}
2337 @deffn {Функция} product (@var{expr}, @var{i}, @var{i_0}, @var{i_1})
2338 Представляет произведение значений @var{expr} с
2339 индексом @var{i}, меняющимся от @var{i_0} до @var{i_1}.
2340 Невычисляемая форма @code{'product} изображается как заглавная буква пи.
2342 @code{product} вычисляет @var{expr} и нижний и верхний пределы @var{i_0} и @var{i_1},
2343 @code{product} не вычисляет индекс @var{i}.
2345 Если верхний и нижний пределы различаются на целое число,
2346 @var{expr} вычисляется для каждого значения индекса @var{i},
2347 и результат есть точное произведение.
2349 Иначе, диапазон индекса является неопределенным.
2350 Для упрощения произведения применяются некоторые правила.
2351 Когда глобальная переменная @code{simpproduct} есть @code{true},
2352 применяются дополнительные правила.
2353 В некоторых случаях, упрощение дает результат, который не является произведением,
2354 иначе, результат есть невычисляемая форма @code{'product}.
2356 См. также @code{nouns} и @code{evflag}.
2361 @c product (x + i*(i+1)/2, i, 1, 4);
2362 @c product (i^2, i, 1, 7);
2363 @c product (a[i], i, 1, 7);
2364 @c product (a(i), i, 1, 7);
2365 @c product (a(i), i, 1, n);
2366 @c product (k, k, 1, n);
2367 @c product (k, k, 1, n), simpproduct;
2368 @c product (integrate (x^k, x, 0, 1), k, 1, n);
2369 @c product (if k <= 5 then a^k else b^k, k, 1, 10);
2373 (%i1) product (x + i*(i+1)/2, i, 1, 4);
2374 (%o1) (x + 1) (x + 3) (x + 6) (x + 10)
2375 (%i2) product (i^2, i, 1, 7);
2377 (%i3) product (a[i], i, 1, 7);
2380 (%i4) product (a(i), i, 1, 7);
2381 (%o4) a(1) a(2) a(3) a(4) a(5) a(6) a(7)
2382 (%i5) product (a(i), i, 1, n);
2389 (%i6) product (k, k, 1, n);
2396 (%i7) product (k, k, 1, n), simpproduct;
2398 (%i8) product (integrate (x^k, x, 0, 1), k, 1, n);
2405 (%i9) product (if k <= 5 then a^k else b^k, k, 1, 10);
2410 @opencatbox{Категории:}
2411 @category{Суммы и произведения}
2417 @deffn {Функция} realpart (@var{expr})
2418 Возвращает вещественную часть @var{expr}. @code{realpart} и @code{imagpart}
2419 будут работать для выражений, включающих тригонометрические и гипергеометрические функции,
2420 также как и квадратный корень, логарифм и возведение в степень.
2422 @opencatbox{Категории:}
2423 @category{Комплексные числа}
2429 @deffn {Функция} rectform (@var{expr})
2430 Возвращает выражение @code{a + b %i}, эквивалентное @var{expr},
2431 такое, что @var{a} и @var{b} чисто вещественные.
2433 @opencatbox{Категории:}
2434 @category{Комплексные числа}
2439 @deffn {Функция} rembox (@var{expr}, unlabelled)
2440 @deffnx {Функция} rembox (@var{expr}, @var{label})
2441 @deffnx {Функция} rembox (@var{expr})
2442 Удаляет боксы из @var{expr}.
2444 @code{rembox (@var{expr}, unlabelled)} удаляет все непомеченные боксы из @var{expr}.
2446 @code{rembox (@var{expr}, @var{label})} удаляет только боксы, содержащие @var{label}.
2448 @code{rembox (@var{expr})} удаляет все боксы, помеченные и непомеченные.
2450 Боксы рисуются функциями @code{box}, @code{dpart} и @code{lpart}.
2455 @c expr: (a*d - b*c)/h^2 + sin(%pi*x);
2456 @c dpart (dpart (expr, 1, 1), 2, 2);
2457 @c expr2: lpart (BAR, lpart (FOO, %, 1), 2);
2458 @c rembox (expr2, unlabelled);
2459 @c rembox (expr2, FOO);
2460 @c rembox (expr2, BAR);
2464 (%i1) expr: (a*d - b*c)/h^2 + sin(%pi*x);
2466 (%o1) sin(%pi x) + ---------
2469 (%i2) dpart (dpart (expr, 1, 1), 2, 2);
2471 (%o2) sin("%pi x") + ---------
2476 (%i3) expr2: lpart (BAR, lpart (FOO, %, 1), 2);
2477 FOO""""""""""" BAR""""""""
2478 " """"""" " "a d - b c"
2479 (%o3) "sin("%pi x")" + "---------"
2480 " """"""" " " """" "
2481 """""""""""""" " " 2" "
2485 (%i4) rembox (expr2, unlabelled);
2487 FOO""""""""" "a d - b c"
2488 (%o4) "sin(%pi x)" + "---------"
2492 (%i5) rembox (expr2, FOO);
2495 (%o5) sin("%pi x") + "---------"
2501 (%i6) rembox (expr2, BAR);
2503 " """"""" " a d - b c
2504 (%o6) "sin("%pi x")" + ---------
2509 (%i7) rembox (expr2);
2511 (%o7) sin(%pi x) + ---------
2516 @opencatbox{Категории:}
2517 @category{Выражения}
2522 @deffn {Функция} sum (@var{expr}, @var{i}, @var{i_0}, @var{i_1})
2523 Представляет собой суммирование значений @var{expr} для
2524 индекса @var{i}, изменяющегося от @var{i_0} до @var{i_1}.
2525 Невычисляемая форма @code{'sum} изображается как заглавная буква сигма.
2527 @code{sum} вычисляет свое слагаемое @var{expr} и нижний и верхний пределы @var{i_0} и @var{i_1},
2528 @code{sum} не вычисляет индекс @var{i}.
2530 Если верхний и нижний пределы отличаются на целое число,
2531 слагаемое @var{expr} вычисляется для каждого значения индекса суммирования @var{i},
2532 и результат есть точная сумма.
2534 Иначе, диапазон индекса является неопределенным.
2535 Для упрощения суммирования применяются некоторые правила.
2536 Когда глобальная переменная @code{simpsum} есть @code{true}, дополнительные правила применяются.
2537 В некоторых случаях, упрощение дает результат, который не есть суммирование,
2538 иначе, результат есть невычисляемая форма @code{'sum}.
2540 Когда @code{evflag} (флаг вычисления) @code{cauchysum} есть @code{true},
2541 произведение суммирования выражается как произведение Коши,
2542 в котром индекс внутреннего суммирования есть функция
2543 индекса внешнего суммирования, а не меняющейся независимо индекс.
2545 Глобальная переменная @code{genindex} есть буквенный префикс,
2547 генерации следующего индекса суммирования,
2548 если требуется автоматически сгенерированный индекс.
2550 @code{gensumnum} есть численный суффикс, используемый для генерирования следующего
2552 генерации следующего индекса суммирования,
2553 если требуется автоматически сгенерированный индекс.
2554 Когда @code{gensumnum} есть @code{false}, автоматически сгенерированный индекс
2555 есть только @code{genindex} без численного суффикса.
2557 См. также @code{sumcontract}, @code{intosum},
2558 @code{bashindices}, @code{niceindices},
2559 @code{nouns}, @code{evflag} и @code{zeilberger}.
2564 @c sum (i^2, i, 1, 7);
2565 @c sum (a[i], i, 1, 7);
2566 @c sum (a(i), i, 1, 7);
2567 @c sum (a(i), i, 1, n);
2568 @c sum (2^i + i^2, i, 0, n);
2569 @c sum (2^i + i^2, i, 0, n), simpsum;
2570 @c sum (1/3^i, i, 1, inf);
2571 @c sum (1/3^i, i, 1, inf), simpsum;
2572 @c sum (i^2, i, 1, 4) * sum (1/i^2, i, 1, inf);
2573 @c sum (i^2, i, 1, 4) * sum (1/i^2, i, 1, inf), simpsum;
2574 @c sum (integrate (x^k, x, 0, 1), k, 1, n);
2575 @c sum (if k <= 5 then a^k else b^k, k, 1, 10);
2579 (%i1) sum (i^2, i, 1, 7);
2581 (%i2) sum (a[i], i, 1, 7);
2582 (%o2) a + a + a + a + a + a + a
2584 (%i3) sum (a(i), i, 1, 7);
2585 (%o3) a(7) + a(6) + a(5) + a(4) + a(3) + a(2) + a(1)
2586 (%i4) sum (a(i), i, 1, n);
2594 (%i5) sum (2^i + i^2, i, 0, n);
2602 (%i6) sum (2^i + i^2, i, 0, n), simpsum;
2605 (%o6) 2 + --------------- - 1
2607 (%i7) sum (1/3^i, i, 1, inf);
2615 (%i8) sum (1/3^i, i, 1, inf), simpsum;
2619 (%i9) sum (i^2, i, 1, 4) * sum (1/i^2, i, 1, inf);
2627 (%i10) sum (i^2, i, 1, 4) * sum (1/i^2, i, 1, inf), simpsum;
2630 (%i11) sum (integrate (x^k, x, 0, 1), k, 1, n);
2638 (%i12) sum (if k <= 5 then a^k else b^k, k, 1, 10);
2640 (%o12) b + b + b + b + b + a + a + a + a + a
2643 @opencatbox{Категории:}
2644 @category{Суммы и произведения}
2649 @deffn {Функция} lsum (@var{expr}, @var{x}, @var{L})
2650 Представляет собой сумму @var{expr} для каждого элемента @var{x} в @var{L}.
2652 Невычисляемая форма @code{'lsum} возвращается,
2653 если аргумент @var{L} не вычисляется до списка.
2658 @c lsum (x^i, i, [1, 2, 7]);
2659 @c lsum (i^2, i, rootsof (x^3 - 1, x));
2662 (%i1) lsum (x^i, i, [1, 2, 7]);
2665 (%i2) lsum (i^2, i, rootsof (x^3 - 1, x));
2672 i in rootsof(x - 1, x)
2675 @opencatbox{Категории:}
2676 @category{Суммы и произведения}
2681 @deffn {Функция} verbify (@var{f})
2682 Возвращает вычисляемую форму функции с именем @var{f}.
2684 См. также @code{verb}, @code{noun} и @code{nounify}.
2695 (%i1) verbify ('foo);
2699 (%i2) nounify (foo);
2705 @opencatbox{Категории:}
2706 @category{Невычисляемые и вычисляемые формы}