Next: , Previous: , Up: Top   [Contents][Index]

3 Справка


Next: , Previous: , Up: Справка   [Contents][Index]

3.1 Lisp и Maxima

Maxima написана на Lisp, поэтому легко получить доступ к Lisp функциям и переменным из Maxima и наоборот. Lisp и Maxima символы различают с помощью соглашения об именах. Lisp символ, который начинается со знака $ соответствует Maxima символу без знака доллара. Maxima символ, который начинается со знака ? соответствует Lisp символу без знака вопроса. Например, Maxima символ foo соответствует Lisp символу $foo, в то время как Maxima символ ?foo соответствует Lisp символу foo, Заметим, что ?foo записано без пробелов между ? и foo; иначе можно перепутать с describe ("foo").

-, *, и другие специальные знаки в Lisp символах должны быть экранированы \ везде, где они появляются в коде Maxima. Например, Lisp идентификатор *foo-bar* записывается как ?\*foo\-bar\* в Maxima.

Lisp код может быть выполнен из Maxima сессии. Простая строка с Lisp кодом (содержащая одну и более форм) может быть выполнена с помощью специальной команды :lisp. Например,

(%i1) :lisp (foo $x $y)

вызывает Lisp функцию foo с Maxima переменными x и y в качестве аргументов. :lisp конструкция может появляться в интерактивном приглашении или в файле, исполняемом командой batch или demo, но только не в файле исполняемом командами load, batchload, translate_file, или compile_file.

Функция to_lisp() открывает интегративную Lisp сессию. Ввод (to-maxima) закрывает Lisp сессию и возвращает к Maxima.

Lisp функции и переменные, которые, как известно, видны в Maxima как функции и переменные с обычными именами (без специальной пунктуации) должны иметь Lisp имена, начинающиеся со знака $.

Maxima чувствительна к регистру символов, различая буквы в нижнем и верхнем регистрах, в идентификаторах, в то время как Lisp - нет. Существуют некоторые правила, управляющие переводом имен между Lisp и Maxima.

  1. Lisp идентификатор не заключенный в вертикальные черты соответствует Maxima идентификатору в нижнем регистре. Является ли Lisp идентификатор в верхнем, нижнем, или смешанном регистре, регистр игнорируется. То есть, Lisp $foo, $FOO, и $Foo - все соответствуют Maxima foo.
  2. Lisp идентификатор, имеющий все знаки в нижнем или все знаки в верхнем регистре и заключенный в вертикальные черты, соответствует Maxima идентификатору с именем в обратном регистре. То есть, верхний регистр меняется в нижний и нижний регистр - в верхний. Например, Lisp |$FOO| и |$foo| соответствуют Maxima foo и FOO, в указанном порядке.
  3. Lisp идентификатор, который записан в смешанном регистре и заключенный в вертикальные черты соответствует Maxima идентификатору в том же регистре. Например, Lisp |$Foo| соответствует Maxima Foo.

#$ Lisp макрооператор позволяет использовать Maxima выражения в Lisp коде. #$expr$ превращается в Lisp выражение, эквивалентное Maxima выражению expr.

