Print a warning when translating subscripted functions
[maxima.git] / doc / info / ru / Expressions.texi
blob9833c4b95b5975dc58799f44d02b329ea556b4a0
1 @c Language=Russian
2 @c Encoding=UTF-8
3 @c File=Expressions.texi 
4 @c OriginalRevision=1.61
5 @c TranslatedBy: (c) 2007-12-24 Andrey Siver <ihep-2005@yandex.ru>
8 @menu
9 * Основные сведения о выражениях::  
10 * Комплексные выражения::                     
11 * Невычисляемые и вычисляемые формы::
12 * Идентификаторы::
13 * Строки::
14 * Неравенства::                  
15 * Синтаксис::                      
16 * Функции и переменные для выражений::  
17 @end menu
19 @node Основные сведения о выражениях, Комплексные выражения, Выражения, Выражения
20 @section Основные сведения о выражениях
22 Есть некоторое число зарезервированных слов, которые не могут быть использованы
23 как имена переменных. Их использование может вызвать скрытую
24 синтаксическую ошибку.
26 @example
27 integrate            next           from                 diff            
28 in                   at             limit                sum             
29 for                  and            elseif               then            
30 else                 do             or                   if              
31 unless               product        while                thru            
32 step                                                                     
33 @end example
35 Большинство сущностей в Maxima являются выражениями. Последовательность 
36 выражений может превратиться в одно выражение, если элементы последовательности 
37 разделены запятыми и последовательность взята в скобки. Это аналогично 
38 подобным выражениям последовательного вычисления (comma expressions) 
39 в языке программирования @b{C}.
41 @example
42 (%i1) x: 3$
43 (%i2) (x: x+1, x: x^2);
44 (%o2)                          16
45 (%i3) (if (x > 17) then 2 else 4);
46 (%o3)                           4
47 (%i4) (if (x > 17) then x: 2 else y: 4, y+x);
48 (%o4)                          20
49 @end example
51 Даже циклы в Maxima являются выражениями, хотя то значение, которое они
52 возвращают, не слишком полезное @code{done}.
54 @example
55 (%i1) y: (x: 1, for i from 1 thru 10 do (x: x*i))$
56 (%i2) y;
57 (%o2)                         done
58 @end example
60 То, что Вы действительно хотите получить, нужно включить как третий 
61 аргумент в выражение последовательного вычисления, 
62 который в действительности возвращает значение.
64 @example
65 (%i3) y: (x: 1, for i from 1 thru 10 do (x: x*i), x)$
66 (%i4) y;
67 (%o4)                        3628800
68 @end example
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 функций комплексных выражений, обычно, может быть произведено, с использованием
82 функций 
83 @code{realpart}, @code{imagpart}, @code{rectform}, @code{polarform}, @code{abs} 
84 и @code{carg}.
86 @opencatbox{Категории:}
87 @category{Комплексные переменные}
88 @closecatbox
90 @node Невычисляемые и вычисляемые формы, Идентификаторы, Комплексные выражения, Выражения
91 @section Невычисляемые и вычисляемые формы
93 Maxima различает операторы, которые являются невычисляемыми (nouns) и операторы, 
94 который являются вычисляемыми (verbs).
95 Вычисляемым является оператор, который может быть выполнен.
96 Невычисляемым является оператор, который встречается как символ в выражении, 
97 без вычисления.
98 По умолчанию, имена функций является вычисляемыми.
99 Вычисляемая форма может быть переведена в невычисляемую, экранированием (quoting) имени функции 
100 или применением функции @code{nounify}.
101 Невычисляемая форма может быть переведена в вычисляемую, применением функции @code{verbify}.
102 Флаг вычисления @code{nouns} вызывает функцию @code{ev} для вычисления невычисляемых 
103 форм в выражении.
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}.
118 Примеры:
120 @c ===beg===
121 @c foo (x) := x^2;
122 @c foo (42);
123 @c 'foo (42);
124 @c 'foo (42), nouns;
125 @c declare (bar, noun);
126 @c bar (x) := x/17;
127 @c bar (52);
128 @c bar (52), nouns;
129 @c integrate (1/x, x, 1, 42);
130 @c 'integrate (1/x, x, 1, 42);
131 @c ev (%, nouns);
132 @c ===end===
133 @example
134 (%i1) foo (x) := x^2;
135                                      2
136 (%o1)                     foo(x) := x
137 (%i2) foo (42);
138 (%o2)                         1764
139 (%i3) 'foo (42);
140 (%o3)                        foo(42)
141 (%i4) 'foo (42), nouns;
142 (%o4)                         1764
143 (%i5) declare (bar, noun);
144 (%o5)                         done
145 (%i6) bar (x) := x/17;
146                                      x
147 (%o6)                    ''bar(x) := --
148                                      17
149 (%i7) bar (52);
150 (%o7)                        bar(52)
151 (%i8) bar (52), nouns;
152                                52
153 (%o8)                          --
154                                17
155 (%i9) integrate (1/x, x, 1, 42);
156 (%o9)                        log(42)
157 (%i10) 'integrate (1/x, x, 1, 42);
158                              42
159                             /
160                             [   1
161 (%o10)                      I   - dx
162                             ]   x
163                             /
164                              1
165 (%i11) ev (%, nouns);
166 (%o11)                       log(42)
167 @end example
169 @opencatbox{Категории:}
170 @category{Вычисление}
171 @category{Вычисляемые и невычисляемые формы}
172 @closecatbox
174 @node Идентификаторы, Строки, Невычисляемые и вычисляемые формы, Выражения
175 @section Идентификаторы
177 Идентификаторы Maxima могут содержать буквы алфавита,
178 плюс цифры от 0 до 9,
179 плюс любые специальные символы, с предшествующим знаком @code{\}.
181 Цифра может быть первым символом идентификатора,
182 если ей предшествует бэкслеш @code{\}.
183 Для цифр, которые являются вторыми или последующими символами, бэкслеш
184 не нужен.
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} для более подробной информации по этому вопросу.
198 Примеры:
200 @c ===beg===
201 @c %an_ordinary_identifier42;
202 @c embedded\ spaces\ in\ an\ identifier;
203 @c symbolp (%);
204 @c [foo+bar, foo\+bar];
205 @c [1729, \1729];
206 @c [symbolp (foo\+bar), symbolp (\1729)];
207 @c [is (foo\+bar = foo+bar), is (\1729 = 1729)];
208 @c baz\~quux;
209 @c declare ("~", alphabetic);
210 @c baz~quux;
211 @c [is (foo = FOO), is (FOO = Foo), is (Foo = foo)];
212 @c :lisp (defvar *my-lisp-variable* '$foo)
213 @c ?\*my\-lisp\-variable\*;
214 @c ===end===
216 @example
217 (%i1) %an_ordinary_identifier42;
218 (%o1)               %an_ordinary_identifier42
219 (%i2) embedded\ spaces\ in\ an\ identifier;
220 (%o2)           embedded spaces in an identifier
221 (%i3) symbolp (%);
222 (%o3)                         true
223 (%i4) [foo+bar, foo\+bar];
224 (%o4)                 [foo + bar, foo+bar]
225 (%i5) [1729, \1729];
226 (%o5)                     [1729, 1729]
227 (%i6) [symbolp (foo\+bar), symbolp (\1729)];
228 (%o6)                     [true, true]
229 (%i7) [is (foo\+bar = foo+bar), is (\1729 = 1729)];
230 (%o7)                    [false, false]
231 (%i8) baz\~quux;
232 (%o8)                       baz~quux
233 (%i9) declare ("~", alphabetic);
234 (%o9)                         done
235 (%i10) baz~quux;
236 (%o10)                      baz~quux
237 (%i11) [is (foo = FOO), is (FOO = Foo), is (Foo = foo)];
238 (%o11)                [false, false, false]
239 (%i12) :lisp (defvar *my-lisp-variable* '$foo)
240 *MY-LISP-VARIABLE*
241 (%i12) ?\*my\-lisp\-variable\*;
242 (%o12)                         foo
243 @end example
245 @opencatbox{Категории:}
246 @category{Синтаксис}
247 @closecatbox
249 @node Строки, Неравенства, Идентификаторы, Выражения
250 @section Строки
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 много функций для работы со строками.
276 Примеры:
278 @c ===beg===
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
282 @c in this string.";
283 @c s_4 : "Ignore the \
284 @c line termination \
285 @c characters in \
286 @c this string.";
287 @c stringdisp : false;
288 @c s_1;
289 @c stringdisp : true;
290 @c s_1;
291 @c ===end===
292 @example
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
298 in this string.";
299 (%o3) Embedded line termination
300 in this string.
301 (%i4) s_4 : "Ignore the \
302 line termination \
303 characters in \
304 this string.";
305 (%o4) Ignore the line termination characters in this string.
306 (%i5) stringdisp : false;
307 (%o5)                         false
308 (%i6) s_1;
309 (%o6)                   This is a string.
310 (%i7) stringdisp : true;
311 (%o7)                         true
312 (%i8) s_1;
313 (%o8)                  "This is a string."
314 @end example
316 @opencatbox{Категории:}
317 @category{Синтаксис}
318 @closecatbox
320 @node Неравенства, Синтаксис, Строки, Выражения
321 @section Неравенства
323 Maxima имеет операторы неравенства @code{<}, @code{<=}, @code{>=},
324 @code{>}, @code{#} и @code{notequal}.
325 См. @code{if} для описания условных выражений.
327 @opencatbox{Категории:}
328 @category{Операторы}
329 @category{Синтаксис}
330 @closecatbox
332 @node Синтаксис, Функции и переменные для выражений, Неравенства, Выражения
333 @section Синтаксис
335 Возможно определять новые операторы с заданным приоритетом,
336 удалять определения существующих операторов
337 или переопределять приоритет существующих операторов.  
338 Оператор может быть унарным префиксным или унарным постфиксным, 
339 бинарным инфиксным, n-арным (n-ary) инфиксным, матчфиксным (matchfix) 
340 или безфиксным (nofix).
341 Матчфиксный (matchfix) обозначает пару символов, которые заключают между собой свой 
342 аргумент или аргументы,
343 а безфиксный (nofix) означает оператор, который не принимает аргументы.
344 Следующие примеры демонстрируют различные типы операторов.
346 @table @asis
347 @item унарный префиксный
348 изменение знака @code{- a}
349 @item унарный постфиксный
350 факториал @code{a!}
351 @item бинарный инфиксный
352 экспонента @code{a^b}
353 @item n-арный инфиксный
354 сложение @code{a + b}
355 @item матчфиксный
356 список @code{[a, b]}
357 @end table
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{"<-"} не определены в этом 
370 примере.
372 @c ===beg===
373 @c prefix ("dd");
374 @c dd a;
375 @c "dd" (a);
376 @c infix ("<-");
377 @c a <- dd b;
378 @c "<-" (a, "dd" (b));
379 @c ===end===
380 @example
381 (%i1) prefix ("dd");
382 (%o1)                          dd
383 (%i2) dd a;
384 (%o2)                         dd a
385 (%i3) "dd" (a);
386 (%o3)                         dd a
387 (%i4) infix ("<-");
388 (%o4)                          <-
389 (%i5) a <- dd b;
390 (%o5)                      a <- dd b
391 (%i6) "<-" (a, "dd" (b));
392 (%o6)                      a <- dd b
393 @end example
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
404 @table @code
405 @item prefix
406 rbp=180
407 @item postfix
408 lbp=180
409 @item infix
410 lbp=180, rbp=180
411 @item nary
412 lbp=180, rbp=180
413 @item matchfix
414 (степень связывания не применима)
415 @item nofix
416 (степень связывания не применима)
417 @end table
419 Для сравнения, приведем некоторые встроенные операторы, и их левые и правые 
420 степени связывания.
422 @example
423 Operator   lbp     rbp
425   :        180     20 
426   ::       180     20 
427   :=       180     20 
428   ::=      180     20 
429   !        160
430   !!       160
431   ^        140     139 
432   .        130     129 
433   *        120
434   /        120     120 
435   +        100     100 
436   -        100     134 
437   =        80      80 
438   #        80      80 
439   >        80      80 
440   >=       80      80 
441   <        80      80 
442   <=       80      80 
443   not              70 
444   and      65
445   or       60
446   ,        10
447   $        -1
448   ;        -1
449 @end example
451 @code{remove} и @code{kill} удаляют свойства оператора из атома.
452 @code{remove ("@var{a}", op)} удаляет только свойства оператора @var{a}.
453 @code{kill ("@var{a}")} удаляет все свойства @var{a}, включая свойства
454 оператора.
455 Заметим, что имя оператора должно быть взято в кавычки.
457 @c MAYBE COPY THIS EXAMPLE TO remove AND/OR kill
458 @c ===beg===
459 @c infix ("@");
460 @c "@" (a, b) := a^b;
461 @c 5 @ 3;
462 @c remove ("@", op);
463 @c 5 @ 3;
464 @c "@" (5, 3);
465 @c infix ("@");
466 @c 5 @ 3;
467 @c kill ("@");
468 @c 5 @ 3;
469 @c "@" (5, 3);
470 @c ===end===
471 @example
472 (%i1) infix ("@@");
473 (%o1)                           @@
474 (%i2) "@@" (a, b) := a^b;
475                                      b
476 (%o2)                      a @@ b := a
477 (%i3) 5 @@ 3;
478 (%o3)                          125
479 (%i4) remove ("@@", op);
480 (%o4)                         done
481 (%i5) 5 @@ 3;
482 Incorrect syntax: @@ is not an infix operator
483 5 @@
485 (%i5) "@@" (5, 3);
486 (%o5)                          125
487 (%i6) infix ("@@");
488 (%o6)                           @@
489 (%i7) 5 @@ 3;
490 (%o7)                          125
491 (%i8) kill ("@@");
492 (%o8)                         done
493 (%i9) 5 @@ 3;
494 Incorrect syntax: @@ is not an infix operator
495 5 @@
497 (%i9) "@@" (5, 3);
498 (%o9)                        @@(5, 3)
499 @end example
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}, предполагая значения для переменных,
507 заданные в списке 
508 уравнений @code{[@var{eqn_1}, ..., @var{eqn_n}]} или одном уравнении @var{eqn}.
510 Если подвыражение зависит от переменных, для которых заданы значения, 
511 но нет, заданного при помощи @code{atvalue} значения, или оно не может быть вычислено
512 иным способом, то возвращается невычисляемая форма @code{at}, которая выводится 
513 в двумерном формате.
515 Функция @code{at} выполняет множественные подстановки последовательно, не параллельно.
517 См. также @code{atvalue}.
518 Для описания других функций, которые выполняют подстановки,
519 см. также @code{subst} и @code{ev}.
521 Примеры:
522 @c COPIED FROM example(at)
524 @c ===beg===
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]);
530 @c ===end===
531 @example
532 (%i1) atvalue (f(x,y), [x = 0, y = 1], a^2);
533                                 2
534 (%o1)                          a
535 (%i2) atvalue ('diff (f(x,y), x), x = 0, 1 + y);
536 (%o2)                        @@2 + 1
537 (%i3) printprops (all, atvalue);
538                                 !
539                   d             !
540                  --- (f(@@1, @@2))!       = @@2 + 1
541                  d@@1            !
542                                 !@@1 = 0
544                                      2
545                           f(0, 1) = a
547 (%o3)                         done
548 (%i4) diff (4*f(x, y)^2 - u(x, y)^2, x);
549                   d                          d
550 (%o4)  8 f(x, y) (-- (f(x, y))) - 2 u(x, y) (-- (u(x, y)))
551                   dx                         dx
552 (%i5) at (%, [x = 0, y = 1]);
553                                          !
554               2              d           !
555 (%o5)     16 a  - 2 u(0, 1) (-- (u(x, y))!            )
556                              dx          !
557                                          !x = 0, y = 1
558 @end example
560 @end deffn
562 @opencatbox{Категории:}
563 @category{Вычисление}
564 @category{Дифференциальные уравнения}
565 @closecatbox
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}.
585 Примеры:
587 @c ===beg===
588 @c box (a^2 + b^2);
589 @c a : 1234;
590 @c b : c - d;
591 @c box (a^2 + b^2);
592 @c box (a^2 + b^2, term_1);
593 @c 1729 - box (1729);
594 @c boxchar: "-";
595 @c box (sin(x) + cos(y));
596 @c ===end===
597 @example
598 (%i1) box (a^2 + b^2);
599                             """""""""
600                             " 2    2"
601 (%o1)                       "b  + a "
602                             """""""""
603 (%i2) a : 1234;
604 (%o2)                         1234
605 (%i3) b : c - d;
606 (%o3)                         c - d
607 (%i4) box (a^2 + b^2);
608                       """"""""""""""""""""
609                       "       2          "
610 (%o4)                 "(c - d)  + 1522756"
611                       """"""""""""""""""""
612 (%i5) box (a^2 + b^2, term_1);
613                       term_1""""""""""""""
614                       "       2          "
615 (%o5)                 "(c - d)  + 1522756"
616                       """"""""""""""""""""
617 (%i6) 1729 - box (1729);
618                                  """"""
619 (%o6)                     1729 - "1729"
620                                  """"""
621 (%i7) boxchar: "-";
622 (%o7)                           -
623 (%i8) box (sin(x) + cos(y));
624                         -----------------
625 (%o8)                   -cos(y) + sin(x)-
626                         -----------------
627 @end example
629 @opencatbox{Категории:}
630 @category{Выражения}
631 @closecatbox
633 @end deffn
635 @defvr {Управляющая переменная} boxchar
636 Значение по умолчанию: @code{"}
638 @code{boxchar} есть символ, который используется для изображения бокса в 
639 функциях @code{box}, в @code{dpart} и в @code{lpart} .
641 Все боксы в выражении изображаются с текущим значением @code{boxchar}.
642 Изображаемый символ не сохраняется в выражении бокса.
644 @opencatbox{Категории:}
645 @category{Выражения}
646 @closecatbox
648 @end defvr
650 @deffn {Функция} carg (@var{z})
651 Возвращает комплексный аргумент @var{z}.
652 Этот комплексный аргумент есть угол @code{theta} в пределах @code{(-%pi, %pi]}
653 такой что @code{r exp (theta %i) = @var{z}}, где @code{r} есть модуль 
654 @var{z}.
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}.
669 Примеры:
671 @c ===beg===
672 @c carg (1);
673 @c carg (1 + %i);
674 @c carg (exp (%i));
675 @c carg (exp (%pi * %i));
676 @c carg (exp (3/2 * %pi * %i));
677 @c carg (17 * exp (2 * %i));
678 @c ===end===
680 @example
681 (%i1) carg (1);
682 (%o1)                           0
683 (%i2) carg (1 + %i);
684                                %pi
685 (%o2)                          ---
686                                 4
687 (%i3) carg (exp (%i));
688 (%o3)                           1
689 (%i4) carg (exp (%pi * %i));
690 (%o4)                          %pi
691 (%i5) carg (exp (3/2 * %pi * %i));
692                                 %pi
693 (%o5)                         - ---
694                                  2
695 (%i6) carg (17 * exp (2 * %i));
696 (%o6)                           2
697 @end example
699 @opencatbox{Категории:}
700 @category{Комплексные переменные}
701 @closecatbox
703 @end deffn
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} как константу.
709 См. @code{declare}.
710 @c WHAT EXACTLY ARE THE CONSEQUENCES OF DECLARING AN ATOM TO BE CONSTANT ??
712 @opencatbox{Категории:}
713 @category{Факты и выводы}
714 @category{Константы}
715 @closecatbox
717 @end deffn
719 @deffn {Функция} constantp (@var{expr})
720 Возвращает @code{true}, если @var{expr} есть константное выражение,
721 иначе возвращает @code{false}.
722 @c WHAT DOES MAXIMA KNOW ABOUT CONSTANT EXPRESSIONS ??
724 Выражение рассматривается как константное, если его аргументы 
725 есть
726 числа (включая рациональные числа, которые отображаются с помощью @code{/R/}),
727 символьные константы, такие как @code{%pi}, @code{%e} и @code{%i},
728 переменные, равные константами, или объявленные константами с помощью @code{declare},
729 или функции, чьи аргументы есть константы.
731 @code{constantp} вычисляет свои аргументы.
733 Примеры:
735 @c ===beg===
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));
743 @c ===end===
745 @example
746 (%i1) constantp (7 * sin(2));
747 (%o1)                                true
748 (%i2) constantp (rat (17/29));
749 (%o2)                                true
750 (%i3) constantp (%pi * sin(%e));
751 (%o3)                                true
752 (%i4) constantp (exp (x));
753 (%o4)                                false
754 (%i5) declare (x, constant);
755 (%o5)                                done
756 (%i6) constantp (exp (x));
757 (%o6)                                true
758 (%i7) constantp (foo (x) + bar (%e) + baz (2));
759 (%o7)                                false
760 (%i8) 
761 @end example
763 @opencatbox{Категории:}
764 @category{Функции предикаты}
765 @category{Константы}
766 @closecatbox
768 @end deffn
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 Как отмечено в описании для каждого флага декларации,
783 для некоторых флагов
784 @code{featurep(@var{object}, @var{feature})}
785 возвращает @code{true}, если @var{object} был объявлен, как имеющий @var{feature}.
786 Однако, @code{featurep} не распознает некоторые флаги. Это ошибка.
788 См. также @code{features}.
790 @code{declare} распознает следующие свойства:
792 @table @asis
793 @item @code{evfun}
794 Делает @var{a_i} известным для @code{ev} так, что эта функция названная как @var{a_i},
795 применяется когда @var{a_i} появляется как флаговый аргумент @code{ev}.
796 См. @code{evfun}.
798 @item @code{evflag}
799 Делает @var{a_i} известным для функции @code{ev} так, что @var{a_i} 
800 связывается с @code{true}
801 во время выполнение @code{ev}, когда @var{a_i} появляется как флаговый аргумент  @code{ev}.
802 См. @code{evflag}.
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} не определено.
811 @item @code{noun}
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)
822 @item @code{scalar}
823 Указывает Maxima рассматривать @var{a_i} как скалярную переменную.
825 @item @code{nonscalar}
826 Указывает Maxima рассматривать @var{a_i} как нескалярную переменную.
827 Обычное применение состоит в том, чтобы объявлять переменная как символьный вектор или матрицу.
829 @item @code{mainvar}
830 Указывает Maxima рассматривать @var{a_i} как "главную переменную" (@code{mainvar}).
831 @code{ordergreatp} определяет упорядочивание атомов таким образом:
833 (главные переменные) > (другие переменные) > (скалярный переменные) > (константы) > (числа)
835 @item @code{alphabetic}
836 Указывает Maxima рассматривать @var{a_i} как алфавитный символ.
838 @item @code{feature}
839 Указывает Maxima рассматривать @var{a_i} как имя свойства.
840 Тогда другие атомы могут иметь свойство @var{a_i}.
842 @item @code{rassociative}, @code{lassociative}
843 Указывает Maxima рассматривать @var{a_i} как право-ассоциативную или лево-ассоциативную функцию.
845 @item @code{nary}
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 Эта подстановка выполняется только для первого аргумента.
884 @item @code{linear}
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
907 @item @code{posfun}
908 Указывает Maxima рассматривать @var{a_i} как положительную функцию.
910 @item @code{integervalued}
911 Указывает Maxima рассматривать @var{a_i} как целочисленную функцию.
913 @end table
915 Примеры:
917 Декларации @code{evfun} и @code{evflag}.
918 @c ===beg===
919 @c declare (expand, evfun);
920 @c (a + b)^3;
921 @c (a + b)^3, expand;
922 @c declare (demoivre, evflag);
923 @c exp (a + b*%i);
924 @c exp (a + b*%i), demoivre;
925 @c ===end===
926 @example
927 (%i1) declare (expand, evfun);
928 (%o1)                         done
929 (%i2) (a + b)^3;
930                                    3
931 (%o2)                       (b + a)
932 (%i3) (a + b)^3, expand;
933                      3        2      2      3
934 (%o3)               b  + 3 a b  + 3 a  b + a
935 (%i4) declare (demoivre, evflag);
936 (%o4)                         done
937 (%i5) exp (a + b*%i);
938                              %i b + a
939 (%o5)                      %e
940 (%i6) exp (a + b*%i), demoivre;
941                       a
942 (%o6)               %e  (%i sin(b) + cos(b))
943 @end example
945 Декларация @code{bindtest}.
946 @c ===beg===
947 @c aa + bb;
948 @c declare (aa, bindtest);
949 @c aa + bb;
950 @c aa : 1234;
951 @c aa + bb;
952 @c ===end===
953 @example
954 (%i1) aa + bb;
955 (%o1)                        bb + aa
956 (%i2) declare (aa, bindtest);
957 (%o2)                         done
958 (%i3) aa + bb;
959 aa unbound variable
960  -- an error.  Quitting.  To debug this try debugmode(true);
961 (%i4) aa : 1234;
962 (%o4)                         1234
963 (%i5) aa + bb;
964 (%o5)                       bb + 1234
965 @end example
967 Декларация @code{noun}.
968 @c ===beg===
969 @c factor (12345678);
970 @c declare (factor, noun);
971 @c factor (12345678);
972 @c ''%, nouns;
973 @c ===end===
974 @example
975 (%i1) factor (12345678);
976                              2
977 (%o1)                     2 3  47 14593
978 (%i2) declare (factor, noun);
979 (%o2)                         done
980 (%i3) factor (12345678);
981 (%o3)                   factor(12345678)
982 (%i4) ''%, nouns;
983                              2
984 (%o4)                     2 3  47 14593
985 @end example
987 Декларации @code{constant}, @code{scalar}, @code{nonscalar} и @code{mainvar}.
988 @c ===beg===
989 @c declare (bb, constant);
990 @c declare (cc, scalar);
991 @c declare (dd, nonscalar);
992 @c declare (ee, mainvar);
993 @c ===end===
994 @example
995 @end example
997 Декларация @code{alphabetic}.
998 @c ===beg===
999 @c xx\~yy : 1729;
1000 @c declare ("~", alphabetic);
1001 @c xx~yy + yy~xx + ~xx~~yy~;
1002 @c ===end===
1003 @example
1004 (%i1) xx\~yy : 1729;
1005 (%o1)                         1729
1006 (%i2) declare ("~", alphabetic);
1007 (%o2)                         done
1008 (%i3) xx~yy + yy~xx + ~xx~~yy~;
1009 (%o3)                ~xx~~yy~ + yy~xx + 1729
1010 @end example
1012 Декларация @code{feature}.
1013 @c ===beg===
1014 @c declare (FOO, feature);
1015 @c declare (x, FOO);
1016 @c featurep (x, FOO);
1017 @c ===end===
1018 @example
1019 (%i1) declare (FOO, feature);
1020 (%o1)                         done
1021 (%i2) declare (x, FOO);
1022 (%o2)                         done
1023 (%i3) featurep (x, FOO);
1024 (%o3)                         true
1025 @end example
1027 Декларации @code{rassociative} и @code{lassociative}.
1028 @c ===beg===
1029 @c declare (F, rassociative);
1030 @c declare (G, lassociative);
1031 @c ===end===
1032 @example
1033 @end example
1035 Декларация @code{nary}.
1036 @c ===beg===
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)));
1040 @c ===end===
1041 @example
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);
1045 (%o2)                         done
1046 (%i3) H (H (a, b), H (c, H (d, e)));
1047 (%o3)                   H(a, b, c, d, e)
1048 @end example
1050 Декларации @code{symmetric} и @code{antisymmetric}.
1051 @c ===beg===
1052 @c S (b, a);
1053 @c declare (S, symmetric);
1054 @c S (b, a);
1055 @c S (a, c, e, d, b);
1056 @c T (b, a);
1057 @c declare (T, antisymmetric);
1058 @c T (b, a);
1059 @c T (a, c, e, d, b);
1060 @c ===end===
1061 @example
1062 (%i1) S (b, a);
1063 (%o1)                        S(b, a)
1064 (%i2) declare (S, symmetric);
1065 (%o2)                         done
1066 (%i3) S (b, a);
1067 (%o3)                        S(a, b)
1068 (%i4) S (a, c, e, d, b);
1069 (%o4)                   S(a, b, c, d, e)
1070 (%i5) T (b, a);
1071 (%o5)                        T(b, a)
1072 (%i6) declare (T, antisymmetric);
1073 (%o6)                         done
1074 (%i7) T (b, a);
1075 (%o7)                       - T(a, b)
1076 (%i8) T (a, c, e, d, b);
1077 (%o8)                   T(a, b, c, d, e)
1078 @end example
1080 Декларации @code{oddfun} и @code{evenfun}.
1081 @c ===beg===
1082 @c o (- u) + o (u);
1083 @c declare (o, oddfun);
1084 @c o (- u) + o (u);
1085 @c e (- u) - e (u);
1086 @c declare (e, evenfun);
1087 @c e (- u) - e (u);
1088 @c ===end===
1089 @example
1090 (%i1) o (- u) + o (u);
1091 (%o1)                     o(u) + o(- u)
1092 (%i2) declare (o, oddfun);
1093 (%o2)                         done
1094 (%i3) o (- u) + o (u);
1095 (%o3)                           0
1096 (%i4) e (- u) - e (u);
1097 (%o4)                     e(- u) - e(u)
1098 (%i5) declare (e, evenfun);
1099 (%o5)                         done
1100 (%i6) e (- u) - e (u);
1101 (%o6)                           0
1102 @end example
1104 Декларация @code{outative}.
1105 @c ===beg===
1106 @c F1 (100 * x);
1107 @c declare (F1, outative);
1108 @c F1 (100 * x);
1109 @c declare (zz, constant);
1110 @c F1 (zz * y);
1111 @c ===end===
1112 @example
1113 (%i1) F1 (100 * x);
1114 (%o1)                       F1(100 x)
1115 (%i2) declare (F1, outative);
1116 (%o2)                         done
1117 (%i3) F1 (100 * x);
1118 (%o3)                       100 F1(x)
1119 (%i4) declare (zz, constant);
1120 (%o4)                         done
1121 (%i5) F1 (zz * y);
1122 (%o5)                       zz F1(y)
1123 @end example
1125 Декларация @code{multiplicative}.
1126 @c ===beg===
1127 @c F2 (a * b * c);
1128 @c declare (F2, multiplicative);
1129 @c F2 (a * b * c);
1130 @c ===end===
1131 @example
1132 (%i1) F2 (a * b * c);
1133 (%o1)                       F2(a b c)
1134 (%i2) declare (F2, multiplicative);
1135 (%o2)                         done
1136 (%i3) F2 (a * b * c);
1137 (%o3)                   F2(a) F2(b) F2(c)
1138 @end example
1140 Декларация @code{additive}.
1141 @c ===beg===
1142 @c F3 (a + b + c);
1143 @c declare (F3, additive);
1144 @c F3 (a + b + c);
1145 @c ===end===
1146 @example
1147 (%i1) F3 (a + b + c);
1148 (%o1)                     F3(c + b + a)
1149 (%i2) declare (F3, additive);
1150 (%o2)                         done
1151 (%i3) F3 (a + b + c);
1152 (%o3)                 F3(c) + F3(b) + F3(a)
1153 @end example
1155 Декларация @code{linear}.
1156 @c ===beg===
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);
1160 @c ===end===
1161 @example
1162 (%i1) 'sum (F(k) + G(k), k, 1, inf);
1163                        inf
1164                        ====
1165                        \
1166 (%o1)                   >    (G(k) + F(k))
1167                        /
1168                        ====
1169                        k = 1
1170 (%i2) declare (nounify (sum), linear);
1171 (%o2)                         done
1172 (%i3) 'sum (F(k) + G(k), k, 1, inf);
1173                      inf          inf
1174                      ====         ====
1175                      \            \
1176 (%o3)                 >    G(k) +  >    F(k)
1177                      /            /
1178                      ====         ====
1179                      k = 1        k = 1
1180 @end example
1182 @opencatbox{Категории:}
1183 @category{Факты и выводы}
1184 @closecatbox
1186 @end deffn
1188 @c NEEDS WORK
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{Выражения}
1201 @closecatbox
1203 @end deffn
1205 @c NEEDS WORK
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{Выражения}
1219 @closecatbox
1221 @end deffn
1223 @c NEEDS WORK
1224 @deffn {Функция} distrib (@var{expr})
1225 Распространяет суммы над произведениями. Она отличается от @code{expand}
1226 тем, что она работает только на самом верхнем уровне выражения, то есть она не
1227 рекурсивная и работает быстрее чем @code{expand}. Она отличается от @code{multthru} тем, 
1228 что раскрывает все суммы на этом уровне.
1230 Примеры:
1232 @example
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)));
1238                                 1
1239 (%o3)                    ---------------
1240                          (b + a) (d + c)
1241 (%i4) expand (1/((a+b) * (c+d)), 1, 0);
1242                                 1
1243 (%o4)                 ---------------------
1244                       b d + a d + b c + a c
1245 @end example
1247 @opencatbox{Категории:}
1248 @category{Выражения}
1249 @closecatbox
1251 @end deffn
1253 @c NEEDS WORK
1254 @deffn {Функция} dpart (@var{expr}, @var{n_1}, ..., @var{n_k})
1255 Выбирает тоже подвыражение что и @code{part}, но
1256 вместо только возвращения этого подвыражения как значения, она возвращает
1257 все выражение с выбранным подвыражением, изображенным внутри
1258 бокса. Данный бокс в действительности является частью выражения.
1260 @example
1261 (%i1) dpart (x+y/z^2, 1, 2, 1);
1262                              y
1263 (%o1)                       ---- + x
1264                                2
1265                             """
1266                             "z"
1267                             """
1268 @end example
1270 @opencatbox{Категории:}
1271 @category{Выражения}
1272 @closecatbox
1274 @end deffn
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{Экспоненциальные и логарифмические функции}
1295 @closecatbox
1297 @end deffn
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{Флаги и переменные упрощения}
1320 @closecatbox
1322 @end defvr
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{Флаги вычисления}
1341 @closecatbox
1343 @end defvr
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{Выражения}
1356 @closecatbox
1358 @end defvr
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{Выражения}
1371 @closecatbox
1373 @end defvr
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 переменной интегрирования.
1408 @itemize @bullet
1409 @item
1410 Аргументы есть имена функций, переменные, имена с индексами, операторы и выражения.
1411 @code{freeof (a, b, expr)} эквивалентно 
1412 @code{freeof (a, expr) and freeof (b, expr)}.
1414 @example
1415 (%i1) expr: z^3 * cos (a[1]) * b^(c+d);
1416                                  d + c  3
1417 (%o1)                   cos(a ) b      z
1418                              1
1419 (%i2) freeof (z, expr);
1420 (%o2)                         false
1421 (%i3) freeof (cos, expr);
1422 (%o3)                         false
1423 (%i4) freeof (a[1], expr);
1424 (%o4)                         false
1425 (%i5) freeof (cos (a[1]), expr);
1426 (%o5)                         false
1427 (%i6) freeof (b^(c+d), expr);
1428 (%o6)                         false
1429 (%i7) freeof ("^", expr);
1430 (%o7)                         false
1431 (%i8) freeof (w, sin, a[2], sin (a[2]), b*(c+d), expr);
1432 (%o8)                         true
1433 @end example
1435 @item
1436 @code{freeof} вычисляет свои аргументы.
1438 @example
1439 (%i1) expr: (a+b)^5$
1440 (%i2) c: a$
1441 (%i3) freeof (c, expr);
1442 (%o3)                         false
1443 @end example
1445 @item
1446 @code{freeof} не учитывает эквивалентные выражения.
1447 Упрощение может дать эквивалентное, но отличное выражение.
1449 @example
1450 (%i1) expr: (a+b)^5$
1451 (%i2) expand (expr);
1452           5        4       2  3       3  2      4      5
1453 (%o2)    b  + 5 a b  + 10 a  b  + 10 a  b  + 5 a  b + a
1454 (%i3) freeof (a+b, %);
1455 (%o3)                         true
1456 (%i4) freeof (a+b, expr);
1457 (%o4)                         false
1458 (%i5) exp (x);
1459                                  x
1460 (%o5)                          %e
1461 (%i6) freeof (exp, exp (x));
1462 (%o6)                         true
1463 @end example
1465 @item Суммирование или определенный интеграл свободно от своих немых переменных.
1466 Неопределенный интеграл не свободен от своей переменной интегрирования.
1468 @example
1469 (%i1) freeof (i, 'sum (f(i), i, 0, n));
1470 (%o1)                         true
1471 (%i2) freeof (x, 'integrate (x^2, x, 0, 1));
1472 (%o2)                         true
1473 (%i3) freeof (x, 'integrate (x^2, x));
1474 (%o3)                         false
1475 @end example
1476 @end itemize
1478 @opencatbox{Категории:}
1479 @category{Выражения}
1480 @closecatbox
1482 @end deffn
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{Гамма функция и факториал}
1492 @closecatbox
1494 @end deffn
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}
1505 и @code{realpart}.
1507 @c NEED EXAMPLES HERE
1509 @opencatbox{Категории:}
1510 @category{Комплексные переменные}
1511 @closecatbox
1513 @end deffn
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} для левого операнда, правого операнда и результата
1535 соответственно.
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}.
1563 Примеры:
1565 @itemize @bullet
1566 @item
1567 Если левые и правые степени связывания @var{op} обе больше
1568 левых и правых степеней связывания другого оператора,
1569 то @var{op} имеет более высокий приоритет чем этот оператор.
1570 @end itemize
1571 @example
1572 (%i1) "@@"(a, b) := sconcat("(", a, ",", b, ")")$
1573 (%i2) :lisp (get '$+ 'lbp)
1575 (%i2) :lisp (get '$+ 'rbp)
1577 (%i2) infix ("@@", 101, 101)$
1578 (%i3) 1 + a@@b + 2;
1579 (%o3)                       (a,b) + 3
1580 (%i4) infix ("@@", 99, 99)$
1581 (%i5) 1 + a@@b + 2;
1582 (%o5)                       (a+1,b+2)
1583 @end example
1585 @itemize @bullet
1586 @item
1587 Большее @var{lbp} делает @var{op} право-ассоциативным,
1588 в том время как большее @var{rbp} делает @var{op} лево-ассоциативным.
1589 @end itemize
1590 @example
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)
1598 @end example
1600 Maxima может обнаружить некоторые синтаксические ошибки, сравнивая
1601 объявленные для оператора части речи с актуальными выражениями.
1603 @c ===beg===
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;
1608 @c ===end===
1609 @example
1610 (%i1) infix ("##", 100, 99, expr, expr, expr);
1611 (%o1)                          ##
1612 (%i2) if x ## y then 1 else 0;
1613 Incorrect syntax: Found algebraic expression where logical expression expected
1614 if x ## y then 
1615              ^
1616 (%i2) infix ("##", 100, 99, expr, expr, clause);
1617 (%o2)                          ##
1618 (%i3) if x ## y then 1 else 0;
1619 (%o3)                if x ## y then 1 else 0
1620 @end example
1622 @opencatbox{Категории:}
1623 @category{Операторы}
1624 @category{Факты и выводы}
1625 @category{Синтаксис}
1626 @closecatbox
1628 @end deffn
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{Выражения}
1653 @closecatbox
1655 @end defvr
1657 @c NEEDS WORK
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 ...}.
1671 Примеры:
1673 @example
1674 (%i1) x + y + w*z;
1675 (%o1)                      w z + y + x
1676 (%i2) inpart (%, 3, 2);
1677 (%o2)                           z
1678 (%i3) part (%th (2), 1, 2);
1679 (%o3)                           z
1680 (%i4) 'limit (f(x)^g(x+1), x, 0, minus);
1681                                   g(x + 1)
1682 (%o4)                 limit   f(x)
1683                       x -> 0-
1684 (%i5) inpart (%, 1, 2);
1685 (%o5)                       g(x + 1)
1686 @end example
1688 @opencatbox{Категории:}
1689 @category{Выражения}
1690 @closecatbox
1692 @end deffn
1694 @c NEEDS WORK
1695 @deffn {Функция} isolate (@var{expr}, @var{x})
1696 Возвращает @var{expr} с подвыражениями, которые есть суммы, и
1697 которые не содержат переменную @var{var}, замененные метками промежуточных выражений
1698 (атомарными символами, такими как @code{%t1}, @code{%t2}, ...).  Это часто бывает полезно, 
1699 чтобы избежать ненужного раскрытия подвыражений, которые не содержат
1700 интересующих переменных. Так как данные метки промежуточных выражений имеют подвыражения
1701 в качестве своих значений, то они могут быть подставлены обратно вычислением этого
1702 выражения.
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{Выражения}
1715 @closecatbox
1717 @end deffn
1719 @c NEEDS WORK
1720 @defvr {Управляющая переменная} isolate_wrt_times
1721 Значение по умолчанию: @code{false}
1723 Когда @code{isolate_wrt_times} равно @code{true}, то @code{isolate}
1724 также изолирует по отношению к произведениям. Например, сравнивает обе установки 
1726 @example
1727 (%i1) isolate_wrt_times: true$
1728 (%i2) isolate (expand ((a+b+c)^2), c);
1730 (%t2)                          2 a
1733 (%t3)                          2 b
1736                           2            2
1737 (%t4)                    b  + 2 a b + a
1739                      2
1740 (%o4)               c  + %t3 c + %t2 c + %t4
1741 (%i4) isolate_wrt_times: false$
1742 (%i5) isolate (expand ((a+b+c)^2), c);
1743                      2
1744 (%o5)               c  + 2 b c + 2 a c + %t4
1745 @end example
1747 @opencatbox{Категории:}
1748 @category{Выражения}
1749 @closecatbox
1751 @end defvr
1753 @c NEEDS EXAMPLES
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{Выражения}
1764 @closecatbox
1766 @end defvr
1768 @defvr {Управляющая переменная} listdummyvars
1769 Значение по умолчанию: @code{true}
1771 Когда @code{listdummyvars} есть @code{false}, "немые переменные" в 
1772 выражении не будут включаться в список, возвращаемый @code{listofvars}.
1773 (Смысл "немых переменных" тот же, что и в @code{freeof}.
1774 "Немые переменные" -- это математические объекты, такие 
1775 как индекс суммы или произведения, переменная предела и переменная интегрирования
1776 в определенном интеграле).
1778 Пример:
1780 @example
1781 (%i1) listdummyvars: true$
1782 (%i2) listofvars ('sum(f(i), i, 0, n));
1783 (%o2)                        [i, n]
1784 (%i3) listdummyvars: false$
1785 (%i4) listofvars ('sum(f(i), i, 0, n));
1786 (%o4)                          [n]
1787 @end example
1789 @opencatbox{Категории:}
1790 @category{Выражения}
1791 @closecatbox
1793 @end defvr
1795 @c NEEDS WORK
1796 @deffn {Функция} listofvars (@var{expr})
1797 Возвращает список переменных в @var{expr}.
1799 Когда @code{listconstvars} есть @code{true}, то в список,
1800 возвращаемый @code{listofvars}, включаются @code{%e}, @code{%pi}, @code{%i} и
1801 другие переменные, объявленные константами.
1802 По умолчанию они опускаются.
1804 @example
1805 (%i1) listofvars (f (x[1]+y) / g^(2+a));
1806 (%o1)                     [g, a, x , y]
1807                                   1
1808 @end example
1810 @opencatbox{Категории:}
1811 @category{Выражения}
1812 @closecatbox
1814 @end deffn
1816 @c NEEDS WORK
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{Выражения}
1824 @closecatbox
1826 @end deffn
1828 @deffn {Функция} lopow (@var{expr}, @var{x})
1829 Возвращает наименьший показатель степени @var{x}, который явно присутствует 
1830 в @var{expr}. Таким образом,
1832 @example
1833 (%i1) lopow ((x+y)^2 + (x+y)^a, x+y);
1834 (%o1)                       min(a, 2)
1835 @end example
1837 @opencatbox{Категории:}
1838 @category{Выражения}
1839 @closecatbox
1841 @end deffn
1843 @c NEEDS WORK
1844 @deffn {Функция} lpart (@var{label}, @var{expr}, @var{n_1}, ..., @var{n_k})
1845 Аналогично @code{dpart}, но использует 
1846 помеченный бокс. Помеченный бокс аналогичен боксу сделанному с помощью 
1847 @code{dpart}, но имеет имя в верхней строке.
1849 @opencatbox{Категории:}
1850 @category{Выражения}
1851 @closecatbox
1853 @end deffn
1855 @c NEEDS WORK
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}},
1861 где по крайней мере
1862 один множитель, скажем @var{f_i}, есть сумма членов.  Каждый член 
1863 в той сумме умножается на остальные множители в этом произведении. 
1864 (А именно на все множители, за исключением @var{f_i}).  @code{multthru} 
1865 не раскрывает суммы, возведенные в степень.
1866 Эта функция есть самый быстрый способ распространять произведения (коммутативные
1867 или некоммутативные) на суммы. Так как дроби представляются как
1868 произведения, то @code{multthru} может также использоваться для деления сумм 
1869 на произведения.
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})}.
1876 @example
1877 (%i1) x/(x-y)^2 - 1/(x-y) - f(x)/(x-y)^3;
1878                       1        x         f(x)
1879 (%o1)             - ----- + -------- - --------
1880                     x - y          2          3
1881                             (x - y)    (x - y)
1882 (%i2) multthru ((x-y)^3, %);
1883                            2
1884 (%o2)             - (x - y)  + x (x - y) - f(x)
1885 (%i3) ratexpand (%);
1886                            2
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);
1889                         10  2              2  2
1890                  (b + a)   s  + 2 a b s + a  b
1891 (%o4)            ------------------------------
1892                                   2
1893                              a b s
1894 (%i5) multthru (%);  /* note that this does not expand (b+a)^10 */
1895                                         10
1896                        2   a b   (b + a)
1897 (%o5)                  - + --- + ---------
1898                        s    2       a b
1899                            s
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
1904 @end example
1906 @opencatbox{Категории:}
1907 @category{Выражения}
1908 @closecatbox
1910 @end deffn
1912 @c NEEDS WORK
1913 @deffn {Функция} nounify (@var{f})
1914 Возвращает невычисляемую форму функции с именем @var{f}. Это 
1915 необходимо, если требуется представить имя вычисляемой функции так, 
1916 если бы она была невычисляемой.  Заметим, что некоторые вычисляемые функции  
1917 возвращают их невычисляемые формы,
1918 если они не могут быть вычислены для определенных значений аргументов.  
1919 Невычисляемая форма возвращается также в случае, если перед функцией стоит кавычка.
1921 @opencatbox{Категории:}
1922 @category{Невычисляемые и вычисляемые формы}
1923 @closecatbox
1925 @end deffn
1927 @c NEEDS WORK
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{Выражения}
1936 @closecatbox
1938 @end deffn
1940 @c NEEDS WORK
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}.
1957 Примеры:
1959 @c ===beg===
1960 @c stringdisp: true$
1961 @c op (a * b * c);
1962 @c op (a * b + c);
1963 @c op ('sin (a + b));
1964 @c op (a!);
1965 @c op (-a);
1966 @c op ([a, b, c]);
1967 @c op ('(if a > b then c else d));
1968 @c op ('foo (a));
1969 @c prefix (foo);
1970 @c op (foo a);
1971 @c ===end===
1973 @example
1974 (%i1) stringdisp: true$
1975 (%i2) op (a * b * c);
1976 (%o2)                          "*"
1977 (%i3) op (a * b + c);
1978 (%o3)                          "+"
1979 (%i4) op ('sin (a + b));
1980 (%o4)                          sin
1981 (%i5) op (a!);
1982 (%o5)                          "!"
1983 (%i6) op (-a);
1984 (%o6)                          "-"
1985 (%i7) op ([a, b, c]);
1986 (%o7)                          "["
1987 (%i8) op ('(if a > b then c else d));
1988 (%o8)                         "if"
1989 (%i9) op ('foo (a));
1990 (%o9)                          foo
1991 (%i10) prefix (foo);
1992 (%o10)                        "foo"
1993 (%i11) op (foo a);
1994 (%o11)                        "foo"
1995 @end example
1997 @opencatbox{Категории:}
1998 @category{Выражения}
1999 @category{Операторы}
2000 @closecatbox
2002 @end deffn
2004 @c NEEDS WORK
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{Операторы}
2017 @closecatbox
2019 @end deffn
2021 @c NEEDS WORK
2022 @deffn {Функция} optimize (@var{expr})
2023 Возвращает выражение, которое выдает тоже самое значение и
2024 побочные эффекты, как и @var{expr}, но выполняется более 
2025 эффективно за счет устранения лишних повторных вычислений
2026 общих подвыражений. @code{optimize} также имеет побочный 
2027 эффект "сворачивания" своего аргумента так что все общие
2028 подвыражения используются совместно.
2029 Выполните @code{example (optimize)} для примеров.
2031 @opencatbox{Категории:}
2032 @category{Выражения}
2033 @closecatbox
2035 @end deffn
2037 @defvr {Управляющая переменная} optimprefix
2038 Значение по умолчанию: @code{%}
2040 @code{optimprefix} это префикс, используемый для генерации символов 
2041 командой @code{optimize}.
2043 @opencatbox{Категории:}
2044 @category{Выражения}
2045 @closecatbox
2047 @end defvr
2049 @c NEEDS WORK
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{Выражения}
2060 @closecatbox
2062 @end deffn
2064 @c NEEDS WORK
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{Функции предикаты}
2073 @closecatbox
2075 @end deffn
2077 @c NEEDS WORK
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} < переменные, которые начинаются 
2088 с A < ...
2089 < переменные, которые начинаются с Z < последний аргумент @code{ordergreat} <
2090  ... < первый аргумент @code{ordergreat} < объявленные главные переменные @code{mainvar}.
2092 См. также @code{ordergreat} и @code{mainvar}.
2094 @opencatbox{Категории:}
2095 @category{Выражения}
2096 @closecatbox
2098 @end deffn
2100 @c NEEDS WORK
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{Функции предикаты}
2109 @closecatbox
2111 @end deffn
2113 @c NEEDS WORK
2114 @deffn {Функция} part (@var{expr}, @var{n_1}, ..., @var{n_k})
2115 Возвращает части внешней формы @code{expr}. Функция
2116 получает часть @code{expr}, которая определена индексами @var{n_1}, ..., @var{n_k}.  
2117 Когда первая
2118 часть @var{n_1} @code{expr} взята, берется часть @var{n_2} от нее и т.д. 
2119 Результат есть
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 когда выбранная часть выражения не существует, иначе выдается сообщение об 
2137 ошибке.
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{Выражения}
2148 @closecatbox
2150 @end deffn
2152 @c NEEDS WORK
2153 @deffn {Функция} partition (@var{expr}, @var{x})
2154 Возвращает список из двух выражений.  Они есть (1)
2155 множители @var{expr} (если оно произведение), члены @var{expr} 
2156 (если оно является суммой), или список (если оно является списком), которые 
2157 не содержит @var{x} и, (2) те множители, члены или список, которые  содержат.
2159 @example
2160 (%i1) partition (2*a*x*f(x), x);
2161 (%o1)                     [2 a, x f(x)]
2162 (%i2) partition (a+b, x);
2163 (%o2)                      [b + a, 0]
2164 (%i3) partition ([a, b, f(a), c], a); 
2165 (%o3)                  [[b, c], [a, f(a)]]
2166 @end example
2168 @opencatbox{Категории:}
2169 @category{Выражения}
2170 @closecatbox
2172 @end deffn
2174 @c NEEDS EXAMPLE
2175 @defvr {Управляющая переменная} partswitch
2176 Значение по умолчанию: @code{false}
2178 Когда @code{partswitch} есть @code{true}, то @code{end} возвращается,
2179 если выбранная часть выражения не существует, иначе выдается сообщение
2180 об ошибке.
2182 @opencatbox{Категории:}
2183 @category{Выражения}
2184 @closecatbox
2186 @end defvr
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}.
2197 Примеры:
2199 @example
2200 (%i1) expr: (a+b)/2 + sin (x^2)/3 - log (1 + sqrt(x+1));
2201                                           2
2202                                      sin(x )   b + a
2203 (%o1)       - log(sqrt(x + 1) + 1) + ------- + -----
2204                                         3        2
2205 (%i2) pickapart (expr, 0);
2207                                           2
2208                                      sin(x )   b + a
2209 (%t2)       - log(sqrt(x + 1) + 1) + ------- + -----
2210                                         3        2
2212 (%o2)                          %t2
2213 (%i3) pickapart (expr, 1);
2215 (%t3)                - log(sqrt(x + 1) + 1)
2218                                   2
2219                              sin(x )
2220 (%t4)                        -------
2221                                 3
2224                               b + a
2225 (%t5)                         -----
2226                                 2
2228 (%o5)                    %t5 + %t4 + %t3
2229 (%i5) pickapart (expr, 2);
2231 (%t6)                 log(sqrt(x + 1) + 1)
2234                                   2
2235 (%t7)                        sin(x )
2238 (%t8)                         b + a
2240                          %t8   %t7
2241 (%o8)                    --- + --- - %t6
2242                           2     3
2243 (%i8) pickapart (expr, 3);
2245 (%t9)                    sqrt(x + 1) + 1
2248                                 2
2249 (%t10)                         x
2251                   b + a              sin(%t10)
2252 (%o10)            ----- - log(%t9) + ---------
2253                     2                    3
2254 (%i10) pickapart (expr, 4);
2256 (%t11)                     sqrt(x + 1)
2258                       2
2259                  sin(x )   b + a
2260 (%o11)           ------- + ----- - log(%t11 + 1)
2261                     3        2
2262 (%i11) pickapart (expr, 5);
2264 (%t12)                        x + 1
2266                    2
2267               sin(x )   b + a
2268 (%o12)        ------- + ----- - log(sqrt(%t12) + 1)
2269                  3        2
2270 (%i12) pickapart (expr, 6);
2271                   2
2272              sin(x )   b + a
2273 (%o12)       ------- + ----- - log(sqrt(x + 1) + 1)
2274                 3        2
2275 @end example
2277 @opencatbox{Категории:}
2278 @category{Выражения}
2279 @closecatbox
2281 @end deffn
2283 @c NEEDS WORK
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{Выражения}
2294 @closecatbox
2296 @end defvr
2298 @c NEEDS EXAMPLES
2299 @deffn {Функция} polarform (@var{expr})
2300 Возвращает выражение @code{r %e^(%i theta)} эквивалентное @var{expr},
2301 такое, что @code{r} и @code{theta} чисто вещественные.
2303 @opencatbox{Категории:}
2304 @category{Комплексные переменные}
2305 @category{Экспоненциальные и логарифмические функции}
2306 @closecatbox
2308 @end deffn
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).
2324 @c 
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{Многочлены}
2333 @closecatbox
2335 @end deffn
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}.
2358 Примеры:
2360 @c ===beg===
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);
2370 @c ===end===
2372 @example
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);
2376 (%o2)                       25401600
2377 (%i3) product (a[i], i, 1, 7);
2378 (%o3)                 a  a  a  a  a  a  a
2379                        1  2  3  4  5  6  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);
2383                              n
2384                            /===\
2385                             ! !
2386 (%o5)                       ! !  a(i)
2387                             ! !
2388                            i = 1
2389 (%i6) product (k, k, 1, n);
2390                                n
2391                              /===\
2392                               ! !
2393 (%o6)                         ! !  k
2394                               ! !
2395                              k = 1
2396 (%i7) product (k, k, 1, n), simpproduct;
2397 (%o7)                          n!
2398 (%i8) product (integrate (x^k, x, 0, 1), k, 1, n);
2399                              n
2400                            /===\
2401                             ! !    1
2402 (%o8)                       ! !  -----
2403                             ! !  k + 1
2404                            k = 1
2405 (%i9) product (if k <= 5 then a^k else b^k, k, 1, 10);
2406                               15  40
2407 (%o9)                        a   b
2408 @end example
2410 @opencatbox{Категории:}
2411 @category{Суммы и произведения}
2412 @closecatbox
2414 @end deffn
2416 @c NEEDS EXAMPLES
2417 @deffn {Функция} realpart (@var{expr})
2418 Возвращает вещественную часть @var{expr}. @code{realpart} и @code{imagpart} 
2419 будут работать для выражений, включающих тригонометрические и гипергеометрические функции,
2420 также как и квадратный корень, логарифм и возведение в степень.
2422 @opencatbox{Категории:}
2423 @category{Комплексные числа}
2424 @closecatbox
2426 @end deffn
2428 @c NEEDS EXAMPLES
2429 @deffn {Функция} rectform (@var{expr})
2430 Возвращает выражение @code{a + b %i}, эквивалентное @var{expr},
2431 такое, что @var{a} и @var{b} чисто вещественные.
2433 @opencatbox{Категории:}
2434 @category{Комплексные числа}
2435 @closecatbox
2437 @end deffn
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}.
2452 Примеры:
2454 @c ===beg===
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);
2461 @c rembox (expr2);
2462 @c ===end===
2463 @example
2464 (%i1) expr: (a*d - b*c)/h^2 + sin(%pi*x);
2465                                   a d - b c
2466 (%o1)                sin(%pi x) + ---------
2467                                       2
2468                                      h
2469 (%i2) dpart (dpart (expr, 1, 1), 2, 2);
2470                         """""""    a d - b c
2471 (%o2)               sin("%pi x") + ---------
2472                         """""""      """"
2473                                      " 2"
2474                                      "h "
2475                                      """"
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"   "
2482                                    "  "h "   "
2483                                    "  """"   "
2484                                    """""""""""
2485 (%i4) rembox (expr2, unlabelled);
2486                                   BAR""""""""
2487                    FOO"""""""""   "a d - b c"
2488 (%o4)              "sin(%pi x)" + "---------"
2489                    """"""""""""   "    2    "
2490                                   "   h     "
2491                                   """""""""""
2492 (%i5) rembox (expr2, FOO);
2493                                   BAR""""""""
2494                        """""""    "a d - b c"
2495 (%o5)              sin("%pi x") + "---------"
2496                        """""""    "  """"   "
2497                                   "  " 2"   "
2498                                   "  "h "   "
2499                                   "  """"   "
2500                                   """""""""""
2501 (%i6) rembox (expr2, BAR);
2502                    FOO"""""""""""
2503                    "    """"""" "   a d - b c
2504 (%o6)              "sin("%pi x")" + ---------
2505                    "    """"""" "     """"
2506                    """"""""""""""     " 2"
2507                                       "h "
2508                                       """"
2509 (%i7) rembox (expr2);
2510                                   a d - b c
2511 (%o7)                sin(%pi x) + ---------
2512                                       2
2513                                      h
2514 @end example
2516 @opencatbox{Категории:}
2517 @category{Выражения}
2518 @closecatbox
2520 @end deffn
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} есть буквенный префикс, 
2546 используемый для 
2547 генерации следующего индекса суммирования,
2548 если требуется автоматически сгенерированный индекс.
2550 @code{gensumnum} есть численный суффикс,  используемый для генерирования следующего 
2551 используемый для 
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}.
2561 Примеры:
2563 @c ===beg===
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);
2576 @c ===end===
2578 @example
2579 (%i1) sum (i^2, i, 1, 7);
2580 (%o1)                          140
2581 (%i2) sum (a[i], i, 1, 7);
2582 (%o2)           a  + a  + a  + a  + a  + a  + a
2583                  7    6    5    4    3    2    1
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);
2587                             n
2588                            ====
2589                            \
2590 (%o4)                       >    a(i)
2591                            /
2592                            ====
2593                            i = 1
2594 (%i5) sum (2^i + i^2, i, 0, n);
2595                           n
2596                          ====
2597                          \       i    2
2598 (%o5)                     >    (2  + i )
2599                          /
2600                          ====
2601                          i = 0
2602 (%i6) sum (2^i + i^2, i, 0, n), simpsum;
2603                               3      2
2604                    n + 1   2 n  + 3 n  + n
2605 (%o6)             2      + --------------- - 1
2606                                   6
2607 (%i7) sum (1/3^i, i, 1, inf);
2608                             inf
2609                             ====
2610                             \     1
2611 (%o7)                        >    --
2612                             /      i
2613                             ====  3
2614                             i = 1
2615 (%i8) sum (1/3^i, i, 1, inf), simpsum;
2616                                 1
2617 (%o8)                           -
2618                                 2
2619 (%i9) sum (i^2, i, 1, 4) * sum (1/i^2, i, 1, inf);
2620                               inf
2621                               ====
2622                               \     1
2623 (%o9)                      30  >    --
2624                               /      2
2625                               ====  i
2626                               i = 1
2627 (%i10) sum (i^2, i, 1, 4) * sum (1/i^2, i, 1, inf), simpsum;
2628                                   2
2629 (%o10)                       5 %pi
2630 (%i11) sum (integrate (x^k, x, 0, 1), k, 1, n);
2631                             n
2632                            ====
2633                            \       1
2634 (%o11)                      >    -----
2635                            /     k + 1
2636                            ====
2637                            k = 1
2638 (%i12) sum (if k <= 5 then a^k else b^k, k, 1, 10);
2639           10    9    8    7    6    5    4    3    2
2640 (%o12)   b   + b  + b  + b  + b  + a  + a  + a  + a  + a
2641 @end example
2643 @opencatbox{Категории:}
2644 @category{Суммы и произведения}
2645 @closecatbox
2647 @end deffn
2649 @deffn {Функция} lsum (@var{expr}, @var{x}, @var{L})
2650 Представляет собой сумму @var{expr} для каждого элемента @var{x} в @var{L}.
2652 Невычисляемая форма @code{'lsum} возвращается,
2653 если аргумент @var{L} не вычисляется до списка.
2655 Примеры:
2657 @c ===beg===
2658 @c lsum (x^i, i, [1, 2, 7]);
2659 @c lsum (i^2, i, rootsof (x^3 - 1, x));
2660 @c ===end===
2661 @example
2662 (%i1) lsum (x^i, i, [1, 2, 7]);
2663                             7    2
2664 (%o1)                      x  + x  + x
2665 (%i2) lsum (i^2, i, rootsof (x^3 - 1, x));
2666                      ====
2667                      \      2
2668 (%o2)                 >    i
2669                      /
2670                      ====
2671                                    3
2672                      i in rootsof(x  - 1, x)
2673 @end example
2675 @opencatbox{Категории:}
2676 @category{Суммы и произведения}
2677 @closecatbox
2679 @end deffn
2681 @deffn {Функция} verbify (@var{f})
2682 Возвращает вычисляемую форму функции с именем @var{f}.
2684 См. также @code{verb}, @code{noun} и @code{nounify}.
2686 Примеры:
2688 @c ===beg===
2689 @c verbify ('foo);
2690 @c :lisp $%
2691 @c nounify (foo);
2692 @c :lisp $%
2693 @c ===end===
2694 @example
2695 (%i1) verbify ('foo);
2696 (%o1)                          foo
2697 (%i2) :lisp $%
2698 $FOO
2699 (%i2) nounify (foo);
2700 (%o2)                          foo
2701 (%i3) :lisp $%
2702 %FOO
2703 @end example
2705 @opencatbox{Категории:}
2706 @category{Невычисляемые и вычисляемые формы}
2707 @closecatbox
2709 @end deffn