Convert limits from below to limits from above.
[maxima.git] / doc / info / ru / Expressions.texi
blob248b923965c61794a4a5bc4642f3a9c04b806ee7
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 @anchor{declare}
775 @deffn {Функция} declare (@var{a_1}, @var{p_1}, @var{a_2}, @var{p_2}, ...)
776 Присваивает атому или списку атомов @var{a_i} свойство или список свойств @var{p_i}.
777 Когда @var{a_i} и/или @var{p_i} есть списки,
778 каждый из атомом получает все свойства.
780 @code{declare} не вычисляет свои аргументы.
781 @code{declare} всегда возвращает @code{done}.
783 Как отмечено в описании для каждого флага декларации,
784 для некоторых флагов
785 @code{featurep(@var{object}, @var{feature})}
786 возвращает @code{true}, если @var{object} был объявлен, как имеющий @var{feature}.
787 Однако, @code{featurep} не распознает некоторые флаги. Это ошибка.
789 См. также @code{features}.
791 @code{declare} распознает следующие свойства:
793 @table @asis
794 @item @code{evfun}
795 Делает @var{a_i} известным для @code{ev} так, что эта функция названная как @var{a_i},
796 применяется когда @var{a_i} появляется как флаговый аргумент @code{ev}.
797 См. @code{evfun}.
799 @item @code{evflag}
800 Делает @var{a_i} известным для функции @code{ev} так, что @var{a_i} 
801 связывается с @code{true}
802 во время выполнение @code{ev}, когда @var{a_i} появляется как флаговый аргумент  @code{ev}.
803 См. @code{evflag}.
805 @c OBSOLETE @code{special} (RECOGNIZED BY DECLARE BUT NEVER USED ANYWHERE)
807 @c OBSOLETE @code{nonarray} (RECOGNIZED BY DECLARE BUT NEVER USED ANYWHERE)
809 @item @code{bindtest}
810 Указывает Maxima то, что следует вызвать ошибку, когда при вычислении значение @var{a_i} не определено.
812 @item @code{noun}
813 Указывает Maxima считать @var{a_i} невычисляемой формой. 
814 Эффект состоит в замене @var{a_i} на @code{'@var{a_i}}
815 или @code{nounify(@var{a_i})}, в зависимости от контекста.
817 @item @code{constant}
818 Указывает Maxima рассматривать @var{a_i} как символьную константу.
819 @c WHAT MAXIMA KNOWS ABOUT SYMBOLIC CONSTANTS IS PRETTY LIMITED
820 @c DUNNO IF WE WANT TO GET INTO DETAILS HERE. 
821 @c MAYBE IN THE DOCUMENTATION FOR CONSTANT (IF THERE IS SUCH)
823 @item @code{scalar}
824 Указывает Maxima рассматривать @var{a_i} как скалярную переменную.
826 @item @code{nonscalar}
827 Указывает Maxima рассматривать @var{a_i} как нескалярную переменную.
828 Обычное применение состоит в том, чтобы объявлять переменная как символьный вектор или матрицу.
830 @item @code{mainvar}
831 Указывает Maxima рассматривать @var{a_i} как "главную переменную" (@code{mainvar}).
832 @code{ordergreatp} определяет упорядочивание атомов таким образом:
834 (главные переменные) > (другие переменные) > (скалярный переменные) > (константы) > (числа)
836 @item @code{alphabetic}
837 Указывает Maxima рассматривать @var{a_i} как алфавитный символ.
839 @item @code{feature}
840 Указывает Maxima рассматривать @var{a_i} как имя свойства.
841 Тогда другие атомы могут иметь свойство @var{a_i}.
843 @item @code{rassociative}, @code{lassociative}
844 Указывает Maxima рассматривать @var{a_i} как право-ассоциативную или лево-ассоциативную функцию.
846 @item @code{nary}
847 Указывает Maxima рассматривать @var{a_i} как n-арную функцию.
849 Декларация @code{nary} это не тоже, что вызов функции @code{nary}.
850 Единственный эффект @code{declare(foo, nary)} состоит в том, чтобы обучить упрощатель Maxima
851 упрощать вложенные выражения,
852 например, чтобы @code{foo(x, foo(y, z))} упрощалось до @code{foo(x, y, z)}.
854 @item @code{symmetric}, @code{antisymmetric}, @code{commutative}
855 Указывает Maxima рассматривать @var{a_i} как симметричную или антисимметричную функцию.
856 @code{commutative} это тоже самое, что @code{symmetric}.
858 @item @code{oddfun}, @code{evenfun}
859 Указывает Maxima рассматривать @var{a_i} как нечетную или четную функцию.
861 @item @code{outative}
862 Указывает Maxima упрощать выражения с  @var{a_i}
863 путем выноса константных множителей за пределы первого аргумента.
865 Когда @var{a_i} имеет один аргумент,
866 множитель рассматривается константным, если он есть литерал или объявлен константой.
868 Когда @var{a_i} имеет два или более аргументов,
869 множитель рассматривается константой,
870 если второй аргумент есть символ
871 и этот множитель свободен от этого второго аргумента.
873 @item @code{multiplicative}
874 Указывает Maxima упрощать выражения @var{a_i} 
875 путем подстановки @code{@var{a_i}(x * y * z * ...)} @code{-->}
876 @code{@var{a_i}(x) * @var{a_i}(y) * @var{a_i}(z) * ...}.
877 Эта подстановка выполняется только для первого аргумента.
879 @item @code{additive}
880 Указывает Maxima упрощать @var{a_i} выражения
881 путем подстановки @code{@var{a_i}(x + y + z + ...)} @code{-->}
882 @code{@var{a_i}(x) + @var{a_i}(y) + @var{a_i}(z) + ...}.
883 Эта подстановка выполняется только для первого аргумента.
885 @item @code{linear}
886 Эквивалентно объявлению @var{a_i} совместно @code{outative} и @code{additive}.
888 @c OBSOLETE @code{analytic} (RECOGNIZED BY DECLARE BUT NEVER USED ANYWHERE)
890 @item @code{integer}, @code{noninteger}
891 Указывает Maxima рассматривать @var{a_i} как целую или нецелую переменную.
893 @item @code{even}, @code{odd}
894 Указывает Maxima рассматривать @var{a_i} как четную или нечетную целую переменную.
896 @item @code{rational}, @code{irrational}
897 Указывает Maxima рассматривать @var{a_i} как рациональную или иррациональную вещественную переменную.
899 @item @code{real}, @code{imaginary}, @code{complex}
900 Указывает Maxima рассматривать @var{a_i} как вещественную, чисто мнимую или комплексную переменную.
902 @item @code{increasing}, @code{decreasing}
903 Указывает Maxima рассматривать @var{a_i} как растущую или убывающую функцию.
904 @c MAXIMA FAILS TO DEDUCE F(2) > F(1) FOR INCREASING FUNCTION F
905 @c AND FAILS TO DEDUCE ANYTHING AT ALL ABOUT DECREASING FUNCTIONS
906 @c REPORTED AS SF BUG # 1483194
908 @item @code{posfun}
909 Указывает Maxima рассматривать @var{a_i} как положительную функцию.
911 @item @code{integervalued}
912 Указывает Maxima рассматривать @var{a_i} как целочисленную функцию.
914 @end table
916 Примеры:
918 Декларации @code{evfun} и @code{evflag}.
919 @c ===beg===
920 @c declare (expand, evfun);
921 @c (a + b)^3;
922 @c (a + b)^3, expand;
923 @c declare (demoivre, evflag);
924 @c exp (a + b*%i);
925 @c exp (a + b*%i), demoivre;
926 @c ===end===
927 @example
928 (%i1) declare (expand, evfun);
929 (%o1)                         done
930 (%i2) (a + b)^3;
931                                    3
932 (%o2)                       (b + a)
933 (%i3) (a + b)^3, expand;
934                      3        2      2      3
935 (%o3)               b  + 3 a b  + 3 a  b + a
936 (%i4) declare (demoivre, evflag);
937 (%o4)                         done
938 (%i5) exp (a + b*%i);
939                              %i b + a
940 (%o5)                      %e
941 (%i6) exp (a + b*%i), demoivre;
942                       a
943 (%o6)               %e  (%i sin(b) + cos(b))
944 @end example
946 Декларация @code{bindtest}.
947 @c ===beg===
948 @c aa + bb;
949 @c declare (aa, bindtest);
950 @c aa + bb;
951 @c aa : 1234;
952 @c aa + bb;
953 @c ===end===
954 @example
955 (%i1) aa + bb;
956 (%o1)                        bb + aa
957 (%i2) declare (aa, bindtest);
958 (%o2)                         done
959 (%i3) aa + bb;
960 aa unbound variable
961  -- an error.  Quitting.  To debug this try debugmode(true);
962 (%i4) aa : 1234;
963 (%o4)                         1234
964 (%i5) aa + bb;
965 (%o5)                       bb + 1234
966 @end example
968 Декларация @code{noun}.
969 @c ===beg===
970 @c factor (12345678);
971 @c declare (factor, noun);
972 @c factor (12345678);
973 @c ''%, nouns;
974 @c ===end===
975 @example
976 (%i1) factor (12345678);
977                              2
978 (%o1)                     2 3  47 14593
979 (%i2) declare (factor, noun);
980 (%o2)                         done
981 (%i3) factor (12345678);
982 (%o3)                   factor(12345678)
983 (%i4) ''%, nouns;
984                              2
985 (%o4)                     2 3  47 14593
986 @end example
988 Декларации @code{constant}, @code{scalar}, @code{nonscalar} и @code{mainvar}.
989 @c ===beg===
990 @c declare (bb, constant);
991 @c declare (cc, scalar);
992 @c declare (dd, nonscalar);
993 @c declare (ee, mainvar);
994 @c ===end===
995 @example
996 @end example
998 Декларация @code{alphabetic}.
999 @c ===beg===
1000 @c xx\~yy : 1729;
1001 @c declare ("~", alphabetic);
1002 @c xx~yy + yy~xx + ~xx~~yy~;
1003 @c ===end===
1004 @example
1005 (%i1) xx\~yy : 1729;
1006 (%o1)                         1729
1007 (%i2) declare ("~", alphabetic);
1008 (%o2)                         done
1009 (%i3) xx~yy + yy~xx + ~xx~~yy~;
1010 (%o3)                ~xx~~yy~ + yy~xx + 1729
1011 @end example
1013 Декларация @code{feature}.
1014 @c ===beg===
1015 @c declare (FOO, feature);
1016 @c declare (x, FOO);
1017 @c featurep (x, FOO);
1018 @c ===end===
1019 @example
1020 (%i1) declare (FOO, feature);
1021 (%o1)                         done
1022 (%i2) declare (x, FOO);
1023 (%o2)                         done
1024 (%i3) featurep (x, FOO);
1025 (%o3)                         true
1026 @end example
1028 Декларации @code{rassociative} и @code{lassociative}.
1029 @c ===beg===
1030 @c declare (F, rassociative);
1031 @c declare (G, lassociative);
1032 @c ===end===
1033 @example
1034 @end example
1036 Декларация @code{nary}.
1037 @c ===beg===
1038 @c H (H (a, b), H (c, H (d, e)));
1039 @c declare (H, nary);
1040 @c H (H (a, b), H (c, H (d, e)));
1041 @c ===end===
1042 @example
1043 (%i1) H (H (a, b), H (c, H (d, e)));
1044 (%o1)               H(H(a, b), H(c, H(d, e)))
1045 (%i2) declare (H, nary);
1046 (%o2)                         done
1047 (%i3) H (H (a, b), H (c, H (d, e)));
1048 (%o3)                   H(a, b, c, d, e)
1049 @end example
1051 Декларации @code{symmetric} и @code{antisymmetric}.
1052 @c ===beg===
1053 @c S (b, a);
1054 @c declare (S, symmetric);
1055 @c S (b, a);
1056 @c S (a, c, e, d, b);
1057 @c T (b, a);
1058 @c declare (T, antisymmetric);
1059 @c T (b, a);
1060 @c T (a, c, e, d, b);
1061 @c ===end===
1062 @example
1063 (%i1) S (b, a);
1064 (%o1)                        S(b, a)
1065 (%i2) declare (S, symmetric);
1066 (%o2)                         done
1067 (%i3) S (b, a);
1068 (%o3)                        S(a, b)
1069 (%i4) S (a, c, e, d, b);
1070 (%o4)                   S(a, b, c, d, e)
1071 (%i5) T (b, a);
1072 (%o5)                        T(b, a)
1073 (%i6) declare (T, antisymmetric);
1074 (%o6)                         done
1075 (%i7) T (b, a);
1076 (%o7)                       - T(a, b)
1077 (%i8) T (a, c, e, d, b);
1078 (%o8)                   T(a, b, c, d, e)
1079 @end example
1081 Декларации @code{oddfun} и @code{evenfun}.
1082 @c ===beg===
1083 @c o (- u) + o (u);
1084 @c declare (o, oddfun);
1085 @c o (- u) + o (u);
1086 @c e (- u) - e (u);
1087 @c declare (e, evenfun);
1088 @c e (- u) - e (u);
1089 @c ===end===
1090 @example
1091 (%i1) o (- u) + o (u);
1092 (%o1)                     o(u) + o(- u)
1093 (%i2) declare (o, oddfun);
1094 (%o2)                         done
1095 (%i3) o (- u) + o (u);
1096 (%o3)                           0
1097 (%i4) e (- u) - e (u);
1098 (%o4)                     e(- u) - e(u)
1099 (%i5) declare (e, evenfun);
1100 (%o5)                         done
1101 (%i6) e (- u) - e (u);
1102 (%o6)                           0
1103 @end example
1105 Декларация @code{outative}.
1106 @c ===beg===
1107 @c F1 (100 * x);
1108 @c declare (F1, outative);
1109 @c F1 (100 * x);
1110 @c declare (zz, constant);
1111 @c F1 (zz * y);
1112 @c ===end===
1113 @example
1114 (%i1) F1 (100 * x);
1115 (%o1)                       F1(100 x)
1116 (%i2) declare (F1, outative);
1117 (%o2)                         done
1118 (%i3) F1 (100 * x);
1119 (%o3)                       100 F1(x)
1120 (%i4) declare (zz, constant);
1121 (%o4)                         done
1122 (%i5) F1 (zz * y);
1123 (%o5)                       zz F1(y)
1124 @end example
1126 Декларация @code{multiplicative}.
1127 @c ===beg===
1128 @c F2 (a * b * c);
1129 @c declare (F2, multiplicative);
1130 @c F2 (a * b * c);
1131 @c ===end===
1132 @example
1133 (%i1) F2 (a * b * c);
1134 (%o1)                       F2(a b c)
1135 (%i2) declare (F2, multiplicative);
1136 (%o2)                         done
1137 (%i3) F2 (a * b * c);
1138 (%o3)                   F2(a) F2(b) F2(c)
1139 @end example
1141 Декларация @code{additive}.
1142 @c ===beg===
1143 @c F3 (a + b + c);
1144 @c declare (F3, additive);
1145 @c F3 (a + b + c);
1146 @c ===end===
1147 @example
1148 (%i1) F3 (a + b + c);
1149 (%o1)                     F3(c + b + a)
1150 (%i2) declare (F3, additive);
1151 (%o2)                         done
1152 (%i3) F3 (a + b + c);
1153 (%o3)                 F3(c) + F3(b) + F3(a)
1154 @end example
1156 Декларация @code{linear}.
1157 @c ===beg===
1158 @c 'sum (F(k) + G(k), k, 1, inf);
1159 @c declare (nounify (sum), linear);
1160 @c 'sum (F(k) + G(k), k, 1, inf);
1161 @c ===end===
1162 @example
1163 (%i1) 'sum (F(k) + G(k), k, 1, inf);
1164                        inf
1165                        ====
1166                        \
1167 (%o1)                   >    (G(k) + F(k))
1168                        /
1169                        ====
1170                        k = 1
1171 (%i2) declare (nounify (sum), linear);
1172 (%o2)                         done
1173 (%i3) 'sum (F(k) + G(k), k, 1, inf);
1174                      inf          inf
1175                      ====         ====
1176                      \            \
1177 (%o3)                 >    G(k) +  >    F(k)
1178                      /            /
1179                      ====         ====
1180                      k = 1        k = 1
1181 @end example
1183 @opencatbox{Категории:}
1184 @category{Факты и выводы}
1185 @closecatbox
1187 @end deffn
1189 @c NEEDS WORK
1190 @deffn {Функция} disolate (@var{expr}, @var{x_1}, ..., @var{x_n})
1191 аналогична @code{isolate (@var{expr}, @var{x})},
1192 за исключением того, что она дает возможность пользователю изолировать
1193 более чем одну переменную одновременно. Это может быть полезно, например, 
1194 если пользователь пытается заменить переменные в многократном
1195 интегрировании и эта замена переменных включает две или более переменных интегрирования. 
1196 Данная функция автоматически загружается из
1197 @file{simplification/disol.mac}.  Демонстрация доступна по
1198 @code{demo("disol")$}.
1200 @opencatbox{Категории:}
1201 @category{Выражения}
1202 @closecatbox
1204 @end deffn
1206 @c NEEDS WORK
1207 @deffn {Функция} dispform (@var{expr})
1208 Возвращает внешнее представление @var{expr} по отношению к его
1209 главному оператору. Это может быть полезно в сочетании с @code{part}, которая
1210 также имеет дело с внешним представлением. Предположим @var{expr} есть -A.
1211 Тогда внутреннее представление @var{expr} есть "*"(-1,A), в то время как
1212 внешнее представление есть "-"(A). @code{dispform (@var{expr}, all)} конвертирует 
1213 все выражение (не только верхний уровень) в внешний формат. Например,
1214 если @code{expr: sin (sqrt (x))}, то @code{freeof (sqrt, expr)} и
1215 @code{freeof (sqrt, dispform (expr))} дают @code{true}, в то время как
1216 @code{freeof (sqrt, dispform (expr, all))} дает @code{false}.
1218 @opencatbox{Категории:}
1219 @category{Выражения}
1220 @closecatbox
1222 @end deffn
1224 @c NEEDS WORK
1225 @deffn {Функция} distrib (@var{expr})
1226 Распространяет суммы над произведениями. Она отличается от @code{expand}
1227 тем, что она работает только на самом верхнем уровне выражения, то есть она не
1228 рекурсивная и работает быстрее чем @code{expand}. Она отличается от @code{multthru} тем, 
1229 что раскрывает все суммы на этом уровне.
1231 Примеры:
1233 @example
1234 (%i1) distrib ((a+b) * (c+d));
1235 (%o1)                 b d + a d + b c + a c
1236 (%i2) multthru ((a+b) * (c+d));
1237 (%o2)                 (b + a) d + (b + a) c
1238 (%i3) distrib (1/((a+b) * (c+d)));
1239                                 1
1240 (%o3)                    ---------------
1241                          (b + a) (d + c)
1242 (%i4) expand (1/((a+b) * (c+d)), 1, 0);
1243                                 1
1244 (%o4)                 ---------------------
1245                       b d + a d + b c + a c
1246 @end example
1248 @opencatbox{Категории:}
1249 @category{Выражения}
1250 @closecatbox
1252 @end deffn
1254 @c NEEDS WORK
1255 @deffn {Функция} dpart (@var{expr}, @var{n_1}, ..., @var{n_k})
1256 Выбирает тоже подвыражение что и @code{part}, но
1257 вместо только возвращения этого подвыражения как значения, она возвращает
1258 все выражение с выбранным подвыражением, изображенным внутри
1259 бокса. Данный бокс в действительности является частью выражения.
1261 @example
1262 (%i1) dpart (x+y/z^2, 1, 2, 1);
1263                              y
1264 (%o1)                       ---- + x
1265                                2
1266                             """
1267                             "z"
1268                             """
1269 @end example
1271 @opencatbox{Категории:}
1272 @category{Выражения}
1273 @closecatbox
1275 @end deffn
1277 @c PROBABLY MORE TO BE SAID HERE
1278 @anchor{exp}
1279 @deffn {Функция} exp (@var{x})
1280 Представляет собой экспоненциальную функцию.
1281 Все экземпляры @code{exp (@var{x})} при вводе упрощаются до @code{%e^@var{x}}.
1282 @code{exp} не присутствует в упрощенных выражениях.
1284 Если @code{demoivre} равно @code{true}, то @code{%e^(a + b %i)} упрощается до 
1285 @code{%e^(a (cos(b) + %i sin(b)))}, если @code{b} свободна от @code{%i}. См. @code{demoivre}.
1287 Если @code{%emode}, равно @code{true}, то 
1288 @code{%e^(%pi %i x)} упрощается. См. @code{%emode}.
1290 Если @code{%enumer}, равно @code{true}, то @code{%e} заменяется на 
1291 2.718..., когда @code{numer} есть @code{true}. См. @code{%enumer}.
1293 @c NEED EXAMPLES HERE
1295 @opencatbox{Категории:}
1296 @category{Экспоненциальные и логарифмические функции}
1297 @closecatbox
1299 @end deffn
1301 @defvr {Управляющая переменная} %emode
1302 Значение по умолчанию: @code{true}
1304 Когда @code{%emode} есть @code{true},
1305 то @code{%e^(%pi %i x)} упрощается следующим образом.
1307 @code{%e^(%pi %i x)} упрощается до @code{cos (%pi x) + %i sin (%pi x)}, если @code{x} есть 
1308 число с плавающей точкой, целое или произведение 1/2, 1/3, 1/4 или 1/6 и тогда в дальнейшем упрощается.
1310 Для других численных @code{x},
1311 @code{%e^(%pi %i x)} упрощается до @code{%e^(%pi %i y)}, где @code{y} есть
1312 @code{x - 2 k} для некоторых целых @code{k}, таких что @code{abs(y) < 1}.  
1314 Когда @code{%emode} есть @code{false}, 
1315 специальное упрощение @code{%e^(%pi %i x)} не выполняется.
1317 @c NEED EXAMPLES HERE
1319 @opencatbox{Категории:}
1320 @category{Экспоненциальные и логарифмические функции}
1321 @category{Флаги и переменные упрощения}
1322 @closecatbox
1324 @end defvr
1326 @defvr {Управляющая переменная} %enumer
1327 Значение по умолчанию: @code{false}
1329 Когда @code{%enumer} есть @code{true},
1330 то @code{%e} заменяется своим численным значением
1331 2.718..., когда @code{numer} есть @code{true}. 
1333 Когда @code{%enumer} есть @code{false}, эта подстановка выполняется
1334 только если экспонента в @code{%e^x} вычисляется до численного значения.
1336 См. также @code{ev} и @code{numer}.
1338 @c NEED EXAMPLES HERE
1340 @opencatbox{Категории:}
1341 @category{Экспоненциальные и логарифмические функции}
1342 @category{Флаги вычисления}
1343 @closecatbox
1345 @end defvr
1347 @defvr {Управляющая переменная} exptisolate
1348 Значение по умолчанию: @code{false}
1350 @c WHAT DOES THIS MEAN EXACTLY ??
1351 Если @code{exptisolate} равно @code{true}, то @code{isolate (expr, var)} 
1352 исследует показатели атомов (таких как @code{%e}), которые содержат @code{var}.
1354 @c NEED EXAMPLES HERE
1356 @opencatbox{Категории:}
1357 @category{Выражения}
1358 @closecatbox
1360 @end defvr
1362 @defvr {Управляющая переменная} exptsubst
1363 Значение по умолчанию: @code{false}
1365 Если @code{exptsubst} равно @code{true}, то позволяется выполнять подстановки, такие как @code{y}
1366 для @code{%e^x} в @code{%e^(a x)}.
1368 @c NEED EXAMPLES HERE
1370 @opencatbox{Категории:}
1371 @category{Экспоненциальные и логарифмические функции}
1372 @category{Выражения}
1373 @closecatbox
1375 @end defvr
1377 @deffn {Функция} freeof (@var{x_1}, ..., @var{x_n}, @var{expr})
1378 @code{freeof (@var{x_1}, @var{expr})}
1379 Возвращает @code{true}, если никакое подвыражение @var{expr} не равно @var{x_1}
1380 или если @var{x_1} возникает только как немая переменная в
1381 @var{expr}, иначе возвращает @code{false}.
1383 @code{freeof (@var{x_1}, ..., @var{x_n}, @var{expr})}
1384 эквивалентно @code{freeof (@var{x_1}, @var{expr}) and ... and freeof (@var{x_n}, @var{expr})}.
1386 Аргументы @var{x_1}, ..., @var{x_n} 
1387 могут быть именами функций или переменных, именами с индексами,
1388 операторами (заключенными в двойные кавычки) или выражениями общего вида.
1389 @code{freeof} вычисляет свои аргументы.
1391 @code{freeof} действует только на @var{expr} в том виде, в как оно есть, 
1392 (после упрощения и вычисления) и
1393 не пытается определить, может ли некоторое эквивалентное выражение дать другой результат.
1394 В частности, упрощение может давать эквивалентное, но другое выражение, которое
1395 содержит некоторые различные элементы чем исходная форма @var{expr}.
1397 Переменная является немой переменной в некотором выражении, если она не имеет значения за пределами выражения.
1398 Немые переменные, распознаваемые @code{freeof}, есть
1399 индекс суммы или произведения, переменная предела в @code{limit},
1400 переменная интегрирования в определенном интеграле @code{integrate},
1401 исходная переменная в @code{laplace},
1402 формальные переменные в выражениях @code{at}
1403 и аргументы в @code{lambda} выражениях.
1404 Локальные переменные в @code{block} не распознаются @code{freeof} как немые 
1405 переменные. Это ошибка.
1407 Неопределенное интегрирование @code{integrate} @i{не} свободно от 
1408 переменной интегрирования.
1410 @itemize @bullet
1411 @item
1412 Аргументы есть имена функций, переменные, имена с индексами, операторы и выражения.
1413 @code{freeof (a, b, expr)} эквивалентно 
1414 @code{freeof (a, expr) and freeof (b, expr)}.
1416 @example
1417 (%i1) expr: z^3 * cos (a[1]) * b^(c+d);
1418                                  d + c  3
1419 (%o1)                   cos(a ) b      z
1420                              1
1421 (%i2) freeof (z, expr);
1422 (%o2)                         false
1423 (%i3) freeof (cos, expr);
1424 (%o3)                         false
1425 (%i4) freeof (a[1], expr);
1426 (%o4)                         false
1427 (%i5) freeof (cos (a[1]), expr);
1428 (%o5)                         false
1429 (%i6) freeof (b^(c+d), expr);
1430 (%o6)                         false
1431 (%i7) freeof ("^", expr);
1432 (%o7)                         false
1433 (%i8) freeof (w, sin, a[2], sin (a[2]), b*(c+d), expr);
1434 (%o8)                         true
1435 @end example
1437 @item
1438 @code{freeof} вычисляет свои аргументы.
1440 @example
1441 (%i1) expr: (a+b)^5$
1442 (%i2) c: a$
1443 (%i3) freeof (c, expr);
1444 (%o3)                         false
1445 @end example
1447 @item
1448 @code{freeof} не учитывает эквивалентные выражения.
1449 Упрощение может дать эквивалентное, но отличное выражение.
1451 @example
1452 (%i1) expr: (a+b)^5$
1453 (%i2) expand (expr);
1454           5        4       2  3       3  2      4      5
1455 (%o2)    b  + 5 a b  + 10 a  b  + 10 a  b  + 5 a  b + a
1456 (%i3) freeof (a+b, %);
1457 (%o3)                         true
1458 (%i4) freeof (a+b, expr);
1459 (%o4)                         false
1460 (%i5) exp (x);
1461                                  x
1462 (%o5)                          %e
1463 (%i6) freeof (exp, exp (x));
1464 (%o6)                         true
1465 @end example
1467 @item Суммирование или определенный интеграл свободно от своих немых переменных.
1468 Неопределенный интеграл не свободен от своей переменной интегрирования.
1470 @example
1471 (%i1) freeof (i, 'sum (f(i), i, 0, n));
1472 (%o1)                         true
1473 (%i2) freeof (x, 'integrate (x^2, x, 0, 1));
1474 (%o2)                         true
1475 (%i3) freeof (x, 'integrate (x^2, x));
1476 (%o3)                         false
1477 @end example
1478 @end itemize
1480 @opencatbox{Категории:}
1481 @category{Выражения}
1482 @closecatbox
1484 @end deffn
1486 @c IS THIS DEFINITION CORRECT ??
1487 @deffn {Функция} genfact (@var{x}, @var{y}, @var{z})
1488 Возвращает обобщенный факториал, заданный как
1489 @code{x (x-z) (x - 2 z) ... (x - (y - 1) z)}. Таким образом, для целого @var{x},
1490 @code{genfact (x, x, 1) = x!} и @code{genfact (x, x/2, 2) = x!!}.
1492 @opencatbox{Категории:}
1493 @category{Гамма функция и факториал}
1494 @closecatbox
1496 @end deffn
1498 @deffn {Функция} imagpart (@var{expr})
1499 Возвращает мнимую часть выражения @var{expr}.
1501 @code{imagpart} есть вычислительная функция,
1502 а не функция упрощения.
1503 @c PROBABLY NEED TO EXPLAIN IMPLICATIONS OF ABOVE STATEMENT
1504 @c SEE ALSO SF BUG REPORT # 902290
1506 См. также @code{abs}, @code{carg}, @code{polarform}, @code{rectform}
1507 и @code{realpart}.
1509 @c NEED EXAMPLES HERE
1511 @opencatbox{Категории:}
1512 @category{Комплексные переменные}
1513 @closecatbox
1515 @end deffn
1517 @anchor{infix}
1518 @deffn {Функция} infix (@var{op})
1519 @deffnx {Функция} infix (@var{op}, @var{lbp}, @var{rbp})
1520 @deffnx {Функция} infix (@var{op}, @var{lbp}, @var{rbp}, @var{lpos}, @var{rpos}, @var{pos})
1521 Объявляет @var{op} инфиксным оператором.
1522 Инфиксный оператор есть функция двух аргументов,
1523 с именем функции, записанным между этими аргументами.
1524 Например, оператор вычитания @code{-} есть инфиксный оператор.
1526 @code{infix (@var{op})} объявляет @var{op} инфиксным оператором
1527 со степенями связывания по умолчанию (левая и правая, обе равны 180)
1528 и частями речи по умолчанию (левая и правая, обе равны @code{any}).
1529 @c HOW IS pos DIFFERENT FROM lpos AND rpos ??
1531 @code{infix (@var{op}, @var{lbp}, @var{rbp})} объявляет @var{op} инфиксным оператором
1532 с указанными левой и правой степени связывания 
1533 и частями речи по умолчанию (левая и правая, обе равны @code{any}).
1535 @code{infix (@var{op}, @var{lbp}, @var{rbp}, @var{lpos}, @var{rpos}, @var{pos})} объявляет @var{op} инфиксным оператором
1536 с указанными левой и правой степенями связывания и частями речи
1537 @var{lpos}, @var{rpos} и @var{pos} для левого операнда, правого операнда и результата
1538 соответственно.
1540 Термин "часть речи" по отношению к объявлению операторов, означает тип выражения.
1541 Различается три типа: @code{expr}, @code{clause} и @code{any},
1542 которые означают алгебраическое выражение, логическое выражение и выражение
1543 произвольного типа соответственно.
1544 Maxima может обнаружить некоторые синтаксические ошибки, сравнивая
1545 объявленные для оператора части речи с актуальными выражениями.
1547 Приоритет @var{op} по отношению к другим операторам
1548 выводится из левой и правой степеней связывания рассматриваемых операторов.
1549 Если левые и правые степени связывания @var{op} обе больше
1550 левых и правых степеней связывания другого оператора,
1551 то @var{op} имеет более высокий приоритет чем этот оператор.
1552 Если степени связывания обе не больше или меньше,
1553 то имеют место некоторые более сложные соотношения.
1555 Ассоциативность @var{op} зависит от его степени связывания.
1556 Большая левая степень связывания (@var{lbp}) означает, что  
1557 @var{op} вычисляется до других операторов, стоящих слева от него в выражении,
1558 в то время как большая правая степень связывания (@var{rbp}) означает, что 
1559 @var{op} вычисляется до других операторов, стоящих справа от него в выражении.
1560 Таким образом, большее @var{lbp} делает @var{op} право-ассоциативным,
1561 в то время как большее @var{rbp} делает @var{op} лево-ассоциативным.
1562 Если @var{lbp} равно @var{rbp}, то @var{op} является лево-ассоциативный.
1564 См. также @code{Syntax}.
1566 Примеры:
1568 @itemize @bullet
1569 @item
1570 Если левые и правые степени связывания @var{op} обе больше
1571 левых и правых степеней связывания другого оператора,
1572 то @var{op} имеет более высокий приоритет чем этот оператор.
1573 @end itemize
1574 @example
1575 (%i1) "@@"(a, b) := sconcat("(", a, ",", b, ")")$
1576 (%i2) :lisp (get '$+ 'lbp)
1578 (%i2) :lisp (get '$+ 'rbp)
1580 (%i2) infix ("@@", 101, 101)$
1581 (%i3) 1 + a@@b + 2;
1582 (%o3)                       (a,b) + 3
1583 (%i4) infix ("@@", 99, 99)$
1584 (%i5) 1 + a@@b + 2;
1585 (%o5)                       (a+1,b+2)
1586 @end example
1588 @itemize @bullet
1589 @item
1590 Большее @var{lbp} делает @var{op} право-ассоциативным,
1591 в том время как большее @var{rbp} делает @var{op} лево-ассоциативным.
1592 @end itemize
1593 @example
1594 (%i1) "@@"(a, b) := sconcat("(", a, ",", b, ")")$
1595 (%i2) infix ("@@", 100, 99)$
1596 (%i3) foo @@ bar @@ baz;
1597 (%o3)                    (foo,(bar,baz))
1598 (%i4) infix ("@@", 100, 101)$
1599 (%i5) foo @@ bar @@ baz;
1600 (%o5)                    ((foo,bar),baz)
1601 @end example
1603 Maxima может обнаружить некоторые синтаксические ошибки, сравнивая
1604 объявленные для оператора части речи с актуальными выражениями.
1606 @c ===beg===
1607 @c infix ("##", 100, 99, expr, expr, expr);
1608 @c if x ## y then 1 else 0;
1609 @c infix ("##", 100, 99, expr, expr, clause);
1610 @c if x ## y then 1 else 0;
1611 @c ===end===
1612 @example
1613 (%i1) infix ("##", 100, 99, expr, expr, expr);
1614 (%o1)                          ##
1615 (%i2) if x ## y then 1 else 0;
1616 Incorrect syntax: Found algebraic expression where logical expression expected
1617 if x ## y then 
1618              ^
1619 (%i2) infix ("##", 100, 99, expr, expr, clause);
1620 (%o2)                          ##
1621 (%i3) if x ## y then 1 else 0;
1622 (%o3)                if x ## y then 1 else 0
1623 @end example
1625 @opencatbox{Категории:}
1626 @category{Операторы}
1627 @category{Факты и выводы}
1628 @category{Синтаксис}
1629 @closecatbox
1631 @end deffn
1633 @defvr {Управляющая переменная} inflag
1634 Значение по умолчанию: @code{false}
1636 Когда @code{inflag} есть @code{true}, функции для извлечения частей 
1637 выражения работает с внутренней формой @code{expr}.
1639 Заметим, что упрощатель переупорядочивает выражения.
1640 Таким образом, @code{first (x + y)} возвращает @code{x} если @code{inflag}
1641 есть @code{true}, и @code{y}, если @code{inflag} есть @code{false}
1642 (@code{first (y + x)} дает те же результаты.)
1644 Также, установка @code{inflag} равным @code{true} и вызов @code{part} или @code{substpart} есть 
1645 тоже самое, что вызов @code{inpart} или @code{substinpart}.
1647 Функции, на которые влияет значение @code{inflag}:
1648 @code{part}, @code{substpart}, @code{first}, @code{rest}, @code{last}, @code{length},
1649 конструкция @code{for} ... @code{in},
1650 @code{map}, @code{fullmap}, @code{maplist}, @code{reveal} и @code{pickapart}.
1652 @c NEED EXAMPLES HERE
1654 @opencatbox{Категории:}
1655 @category{Выражения}
1656 @closecatbox
1658 @end defvr
1660 @c NEEDS WORK
1661 @deffn {Функция} inpart (@var{expr}, @var{n_1}, ..., @var{n_k})
1662 аналогична @code{part}, но работает с внутренним
1663 представлением выражения, а не с выводимой формой, и,
1664 таким образом, может быть быстрее, так как форматирование не выполняется.
1665 Нужно быть осторожным  
1666 по отношению к порядку подвыражений в суммах и произведениях
1667 (так как этот порядок переменных в внутренней форме часто отличается
1668 от порядка в выводимой форме) и в работе с унарным минусом,
1669 вычитанием и делением (так как эти операторы удаляются из 
1670 выражения). @code{part (x+y, 0)} или @code{inpart (x+y, 0)} дает @code{+}, 
1671 хотя для ссылки на оператор он должен быть заключен в двойные кавычки. 
1672 Например @code{... if inpart (%o9,0) = "+" then ...}.
1674 Примеры:
1676 @example
1677 (%i1) x + y + w*z;
1678 (%o1)                      w z + y + x
1679 (%i2) inpart (%, 3, 2);
1680 (%o2)                           z
1681 (%i3) part (%th (2), 1, 2);
1682 (%o3)                           z
1683 (%i4) 'limit (f(x)^g(x+1), x, 0, minus);
1684                                   g(x + 1)
1685 (%o4)                 limit   f(x)
1686                       x -> 0-
1687 (%i5) inpart (%, 1, 2);
1688 (%o5)                       g(x + 1)
1689 @end example
1691 @opencatbox{Категории:}
1692 @category{Выражения}
1693 @closecatbox
1695 @end deffn
1697 @c NEEDS WORK
1698 @deffn {Функция} isolate (@var{expr}, @var{x})
1699 Возвращает @var{expr} с подвыражениями, которые есть суммы, и
1700 которые не содержат переменную @var{var}, замененные метками промежуточных выражений
1701 (атомарными символами, такими как @code{%t1}, @code{%t2}, ...).  Это часто бывает полезно, 
1702 чтобы избежать ненужного раскрытия подвыражений, которые не содержат
1703 интересующих переменных. Так как данные метки промежуточных выражений имеют подвыражения
1704 в качестве своих значений, то они могут быть подставлены обратно вычислением этого
1705 выражения.
1707 Если @code{exptisolate} (значение по умолчанию: @code{false}) равно @code{true},  
1708 то @code{isolate} исследует показатели атомов (таких как @code{%e}), 
1709 которые содержат переменную @var{var}.
1711 Если @code{isolate_wrt_times} равно @code{true}, то @code{isolate} изолирует 
1712 также по отношению к произведениям. См. @code{isolate_wrt_times}.
1714 Выполните @code{example (isolate)} для других примеров.
1716 @opencatbox{Категории:}
1717 @category{Выражения}
1718 @closecatbox
1720 @end deffn
1722 @c NEEDS WORK
1723 @defvr {Управляющая переменная} isolate_wrt_times
1724 Значение по умолчанию: @code{false}
1726 Когда @code{isolate_wrt_times} равно @code{true}, то @code{isolate}
1727 также изолирует по отношению к произведениям. Например, сравнивает обе установки 
1729 @example
1730 (%i1) isolate_wrt_times: true$
1731 (%i2) isolate (expand ((a+b+c)^2), c);
1733 (%t2)                          2 a
1736 (%t3)                          2 b
1739                           2            2
1740 (%t4)                    b  + 2 a b + a
1742                      2
1743 (%o4)               c  + %t3 c + %t2 c + %t4
1744 (%i4) isolate_wrt_times: false$
1745 (%i5) isolate (expand ((a+b+c)^2), c);
1746                      2
1747 (%o5)               c  + 2 b c + 2 a c + %t4
1748 @end example
1750 @opencatbox{Категории:}
1751 @category{Выражения}
1752 @closecatbox
1754 @end defvr
1756 @c NEEDS EXAMPLES
1757 @defvr {Управляющая переменная} listconstvars
1758 Значение по умолчанию: @code{false}
1760 Когда @code{listconstvars} есть @code{true}, то в список,
1761 возвращаемый @code{listofvars}, включаются @code{%e}, @code{%pi}, @code{%i} и
1762 другие переменные, объявленные константами.
1763 По умолчанию они опускаются.
1765 @opencatbox{Категории:}
1766 @category{Выражения}
1767 @closecatbox
1769 @end defvr
1771 @defvr {Управляющая переменная} listdummyvars
1772 Значение по умолчанию: @code{true}
1774 Когда @code{listdummyvars} есть @code{false}, "немые переменные" в 
1775 выражении не будут включаться в список, возвращаемый @code{listofvars}.
1776 (Смысл "немых переменных" тот же, что и в @code{freeof}.
1777 "Немые переменные" -- это математические объекты, такие 
1778 как индекс суммы или произведения, переменная предела и переменная интегрирования
1779 в определенном интеграле).
1781 Пример:
1783 @example
1784 (%i1) listdummyvars: true$
1785 (%i2) listofvars ('sum(f(i), i, 0, n));
1786 (%o2)                        [i, n]
1787 (%i3) listdummyvars: false$
1788 (%i4) listofvars ('sum(f(i), i, 0, n));
1789 (%o4)                          [n]
1790 @end example
1792 @opencatbox{Категории:}
1793 @category{Выражения}
1794 @closecatbox
1796 @end defvr
1798 @c NEEDS WORK
1799 @deffn {Функция} listofvars (@var{expr})
1800 Возвращает список переменных в @var{expr}.
1802 Когда @code{listconstvars} есть @code{true}, то в список,
1803 возвращаемый @code{listofvars}, включаются @code{%e}, @code{%pi}, @code{%i} и
1804 другие переменные, объявленные константами.
1805 По умолчанию они опускаются.
1807 @example
1808 (%i1) listofvars (f (x[1]+y) / g^(2+a));
1809 (%o1)                     [g, a, x , y]
1810                                   1
1811 @end example
1813 @opencatbox{Категории:}
1814 @category{Выражения}
1815 @closecatbox
1817 @end deffn
1819 @c NEEDS WORK
1820 @deffn {Функция} lfreeof (@var{list}, @var{expr})
1821 Для каждого члена @var{m} списка @var{list}, вызывает @code{freeof (@var{m}, @var{expr})}.
1822 Возвращает @code{false}, если какой либо из вызовов @code{freeof} дает @code{false}, 
1823 иначе возвращает @code{true}.
1825 @opencatbox{Категории:}
1826 @category{Выражения}
1827 @closecatbox
1829 @end deffn
1831 @deffn {Функция} lopow (@var{expr}, @var{x})
1832 Возвращает наименьший показатель степени @var{x}, который явно присутствует 
1833 в @var{expr}. Таким образом,
1835 @example
1836 (%i1) lopow ((x+y)^2 + (x+y)^a, x+y);
1837 (%o1)                       min(a, 2)
1838 @end example
1840 @opencatbox{Категории:}
1841 @category{Выражения}
1842 @closecatbox
1844 @end deffn
1846 @c NEEDS WORK
1847 @deffn {Функция} lpart (@var{label}, @var{expr}, @var{n_1}, ..., @var{n_k})
1848 Аналогично @code{dpart}, но использует 
1849 помеченный бокс. Помеченный бокс аналогичен боксу сделанному с помощью 
1850 @code{dpart}, но имеет имя в верхней строке.
1852 @opencatbox{Категории:}
1853 @category{Выражения}
1854 @closecatbox
1856 @end deffn
1858 @c NEEDS WORK
1859 @deffn {Функция} multthru (@var{expr})
1860 @deffnx {Функция} multthru (@var{expr_1}, @var{expr_2})
1861 Умножает множитель @var{expr} (который должен быть суммой) на
1862 другие множители @var{expr}. То есть, @var{expr} есть 
1863 @code{@var{f_1} @var{f_2} ... @var{f_n}},
1864 где по крайней мере
1865 один множитель, скажем @var{f_i}, есть сумма членов.  Каждый член 
1866 в той сумме умножается на остальные множители в этом произведении. 
1867 (А именно на все множители, за исключением @var{f_i}).  @code{multthru} 
1868 не раскрывает суммы, возведенные в степень.
1869 Эта функция есть самый быстрый способ распространять произведения (коммутативные
1870 или некоммутативные) на суммы. Так как дроби представляются как
1871 произведения, то @code{multthru} может также использоваться для деления сумм 
1872 на произведения.
1874 @code{multthru (@var{expr_1}, @var{expr_2})} умножает каждый член в @var{expr_2} 
1875 (который должен быть суммой или уравнением) на @var{expr_1}.
1876 Если @var{expr_1} сам по себе не является суммой, то эта
1877 форма эквивалентна @code{multthru (@var{expr_1}*@var{expr_2})}.
1879 @example
1880 (%i1) x/(x-y)^2 - 1/(x-y) - f(x)/(x-y)^3;
1881                       1        x         f(x)
1882 (%o1)             - ----- + -------- - --------
1883                     x - y          2          3
1884                             (x - y)    (x - y)
1885 (%i2) multthru ((x-y)^3, %);
1886                            2
1887 (%o2)             - (x - y)  + x (x - y) - f(x)
1888 (%i3) ratexpand (%);
1889                            2
1890 (%o3)                   - y  + x y - f(x)
1891 (%i4) ((a+b)^10*s^2 + 2*a*b*s + (a*b)^2)/(a*b*s^2);
1892                         10  2              2  2
1893                  (b + a)   s  + 2 a b s + a  b
1894 (%o4)            ------------------------------
1895                                   2
1896                              a b s
1897 (%i5) multthru (%);  /* note that this does not expand (b+a)^10 */
1898                                         10
1899                        2   a b   (b + a)
1900 (%o5)                  - + --- + ---------
1901                        s    2       a b
1902                            s
1903 (%i6) multthru (a.(b+c.(d+e)+f));
1904 (%o6)            a . f + a . c . (e + d) + a . b
1905 (%i7) expand (a.(b+c.(d+e)+f));
1906 (%o7)         a . f + a . c . e + a . c . d + a . b
1907 @end example
1909 @opencatbox{Категории:}
1910 @category{Выражения}
1911 @closecatbox
1913 @end deffn
1915 @c NEEDS WORK
1916 @deffn {Функция} nounify (@var{f})
1917 Возвращает невычисляемую форму функции с именем @var{f}. Это 
1918 необходимо, если требуется представить имя вычисляемой функции так, 
1919 если бы она была невычисляемой.  Заметим, что некоторые вычисляемые функции  
1920 возвращают их невычисляемые формы,
1921 если они не могут быть вычислены для определенных значений аргументов.  
1922 Невычисляемая форма возвращается также в случае, если перед функцией стоит кавычка.
1924 @opencatbox{Категории:}
1925 @category{Невычисляемые и вычисляемые формы}
1926 @closecatbox
1928 @end deffn
1930 @c NEEDS WORK
1931 @deffn {Функция} nterms (@var{expr})
1932 Возвращает число членов, которое выражение @var{expr} имело бы, если оно было бы
1933 полностью раскрыто и не возникло бы сокращений или комбинаций членов.
1934 Заметим, что выражения такие как @code{sin (@var{expr})}, @code{sqrt (@var{expr})}, @code{exp (@var{expr})} и др.
1935 считаются только как один член, вне независимости от того, как много членов @var{expr} имеет (если оно сумма).
1937 @opencatbox{Категории:}
1938 @category{Выражения}
1939 @closecatbox
1941 @end deffn
1943 @c NEEDS WORK
1944 @deffn {Функция} op (@var{expr})
1945 Возвращает главный оператор выражения @var{expr}.
1946 @code{op (@var{expr})} эквивалентно @code{part (@var{expr}, 0)}. 
1948 @code{op} возвращает строку, если главный оператор 
1949 встроенный или определенный пользователем префиксный, 
1950 бинарный или n-арный инфиксный, постфиксный, матчфиксный 
1951 или безфиксный оператор.
1952 Иначе @code{op} возвращает символ.
1954 @code{op} следит за значением глобального флага @code{inflag}.
1956 @code{op} вычисляет свой аргумент.
1958 См. также @code{args}.
1960 Примеры:
1962 @c ===beg===
1963 @c stringdisp: true$
1964 @c op (a * b * c);
1965 @c op (a * b + c);
1966 @c op ('sin (a + b));
1967 @c op (a!);
1968 @c op (-a);
1969 @c op ([a, b, c]);
1970 @c op ('(if a > b then c else d));
1971 @c op ('foo (a));
1972 @c prefix (foo);
1973 @c op (foo a);
1974 @c ===end===
1976 @example
1977 (%i1) stringdisp: true$
1978 (%i2) op (a * b * c);
1979 (%o2)                          "*"
1980 (%i3) op (a * b + c);
1981 (%o3)                          "+"
1982 (%i4) op ('sin (a + b));
1983 (%o4)                          sin
1984 (%i5) op (a!);
1985 (%o5)                          "!"
1986 (%i6) op (-a);
1987 (%o6)                          "-"
1988 (%i7) op ([a, b, c]);
1989 (%o7)                          "["
1990 (%i8) op ('(if a > b then c else d));
1991 (%o8)                         "if"
1992 (%i9) op ('foo (a));
1993 (%o9)                          foo
1994 (%i10) prefix (foo);
1995 (%o10)                        "foo"
1996 (%i11) op (foo a);
1997 (%o11)                        "foo"
1998 @end example
2000 @opencatbox{Категории:}
2001 @category{Выражения}
2002 @category{Операторы}
2003 @closecatbox
2005 @end deffn
2007 @c NEEDS WORK
2008 @deffn {Функция} operatorp (@var{expr}, @var{op})
2009 @deffnx {Функция} operatorp (@var{expr}, [@var{op_1}, ..., @var{op_n}])
2011 @code{operatorp (@var{expr}, @var{op})} возвращает @code{true},
2012 если @var{op} равен оператору @var{expr}.
2014 @code{operatorp (@var{expr}, [@var{op_1}, ..., @var{op_n}])} возвращает @code{true},
2015 если какой-нибудь элемент @var{op_1}, ..., @var{op_n} равен оператору @var{expr}.
2017 @opencatbox{Категории:}
2018 @category{Функции предикаты}
2019 @category{Операторы}
2020 @closecatbox
2022 @end deffn
2024 @c NEEDS WORK
2025 @deffn {Функция} optimize (@var{expr})
2026 Возвращает выражение, которое выдает тоже самое значение и
2027 побочные эффекты, как и @var{expr}, но выполняется более 
2028 эффективно за счет устранения лишних повторных вычислений
2029 общих подвыражений. @code{optimize} также имеет побочный 
2030 эффект "сворачивания" своего аргумента так что все общие
2031 подвыражения используются совместно.
2032 Выполните @code{example (optimize)} для примеров.
2034 @opencatbox{Категории:}
2035 @category{Выражения}
2036 @closecatbox
2038 @end deffn
2040 @defvr {Управляющая переменная} optimprefix
2041 Значение по умолчанию: @code{%}
2043 @code{optimprefix} это префикс, используемый для генерации символов 
2044 командой @code{optimize}.
2046 @opencatbox{Категории:}
2047 @category{Выражения}
2048 @closecatbox
2050 @end defvr
2052 @c NEEDS WORK
2053 @c WHAT DOES ">" MEAN IN THIS CONTEXT ??
2054 @deffn {Функция} ordergreat (@var{v_1}, ..., @var{v_n})
2055 Устанавливает синонимы для переменных @var{v_1}, ..., @var{v_n},
2056 такие, что @var{v_1} > @var{v_2} > ...  > @var{v_n},
2057 и @var{v_n} > любой другой переменной, не включенной в аргументы.
2059 См. также @code{orderless}.
2061 @opencatbox{Категории:}
2062 @category{Выражения}
2063 @closecatbox
2065 @end deffn
2067 @c NEEDS WORK
2068 @c WHAT DOES "PRECEDES" MEAN IN THIS CONTEXT ??
2069 @deffn {Функция} ordergreatp (@var{expr_1}, @var{expr_2})
2070 Возвращает @code{true}, если @var{expr_2} предшествует @var{expr_1} в 
2071 упорядочивании, установленном с помощью функции @code{ordergreat}.
2073 @opencatbox{Категории:}
2074 @category{Выражения}
2075 @category{Функции предикаты}
2076 @closecatbox
2078 @end deffn
2080 @c NEEDS WORK
2081 @c WHAT DOES "<" MEAN IN THIS CONTEXT
2082 @deffn {Функция} orderless (@var{v_1}, ..., @var{v_n})
2083 Устанавливает синонимы для переменных @var{v_1}, ..., @var{v_n},
2084 такие, что @var{v_1} < @var{v_2} < ...  < @var{v_n},
2085 и @var{v_n} < любой другой переменная, не включенной в аргументы.
2087 @c EXPRESS THIS ORDER IN A MORE COMPREHENSIBLE FASHION
2088 Таким образом, полная шкала упорядочивания такова: 
2089 численные константы < объявленные константы < объявленные скаляры < первый аргумент @code{orderless} <
2090 ...  < последний аргумент @code{orderless} < переменные, которые начинаются 
2091 с A < ...
2092 < переменные, которые начинаются с Z < последний аргумент @code{ordergreat} <
2093  ... < первый аргумент @code{ordergreat} < объявленные главные переменные @code{mainvar}.
2095 См. также @code{ordergreat} и @code{mainvar}.
2097 @opencatbox{Категории:}
2098 @category{Выражения}
2099 @closecatbox
2101 @end deffn
2103 @c NEEDS WORK
2104 @c WHAT DOES "PRECEDES" MEAN IN THIS CONTEXT ??
2105 @deffn {Функция} orderlessp (@var{expr_1}, @var{expr_2})
2106 Возвращает @code{true}, если @var{expr_1} предшествует @var{expr_2} в 
2107 упорядочивании, установленном командой @code{orderless}.
2109 @opencatbox{Категории:}
2110 @category{Выражения}
2111 @category{Функции предикаты}
2112 @closecatbox
2114 @end deffn
2116 @c NEEDS WORK
2117 @deffn {Функция} part (@var{expr}, @var{n_1}, ..., @var{n_k})
2118 Возвращает части внешней формы @code{expr}. Функция
2119 получает часть @code{expr}, которая определена индексами @var{n_1}, ..., @var{n_k}.  
2120 Когда первая
2121 часть @var{n_1} @code{expr} взята, берется часть @var{n_2} от нее и т.д. 
2122 Результат есть
2123 часть @var{n_k} от ... части @var{n_2}, от части @var{n_1} выражения @code{expr}.
2125 @code{part} может быть использована для того, чтобы получить элемент списка,
2126 строку матрицы и т.п.
2128 @c "If the last argument to a part function" => FOLLOWING APPLIES TO OTHER FUNCTIONS ??
2129 @c ATTEMPT TO VERIFY; IF SO, COPY THIS COMMENTARY TO DESCRIPTIONS OF OTHER FUNCTIONS
2130 Если последний аргумент функции @code{part} есть список индексов, то
2131 выбираются несколько подвыражений, каждое из которых соответствует 
2132 индексу в списке. Таким образом, @code{part (x + y + z, [1, 3])} есть @code{z+x}.
2134 @code{piece} запоминает последнее выражение, выбранное при использовании 
2135 функции @code{part}. Оно доступно во время выполнения этой функция и, таким образом,
2136 может быть использовано в самой функции, как показано ниже.
2138 Если @code{partswitch} установлен равным @code{true}, то @code{end} возвращается 
2139 когда выбранная часть выражения не существует, иначе выдается сообщение об 
2140 ошибке.
2142 @c NEED "SEE ALSO" POINTING TO ALL OTHER PART FUNCTIONS
2144 Пример: @code{part (z+2*y, 2, 1)} дает 2.
2146 @c MERGE IN example (part) OUTPUT HERE
2147 @code{example (part)} показывает дополнительные примеры.
2149 @opencatbox{Категории:}
2150 @category{Выражения}
2151 @closecatbox
2153 @end deffn
2155 @c NEEDS WORK
2156 @deffn {Функция} partition (@var{expr}, @var{x})
2157 Возвращает список из двух выражений.  Они есть (1)
2158 множители @var{expr} (если оно произведение), члены @var{expr} 
2159 (если оно является суммой), или список (если оно является списком), которые 
2160 не содержит @var{x} и, (2) те множители, члены или список, которые  содержат.
2162 @example
2163 (%i1) partition (2*a*x*f(x), x);
2164 (%o1)                     [2 a, x f(x)]
2165 (%i2) partition (a+b, x);
2166 (%o2)                      [b + a, 0]
2167 (%i3) partition ([a, b, f(a), c], a); 
2168 (%o3)                  [[b, c], [a, f(a)]]
2169 @end example
2171 @opencatbox{Категории:}
2172 @category{Выражения}
2173 @closecatbox
2175 @end deffn
2177 @c NEEDS EXAMPLE
2178 @defvr {Управляющая переменная} partswitch
2179 Значение по умолчанию: @code{false}
2181 Когда @code{partswitch} есть @code{true}, то @code{end} возвращается,
2182 если выбранная часть выражения не существует, иначе выдается сообщение
2183 об ошибке.
2185 @opencatbox{Категории:}
2186 @category{Выражения}
2187 @closecatbox
2189 @end defvr
2191 @anchor{pickapart}
2192 @deffn {Функция} pickapart (@var{expr}, @var{n})
2193 Присваивает меткам промежуточных выражений все подвыражения 
2194 @var{expr} глубины @var{n} (целое число).
2195 Подвыражения большей или меньшей глубин меткам не присваиваются.
2196 @code{pickapart} возвращает выражение в терминах промежуточных выражений
2197 эквивалентное исходному @var{expr}.
2199 См. также @code{part}, @code{dpart}, @code{lpart}, @code{inpart} и @code{reveal}.
2201 Примеры:
2203 @example
2204 (%i1) expr: (a+b)/2 + sin (x^2)/3 - log (1 + sqrt(x+1));
2205                                           2
2206                                      sin(x )   b + a
2207 (%o1)       - log(sqrt(x + 1) + 1) + ------- + -----
2208                                         3        2
2209 (%i2) pickapart (expr, 0);
2211                                           2
2212                                      sin(x )   b + a
2213 (%t2)       - log(sqrt(x + 1) + 1) + ------- + -----
2214                                         3        2
2216 (%o2)                          %t2
2217 (%i3) pickapart (expr, 1);
2219 (%t3)                - log(sqrt(x + 1) + 1)
2222                                   2
2223                              sin(x )
2224 (%t4)                        -------
2225                                 3
2228                               b + a
2229 (%t5)                         -----
2230                                 2
2232 (%o5)                    %t5 + %t4 + %t3
2233 (%i5) pickapart (expr, 2);
2235 (%t6)                 log(sqrt(x + 1) + 1)
2238                                   2
2239 (%t7)                        sin(x )
2242 (%t8)                         b + a
2244                          %t8   %t7
2245 (%o8)                    --- + --- - %t6
2246                           2     3
2247 (%i8) pickapart (expr, 3);
2249 (%t9)                    sqrt(x + 1) + 1
2252                                 2
2253 (%t10)                         x
2255                   b + a              sin(%t10)
2256 (%o10)            ----- - log(%t9) + ---------
2257                     2                    3
2258 (%i10) pickapart (expr, 4);
2260 (%t11)                     sqrt(x + 1)
2262                       2
2263                  sin(x )   b + a
2264 (%o11)           ------- + ----- - log(%t11 + 1)
2265                     3        2
2266 (%i11) pickapart (expr, 5);
2268 (%t12)                        x + 1
2270                    2
2271               sin(x )   b + a
2272 (%o12)        ------- + ----- - log(sqrt(%t12) + 1)
2273                  3        2
2274 (%i12) pickapart (expr, 6);
2275                   2
2276              sin(x )   b + a
2277 (%o12)       ------- + ----- - log(sqrt(x + 1) + 1)
2278                 3        2
2279 @end example
2281 @opencatbox{Категории:}
2282 @category{Выражения}
2283 @closecatbox
2285 @end deffn
2287 @c NEEDS WORK
2288 @defvr {Системная переменная} piece
2289 Содержит последнее выражение, выбранное при использовании функции @code{part}.
2290 @c WHAT DOES THIS MEAN EXACTLY ??
2291 Оно доступно во время выполнения функции и, таким образом,
2292 может быть в ней использовано.
2294 @c NEED "SEE ALSO" TO POINT TO LIST OF ALL RELEVANT FUNCTIONS
2296 @opencatbox{Категории:}
2297 @category{Выражения}
2298 @closecatbox
2300 @end defvr
2302 @c NEEDS EXAMPLES
2303 @deffn {Функция} polarform (@var{expr})
2304 Возвращает выражение @code{r %e^(%i theta)} эквивалентное @var{expr},
2305 такое, что @code{r} и @code{theta} чисто вещественные.
2307 @opencatbox{Категории:}
2308 @category{Комплексные переменные}
2309 @category{Экспоненциальные и логарифмические функции}
2310 @closecatbox
2312 @end deffn
2314 @c ISN'T THERE AN EQUIVALENT FUNCTION SOMEWHERE ??
2315 @c NEEDS WORK (IF KEPT)
2316 @deffn {Функция} powers (@var{expr}, @var{x})
2317 Выдает степени @var{x}, встречающиеся в @var{expr}.
2319 @code{load ("powers")} загружает эту функцию.
2320 @c HMM, THERE'S A BUNCH OF MAXIMA FUNCTIONS IN src/powers.lisp ...
2321 @c FOR SOME REASON src/powers.lisp IS NOT PART OF THE USUAL BUILD -- STRANGE
2323 @c HERE IS THE TEXT FROM archive/share/unknown/powers.usg -- MERGE !!!
2324 @c THIS FUNCTION IS A GENERALISATION OF "HIPOW" AND "LOPOW"
2325 @c IN THAT IT RETURNS A LIST OF ALL THE POWERS OF VAR OCCURING
2326 @c IN EXPR. IT IS STILL NECESSARY TO EXPAND EXPR BEFORE APPLYING
2327 @c POWERS (ON PAIN OF GETTING THE WRONG ANSWER).
2328 @c 
2329 @c THIS FUNCTION HAS MANY USES, E.G. IF YOU WANT TO FIND ALL
2330 @c THE COEFFICIENTS OF X IN A POLYNOMIAL POLY YOU CAN USE
2331 @c MAP(LAMBDA([POW],COEFF(POLY,X,POW)),POWERS(POLY,X));
2332 @c AND MANY OTHER SIMILAR USEFUL HACKS.
2334 @opencatbox{Категории:}
2335 @category{Выражения}
2336 @category{Многочлены}
2337 @closecatbox
2339 @end deffn
2341 @deffn {Функция} product (@var{expr}, @var{i}, @var{i_0}, @var{i_1})
2342 Представляет произведение значений @var{expr} с
2343 индексом @var{i}, меняющимся от @var{i_0} до @var{i_1}.
2344 Невычисляемая форма @code{'product} изображается как заглавная буква пи.
2346 @code{product} вычисляет @var{expr} и нижний и верхний пределы @var{i_0} и @var{i_1},
2347 @code{product} не вычисляет индекс @var{i}.
2349 Если верхний и нижний пределы различаются на целое число,
2350 @var{expr} вычисляется для каждого значения индекса @var{i},
2351 и результат есть точное произведение.
2353 Иначе, диапазон индекса является неопределенным.
2354 Для упрощения произведения применяются некоторые правила.
2355 Когда глобальная переменная @code{simpproduct} есть @code{true}, 
2356 применяются дополнительные правила.
2357 В некоторых случаях, упрощение дает результат, который не является произведением,
2358 иначе, результат есть невычисляемая форма @code{'product}.
2360 См. также @code{nouns} и @code{evflag}.
2362 Примеры:
2364 @c ===beg===
2365 @c product (x + i*(i+1)/2, i, 1, 4);
2366 @c product (i^2, i, 1, 7);
2367 @c product (a[i], i, 1, 7);
2368 @c product (a(i), i, 1, 7);
2369 @c product (a(i), i, 1, n);
2370 @c product (k, k, 1, n);
2371 @c product (k, k, 1, n), simpproduct;
2372 @c product (integrate (x^k, x, 0, 1), k, 1, n);
2373 @c product (if k <= 5 then a^k else b^k, k, 1, 10);
2374 @c ===end===
2376 @example
2377 (%i1) product (x + i*(i+1)/2, i, 1, 4);
2378 (%o1)           (x + 1) (x + 3) (x + 6) (x + 10)
2379 (%i2) product (i^2, i, 1, 7);
2380 (%o2)                       25401600
2381 (%i3) product (a[i], i, 1, 7);
2382 (%o3)                 a  a  a  a  a  a  a
2383                        1  2  3  4  5  6  7
2384 (%i4) product (a(i), i, 1, 7);
2385 (%o4)          a(1) a(2) a(3) a(4) a(5) a(6) a(7)
2386 (%i5) product (a(i), i, 1, n);
2387                              n
2388                            /===\
2389                             ! !
2390 (%o5)                       ! !  a(i)
2391                             ! !
2392                            i = 1
2393 (%i6) product (k, k, 1, n);
2394                                n
2395                              /===\
2396                               ! !
2397 (%o6)                         ! !  k
2398                               ! !
2399                              k = 1
2400 (%i7) product (k, k, 1, n), simpproduct;
2401 (%o7)                          n!
2402 (%i8) product (integrate (x^k, x, 0, 1), k, 1, n);
2403                              n
2404                            /===\
2405                             ! !    1
2406 (%o8)                       ! !  -----
2407                             ! !  k + 1
2408                            k = 1
2409 (%i9) product (if k <= 5 then a^k else b^k, k, 1, 10);
2410                               15  40
2411 (%o9)                        a   b
2412 @end example
2414 @opencatbox{Категории:}
2415 @category{Суммы и произведения}
2416 @closecatbox
2418 @end deffn
2420 @c NEEDS EXAMPLES
2421 @deffn {Функция} realpart (@var{expr})
2422 Возвращает вещественную часть @var{expr}. @code{realpart} и @code{imagpart} 
2423 будут работать для выражений, включающих тригонометрические и гипергеометрические функции,
2424 также как и квадратный корень, логарифм и возведение в степень.
2426 @opencatbox{Категории:}
2427 @category{Комплексные числа}
2428 @closecatbox
2430 @end deffn
2432 @c NEEDS EXAMPLES
2433 @deffn {Функция} rectform (@var{expr})
2434 Возвращает выражение @code{a + b %i}, эквивалентное @var{expr},
2435 такое, что @var{a} и @var{b} чисто вещественные.
2437 @opencatbox{Категории:}
2438 @category{Комплексные числа}
2439 @closecatbox
2441 @end deffn
2443 @deffn {Функция} rembox (@var{expr}, unlabelled)
2444 @deffnx {Функция} rembox (@var{expr}, @var{label})
2445 @deffnx {Функция} rembox (@var{expr})
2446 Удаляет боксы из @var{expr}.
2448 @code{rembox (@var{expr}, unlabelled)} удаляет все непомеченные боксы из @var{expr}.
2450 @code{rembox (@var{expr}, @var{label})} удаляет только боксы, содержащие @var{label}.
2452 @code{rembox (@var{expr})} удаляет все боксы, помеченные и непомеченные.
2454 Боксы рисуются функциями @code{box}, @code{dpart} и @code{lpart}.
2456 Примеры:
2458 @c ===beg===
2459 @c expr: (a*d - b*c)/h^2 + sin(%pi*x);
2460 @c dpart (dpart (expr, 1, 1), 2, 2);
2461 @c expr2: lpart (BAR, lpart (FOO, %, 1), 2);
2462 @c rembox (expr2, unlabelled);
2463 @c rembox (expr2, FOO);
2464 @c rembox (expr2, BAR);
2465 @c rembox (expr2);
2466 @c ===end===
2467 @example
2468 (%i1) expr: (a*d - b*c)/h^2 + sin(%pi*x);
2469                                   a d - b c
2470 (%o1)                sin(%pi x) + ---------
2471                                       2
2472                                      h
2473 (%i2) dpart (dpart (expr, 1, 1), 2, 2);
2474                         """""""    a d - b c
2475 (%o2)               sin("%pi x") + ---------
2476                         """""""      """"
2477                                      " 2"
2478                                      "h "
2479                                      """"
2480 (%i3) expr2: lpart (BAR, lpart (FOO, %, 1), 2);
2481                   FOO"""""""""""   BAR""""""""
2482                   "    """"""" "   "a d - b c"
2483 (%o3)             "sin("%pi x")" + "---------"
2484                   "    """"""" "   "  """"   "
2485                   """"""""""""""   "  " 2"   "
2486                                    "  "h "   "
2487                                    "  """"   "
2488                                    """""""""""
2489 (%i4) rembox (expr2, unlabelled);
2490                                   BAR""""""""
2491                    FOO"""""""""   "a d - b c"
2492 (%o4)              "sin(%pi x)" + "---------"
2493                    """"""""""""   "    2    "
2494                                   "   h     "
2495                                   """""""""""
2496 (%i5) rembox (expr2, FOO);
2497                                   BAR""""""""
2498                        """""""    "a d - b c"
2499 (%o5)              sin("%pi x") + "---------"
2500                        """""""    "  """"   "
2501                                   "  " 2"   "
2502                                   "  "h "   "
2503                                   "  """"   "
2504                                   """""""""""
2505 (%i6) rembox (expr2, BAR);
2506                    FOO"""""""""""
2507                    "    """"""" "   a d - b c
2508 (%o6)              "sin("%pi x")" + ---------
2509                    "    """"""" "     """"
2510                    """"""""""""""     " 2"
2511                                       "h "
2512                                       """"
2513 (%i7) rembox (expr2);
2514                                   a d - b c
2515 (%o7)                sin(%pi x) + ---------
2516                                       2
2517                                      h
2518 @end example
2520 @opencatbox{Категории:}
2521 @category{Выражения}
2522 @closecatbox
2524 @end deffn
2526 @deffn {Функция} sum (@var{expr}, @var{i}, @var{i_0}, @var{i_1})
2527 Представляет собой суммирование значений @var{expr} для
2528 индекса @var{i}, изменяющегося от @var{i_0} до @var{i_1}.
2529 Невычисляемая форма @code{'sum} изображается как заглавная буква сигма.
2531 @code{sum} вычисляет свое слагаемое @var{expr} и нижний и верхний пределы @var{i_0} и @var{i_1},
2532 @code{sum} не вычисляет индекс @var{i}.
2534 Если верхний и нижний пределы отличаются на целое число,
2535 слагаемое @var{expr} вычисляется для каждого значения индекса суммирования  @var{i}, 
2536 и результат есть точная сумма.
2538 Иначе, диапазон индекса является неопределенным.
2539 Для упрощения суммирования применяются некоторые правила.
2540 Когда глобальная переменная @code{simpsum} есть @code{true}, дополнительные правила применяются.
2541 В некоторых случаях, упрощение дает результат, который не есть суммирование,
2542 иначе, результат есть невычисляемая форма @code{'sum}.
2544 Когда @code{evflag} (флаг вычисления) @code{cauchysum} есть @code{true},
2545 произведение суммирования выражается как произведение Коши,
2546 в котром индекс внутреннего суммирования есть функция 
2547 индекса внешнего суммирования, а не меняющейся независимо индекс.
2549 Глобальная переменная @code{genindex} есть буквенный префикс, 
2550 используемый для 
2551 генерации следующего индекса суммирования,
2552 если требуется автоматически сгенерированный индекс.
2554 @code{gensumnum} есть численный суффикс,  используемый для генерирования следующего 
2555 используемый для 
2556 генерации следующего индекса суммирования,
2557 если требуется автоматически сгенерированный индекс.
2558 Когда @code{gensumnum} есть @code{false}, автоматически сгенерированный индекс
2559 есть только @code{genindex} без численного суффикса.
2561 См. также @code{sumcontract}, @code{intosum},
2562 @code{bashindices}, @code{niceindices},
2563 @code{nouns}, @code{evflag} и @code{zeilberger}.
2565 Примеры:
2567 @c ===beg===
2568 @c sum (i^2, i, 1, 7);
2569 @c sum (a[i], i, 1, 7);
2570 @c sum (a(i), i, 1, 7);
2571 @c sum (a(i), i, 1, n);
2572 @c sum (2^i + i^2, i, 0, n);
2573 @c sum (2^i + i^2, i, 0, n), simpsum;
2574 @c sum (1/3^i, i, 1, inf);
2575 @c sum (1/3^i, i, 1, inf), simpsum;
2576 @c sum (i^2, i, 1, 4) * sum (1/i^2, i, 1, inf);
2577 @c sum (i^2, i, 1, 4) * sum (1/i^2, i, 1, inf), simpsum;
2578 @c sum (integrate (x^k, x, 0, 1), k, 1, n);
2579 @c sum (if k <= 5 then a^k else b^k, k, 1, 10);
2580 @c ===end===
2582 @example
2583 (%i1) sum (i^2, i, 1, 7);
2584 (%o1)                          140
2585 (%i2) sum (a[i], i, 1, 7);
2586 (%o2)           a  + a  + a  + a  + a  + a  + a
2587                  7    6    5    4    3    2    1
2588 (%i3) sum (a(i), i, 1, 7);
2589 (%o3)    a(7) + a(6) + a(5) + a(4) + a(3) + a(2) + a(1)
2590 (%i4) sum (a(i), i, 1, n);
2591                             n
2592                            ====
2593                            \
2594 (%o4)                       >    a(i)
2595                            /
2596                            ====
2597                            i = 1
2598 (%i5) sum (2^i + i^2, i, 0, n);
2599                           n
2600                          ====
2601                          \       i    2
2602 (%o5)                     >    (2  + i )
2603                          /
2604                          ====
2605                          i = 0
2606 (%i6) sum (2^i + i^2, i, 0, n), simpsum;
2607                               3      2
2608                    n + 1   2 n  + 3 n  + n
2609 (%o6)             2      + --------------- - 1
2610                                   6
2611 (%i7) sum (1/3^i, i, 1, inf);
2612                             inf
2613                             ====
2614                             \     1
2615 (%o7)                        >    --
2616                             /      i
2617                             ====  3
2618                             i = 1
2619 (%i8) sum (1/3^i, i, 1, inf), simpsum;
2620                                 1
2621 (%o8)                           -
2622                                 2
2623 (%i9) sum (i^2, i, 1, 4) * sum (1/i^2, i, 1, inf);
2624                               inf
2625                               ====
2626                               \     1
2627 (%o9)                      30  >    --
2628                               /      2
2629                               ====  i
2630                               i = 1
2631 (%i10) sum (i^2, i, 1, 4) * sum (1/i^2, i, 1, inf), simpsum;
2632                                   2
2633 (%o10)                       5 %pi
2634 (%i11) sum (integrate (x^k, x, 0, 1), k, 1, n);
2635                             n
2636                            ====
2637                            \       1
2638 (%o11)                      >    -----
2639                            /     k + 1
2640                            ====
2641                            k = 1
2642 (%i12) sum (if k <= 5 then a^k else b^k, k, 1, 10);
2643           10    9    8    7    6    5    4    3    2
2644 (%o12)   b   + b  + b  + b  + b  + a  + a  + a  + a  + a
2645 @end example
2647 @opencatbox{Категории:}
2648 @category{Суммы и произведения}
2649 @closecatbox
2651 @end deffn
2653 @deffn {Функция} lsum (@var{expr}, @var{x}, @var{L})
2654 Представляет собой сумму @var{expr} для каждого элемента @var{x} в @var{L}.
2656 Невычисляемая форма @code{'lsum} возвращается,
2657 если аргумент @var{L} не вычисляется до списка.
2659 Примеры:
2661 @c ===beg===
2662 @c lsum (x^i, i, [1, 2, 7]);
2663 @c lsum (i^2, i, rootsof (x^3 - 1, x));
2664 @c ===end===
2665 @example
2666 (%i1) lsum (x^i, i, [1, 2, 7]);
2667                             7    2
2668 (%o1)                      x  + x  + x
2669 (%i2) lsum (i^2, i, rootsof (x^3 - 1, x));
2670                      ====
2671                      \      2
2672 (%o2)                 >    i
2673                      /
2674                      ====
2675                                    3
2676                      i in rootsof(x  - 1, x)
2677 @end example
2679 @opencatbox{Категории:}
2680 @category{Суммы и произведения}
2681 @closecatbox
2683 @end deffn
2685 @deffn {Функция} verbify (@var{f})
2686 Возвращает вычисляемую форму функции с именем @var{f}.
2688 См. также @code{verb}, @code{noun} и @code{nounify}.
2690 Примеры:
2692 @c ===beg===
2693 @c verbify ('foo);
2694 @c :lisp $%
2695 @c nounify (foo);
2696 @c :lisp $%
2697 @c ===end===
2698 @example
2699 (%i1) verbify ('foo);
2700 (%o1)                          foo
2701 (%i2) :lisp $%
2702 $FOO
2703 (%i2) nounify (foo);
2704 (%o2)                          foo
2705 (%i3) :lisp $%
2706 %FOO
2707 @end example
2709 @opencatbox{Категории:}
2710 @category{Невычисляемые и вычисляемые формы}
2711 @closecatbox
2713 @end deffn