(msetq $foo #$[x, y]$)

Это имеет тот же самый эффект как при вводе:

(%i1) foo: [x, y];

Lisp функция displa печатает выражение в Maxima форме.

(%i1) :lisp #$[x, y, z]$ 
((MLIST SIMP) $X $Y $Z)
(%i1) :lisp (displa '((MLIST SIMP) $X $Y $Z))
[x, y, z]
NIL

Функции, заданные в Maxima не являются обычными Lisp функциями. Lisp функция mfuncall вызывает Maxima функцию. Например:

(%i1) foo(x,y) := x*y$
(%i2) :lisp (mfuncall '$foo 'a 'b)
((MTIMES SIMP) A B)

Некоторые Lisp функции скрыты в Maxima пакете, а именно такие как:

complement, continue, //, float, functionp, array, exp, listen, signum, atan, asin, acos, asinh, acosh, atanh, tanh, cosh, sinh, tan, break и gcd.


Next: , Previous: , Up: Справка   [Contents][Index]

3.2 Сборка мусора

Вычисление в символьном виде имеют тенденцию создавать много “мусора”, и эффективное управление этим мусором может стать решающим для успешного выполнения некоторых программ.

Под GCL, на UNIX системах, где доступны вызовы системы “mprotect”, (включая SUN OS 4.0 и некоторые версии BSD) доступна прямая сборка мусора. Это ограничивает сборку страницами, в которые недавно производилась запись. См. документацию по GCL по ключевым словам ALLOCATE и GBC. На уровне Lisp, установка (setq si::*notify-gbc* t) поможет вам определить, какие области памяти, возможно, требуют больше пространства.


Next: , Previous: , Up: Справка   [Contents][Index]

3.3 Документация

Руководство пользователя Maxima можно просматривать в различных форматах. Из интерактивного приглашения Maxima, руководство пользователя просматривается как обычный текст командой ? (то есть, функция describe). Руководство пользователя просматривается как info гипертекст с помощью info просмотрщиком и как веб-страница с помощью обычного веб-браузера.

example показывает примеры для многих Maxima функций. Например,

(%i1) example (integrate);

дает

(%i2) test(f):=block([u],u:integrate(f,x),ratsimp(f-diff(u,x)))
(%o2) test(f) := block([u], u : integrate(f, x), 

                                         ratsimp(f - diff(u, x)))
(%i3) test(sin(x))
(%o3)                           0
(%i4) test(1/(x+1))
(%o4)                           0
(%i5) test(1/(x^2+1))
(%o5)                           0

и дополнительный вывод.


Previous: , Up: Справка   [Contents][Index]

3.4 Справочная система

Функция: demo (filename)

вычисляет Maxima выражения в filename и показывает результаты. demo останавливается после вычислений каждого выражения и продолжает после того, как пользователь нажмет “Enter”. (Если запущена Xmaxima, demo необходимо перед вводом ставить ;).

demo просматривает список директорий file_search_demo, чтобы найти filename. Если файл имеет расширение dem, то его можно опустить. См. также file_search.

demo вычисляет свои аргументы. demo возвращает имя демонстрационного файла.

Пример:

(%i1) demo ("disol");

batching /home/wfs/maxima/share/simplification/disol.dem
 At the _ prompt, type ';' followed by enter to get next demo
(%i2)                      load("disol")

_
(%i3)           exp1 : a (e (g + f) + b (d + c))
(%o3)               a (e (g + f) + b (d + c))

_
(%i4)                disolate(exp1, a, b, e)
(%t4)                         d + c

(%t5)                         g + f

(%o5)                   a (%t5 e + %t4 b)

_
(%i5) demo ("rncomb");

batching /home/wfs/maxima/share/simplification/rncomb.dem
 At the _ prompt, type ';' followed by enter to get next demo
(%i6)                     load("rncomb")

_
                             z         x
(%i7)               exp1 : ----- + ---------
                           y + x   2 (y + x)
                          z         x
(%o7)                   ----- + ---------
                        y + x   2 (y + x)

_
(%i8)                     combine(exp1)
                          z         x
(%o8)                   ----- + ---------
                        y + x   2 (y + x)

_
(%i9)                     rncombine(%)
                             2 z + x
(%o9)                       ---------
                            2 (y + x)

_
                             d   c   b   a
(%i10)                exp2 : - + - + - + -
                             3   3   2   2
                          d   c   b   a
(%o10)                    - + - + - + -
                          3   3   2   2

_
(%i11)                    combine(exp2)
                      2 d + 2 c + 3 (b + a)
(%o11)                ---------------------
                                6

_
(%i12)                   rncombine(exp2)
                      2 d + 2 c + 3 b + 3 a
(%o12)                ---------------------
                                6

_
(%i13) 
Функция: describe (string)
Функция: describe (string, exact)
Функция: describe (string, inexact)

describe(string) эквивалентно describe(string, exact).

describe(string, exact) ищет элемент, с заголовком равным (независимо от регистра) string, если такой элемент есть.

describe(string, inexact) ищет все документированные элементы, которые содержат string в своих заголовках. Если есть более чем один такой элемент, Maxima спросит пользователя выбрать элемент или несколько элементов для отображения.

В интерактивном приглашении, ? foo (с пробелом между ? и foo) эквивалентно describe("foo", exact), и ?? foo эквивалентно describe("foo", inexact).

describe("", inexact) дает список всех тем, документированных в руководстве пользователя.

describe не вычисляет свой аргумент. describe возвращает true если документация найдена, false в противном случае.

См. также Документация.

Пример:

(%i1) ?? integ
 0: Functions and Variables for Elliptic Integrals
 1: Functions and Variables for Integration
 2: Introduction to Elliptic Functions and Integrals
 3: Introduction to Integration
 4: askinteger  (Functions and Variables for Simplification)
 5: integerp  (Functions and Variables for Miscellaneous Options)
 6: integer_partitions  (Functions and Variables for Sets)
 7: integrate  (Functions and Variables for Integration)
 8: integrate_use_rootsof  (Functions and Variables for
    Integration)
 9: integration_constant_counter  (Functions and Variables for
    Integration)
 10: nonnegintegerp  (Functions and Variables for linearalgebra)
Enter space-separated numbers, `all' or `none': 7 8

 -- Function: integrate (<expr>, <x>)
 -- Function: integrate (<expr>, <x>, <a>, <b>)
     Attempts to symbolically compute the integral of <expr> with
     respect to <x>.  `integrate (<expr>, <x>)' is an indefinite
     integral, while `integrate (<expr>, <x>, <a>, <b>)' is a
     definite integral, [...]
     
 -- Option variable: integrate_use_rootsof
     Default value: `false'

     When `integrate_use_rootsof' is `true' and the denominator of
     a rational function cannot be factored, `integrate' returns
     the integral in a form which is a sum over the roots (not yet
     known) of the denominator.
     [...]

В этом примере, были выбраны элементы 7 и 8 (вывод команды сокращен, что обозначено [...]). Все элементы или ни один из элементов могут быть выбраны при помощи all или none, что можно также сократить до a и n соотвественно.

Функция: example (topic)
Функция: example ()

example (topic) показывает некоторые примеры для символа topic (не строки). Большинство topic являются именами функций. example () возвращает список всех доступных topic.

Имя файла содержащего эти примеры задано глобальной переменной manual_demo, которая исходно равна "manual.demo".

example не вычисляет свой аргумент. example возвращает done только если нет ошибки или отсутствия аргумента. example возвращает список всех подходящих тем.

Примеры:

(%i1) example (append);
(%i2) append([x+y,0,-3.2],[2.5E+20,x])
(%o2)             [y + x, 0, - 3.2, 2.5E+20, x]
(%o2)                         done
(%i3) example (coeff);
(%i4) coeff(b+tan(x)+2*a*tan(x) = 3+5*tan(x),tan(x))
(%o4)                      2 a + 1 = 5
(%i5) coeff(1+x*%e^x+y,x,0)
(%o5)                         y + 1
(%o5)                         done

Previous: , Up: Справка   [Contents][Index]