suffer 发表于 2007-6-29 01:30

Maxima手册

很偶然的机会让我遇到了MAXIMA并产生了学习的兴趣。可是网上有关的资料非常少,中文的就更少了。幸亏软件自带帮助手册。所以打算从此处入手,一边翻译一边学习。顺便也可以为朋友们提供一份看的过去的东西。由于自己的英文水平的浅陋,很多地方自己看的似懂非懂,还要在底下琢磨,不过会尽量忠实于原文。实在译不出的会根据自己的理解来写。

MAXIMA是一个完整的计算机代数计算系统。
MAXIMA是由William F. Schelter用COMMON LISP实现的 , 基于MIT上的Macsyma的最初版本,由能源部门发布。现在从DOE获得了派生版本的权限,并遵守GNU公共协议。

MAXIMA介绍
当键入“maxima”命令启动MAXIMA后,MAXIMA会显示版本信息和提示符。每个MAXIMA命令都以分号结尾。以“quit()”结束对话,退出系统。下面是一个简单的对话的例子:
sonia$ maxima
GCL (GNU Common Lisp)Version(2.3) Tue Mar 21 14:15:15 CST 2000
Licensed under GNU Library General Public License
Contains Enhancements by W. Schelter
Maxima 5.4 Tue Mar 21 14:14:45 CST 2000 (enhancements by W. Schelter)
Licensed under the GNU Public License (see file COPYING)
(C1) factor(10!);

                                 842
(D1)                              2357
(C2) expand((x+y)^6);

         6      5       24       33       42      5      6
(D2)      y+ 6 x y+ 15 xy+ 20 xy+ 15 xy+ 6 xy + x
(C3) factor(x^6-1);

                                     2            2
(D3)               (x - 1) (x + 1) (x- x + 1) (x+ x + 1)
(C4) quit();

sonia$

MAXIMA可以搜索信息页。使用describe命令可以显示其所带参数相关的文档。如:
(C1) describe(factor);

0: DONTFACTOR :(maxima.info)Definitions for Matrices and ..
1: EXPANDWRT_FACTORED :Definitions for Simplification.
2: FACTOR :Definitions for Polynomials.
3: FACTORFLAG :Definitions for Polynomials.
4: FACTORIAL :Definitions for Number Theory.
5: FACTOROUT :Definitions for Polynomials.
6: FACTORSUM :Definitions for Polynomials.
7: GCFACTOR :Definitions for Polynomials.
8: GFACTOR :Definitions for Polynomials.
9: GFACTORSUM :Definitions for Polynomials.
10: MINFACTORIAL :Definitions for Number Theory.
11: NUMFACTOR :Definitions for Special Functions.
12: SAVEFACTORS :Definitions for Polynomials.
13: SCALEFACTORS :Definitions for Miscellaneous Options.
14: SOLVEFACTORS :Definitions for Equations.
Enter n, all, none, or multiple choices eg 1 3 : 2 8;

Info from file /d/linux/local/lib/maxima-5.4/info/maxima.info:
- Function: FACTOR (EXP)
   factors the expression exp, containing any number of variables or
   functions, into factors irreducible over the integers.
   FACTOR(exp, p) factors exp over the field of integers with an
   element adjoined whose minimum polynomial is p.FACTORFLAG
   if FALSE suppresses the factoring of integer factors of rational
   expressions.DONTFACTOR may be set to a list of variables with
   respect to which factoring is not to occur.(It is initially
   empty).Factoring also will not take place with respect to any
   variables which are less important (using the variable ordering
   assumed for CRE form) than those on the DONTFACTOR list.
   SAVEFACTORS if TRUE causes the factors of an expression
   which is a product of factors to be saved by certain functions in
   order to speed up later factorizations of expressions containing
   some of the same factors.BERLEFACT if FALSE then the
   Kronecker factoring algorithm will be used otherwise the Berlekamp
   algorithm, which is the default, will be used.INTFACLIM is
   the largest divisor which will be tried when factoring a bignum
   integer.If set to FALSE (this is the case when the user calls
   FACTOR explicitly), or if the integer is a fixnum (i.e.fits in
   one machine word), complete factorization of the integer will be
   attempted.The user's setting of INTFACLIM is used for internal
   calls to FACTOR. Thus, INTFACLIM may be reset to prevent MACSYMA
   from taking an inordinately long time factoring large integers.
   NEWFAC may be set to true to use the new factoring routines.
   Do EXAMPLE(FACTOR); for examples.

- Function: GFACTOR (EXP)
   factors the polynomial exp over the Gaussian integers (i.e.
   with SQRT(-1) = %I adjoined).This is like FACTOR(exp,A**2+1)
   where A is %I.
          (C1)GFACTOR(X**4-1);
          (D1)      (X - 1) (X + 1) (X + %I) (X - %I)
(D1)                      FALSE

要想在以后的运算中使用当前的一个结果,可以把它赋值给一个变量或者通过它自动提供的标签来引用它。另外,%用来引用最近的计算结果。例如:
C2) u:expand((x+y)^6);

         6      5       24       33       42      5      6
(D2)   y+ 6 x y+ 15 xy+ 20 xy+ 15 xy+ 6 xy + x
(C3) diff(u,x);

                5         4       23       32       4      5
(D3)      6 y+ 30 x y+ 60 xy+ 60 xy+ 30 xy + 6 x
(C4) factor(d3);

                                           5
(D4)                           6 (y + x)
MAXIMA 可以使用复数和数字常量。
(C6) cos(%pi);

(D6)                                  - 1

(C7) %e^(%i*%pi);

(D7)                                  - 1


MAXIMA可以进行微积分运算,如:
C8) u:expand((x+y)^6);

         6      5       24       33       42      5      6
(D8)   y+ 6 x y+ 15 xy+ 20 xy+ 15 xy+ 6 xy + x
(C9) diff(%,x);

                5         4       23       32       4      5
(D9)      6 y+ 30 x y+ 60 xy+ 60 xy+ 30 xy + 6 x
(C10) integrate(1/(1+x^3),x);

                                       2 x - 1
                     2            ATAN(-------)
                  LOG(x- x + 1)      SQRT(3)    LOG(x + 1)
(D10)         - --------------- + ------------- + ----------
                         6             SQRT(3)          3

MAXIMA可以求解线形系统和三次方程。
C11) linsolve( [ 3*x + 4*y = 7, 2*x + a*y = 13], );

                               7 a - 52      25
(D11)                     
                               3 a - 8       3 a - 8
(C12) solve( x^3 - 3*x^2 + 5*x = 15, x);

(D12)            

MAXIMA也可以求解非线形方程。注意,如果你不打算在屏幕上显示结果的话,可以使用“$”来代替命令结尾的“;”。
C13) eq1: x^2 + 3*x*y + y^2 = 0$

(C14) eq2: 3*x + y = 1$

(C15) solve();

            3 SQRT(5) + 7      SQRT(5) + 3
(D15) [,
                  2               2

                                    3 SQRT(5) - 7      SQRT(5) - 3
                               ]
                                          2                   2

在X window系统下,MAXIMA可以生成一个或多个函数的图形:
(C13) plot2d(sin(x)/x,);

(YMIN -3.0 YMAX 3.0 0.29999999999999999)
(D13)                                  0
(C14) plot2d(, );

(YMIN -3.0 YMAX 3.0 0.29999999999999999)
(YMIN -3.0 YMAX 3.0 0.29999999999999999)
(YMIN -3.0 YMAX 3.0 0.29999999999999999)
(D14)                                  0
(C15) plot3d(sin(sqrt(x^2+y^2))/sqrt(x^2+y^2),,);

(D15)                                  0

移动光标到图形窗口的左上角,系统将弹出一个菜单以供你生成图形的PostScript文件。(默认存储在你的home目录下。)并且你还可以旋转一个3D图形。

小注:①MAXIMA有Windows版本。
             ②最后让我们以一个MAXIMA生成的3D图形例子来结束本节,输入以下命令并回车。
plot3d(x^2+y^2,,);



转自:http://www.cnblogs.com/sirsunny/category/8680.html

[ 本帖最后由 suffer 于 2007-6-29 01:33 编辑 ]

suffer 发表于 2007-6-29 01:35

帮助介绍

    最有用的在线帮助命令是DESCRIBE,通过给它设定参数可以获得包含其参数指定字符的所有相关命令的帮助信息。比如你想知道一个内置运算的意思例如INTEGER 或者FACTOR等,可以输入describe(“fact”)。另外你也可以输入 ?fact 。比如下面这个例子:

C3) ? inte;

0: (maxima.info)Integration.
1: Introduction to Integration.
2: Definitions for Integration.
3: INTERRUPTS.
4: ASKINTEGER :Definitions for Simplification.
5: DISPLAY_FORMAT_INTERNAL :Definitions for Input and Output.
6: INTEGERP :Definitions for Miscellaneous Options.
7: INTEGRATE :Definitions for Integration.
8: INTEGRATION_CONSTANT_COUNTER :Definitions for Integration.
9: INTERPOLATE :Definitions for Numerical.
Enter n, all, none, or multiple choices eg 1 3 : 7 8;

Info from file /d/linux2/local/share/info/maxima.info:
- Function: INTEGRATE (EXP, VAR)
   integrates exp with respect to var or returns an integral
   expression (the noun form) if it cannot perform the integration
   (see note 1 below).Roughly speaking three stages are used:
在上例中,用户说他打算看看第7和第8项的内容。注意“;”必须跟在两个数字之后。他也可以输入all以查看所有的项。


LISP和Maxima

    Maxima全部是用lisp写的。这里有一个关于函数和变量的命名约定:在lisp层中所有的以一个$开头的符号在macsyma级别读入时,这个$将会被去掉。例如在lisp下面有这样两个函数:TRANSLATE和$TRANSLATE。如果在macsyma层你调用函数 TRANSLATE(FOO); 这个函数实际上是调用的$TRANSLATE函数。存取别的函数必须加上?前缀。
(C1) ?TRANSLATE(FOO);

!注意不要在?和函数名之间加入空格,否则maxima会以为你想查看该函数的帮助信息。
因为是完全不同的函数,所以不会得到你想要的结果。

   你可以按照下面的方式输入lisp命令。
(C1) :lisp (foo 1 2)

    或者使用to_lisp();得到一个lisp提示,退出maxima并进入lisp。
    交替的键入Ctrl-c 将进入debug中断。这样可以进入一个lisp break loop。你现在可以对$d2进行求值并查看在lisp内部格式中符号标记D2的值。如果你处在一个debug break中,可以键入 :q 退回到顶层。如果你已经使用to_lisp();命令退出了maxima,你可以输入以下命令来重新启动Maxima会话。

MAXIMA>(run)

   
    如果打算写个lisp函数并在macsyma层调用它,你应该在函数名前加上$。注意所有在lisp层输入的符号都会被自动
变为大写字母,除非使用类似 |$odeSolve| 使之保持原来的样子。
    在Maxima中允许混合大小写输入一个符号,如果这个符号在之前已经存在则会自动变成大写。如果该符号是第一次
被读入,而且没有和它具有相同字母只是大小写不同的符号存在,就不会变成大写。下面是一个例子:

(C1) Integrate;
(D1) INTEGRATE

(C2) Integ;
(D2) Integ

这是因为Integrate 符号已经存在了,它是Maxima的一个基本元素,所以会自动变为大写。但是INTEG并不存在,因此Integ的写法是允许的。这看起来有点怪。这样做的优点是当你输入小写符号时可以立即知道它是不是maxima的关键字和函数。

要从lisp层进入Maxima,必须使用#$宏。

                        (setq $foo #$$)

按照下面的输入可以得到相同的结果:

(C1)FOO:;

不过foo不会在VALUES 列表中显示。 要想看到foo的macsyma打印格式必须输入:

(displa $foo)

    在本文档中当我们想要引用一个 macsyma 符号的时候,我们通常将省略$。但是如果我们同时又想要引用一个lisp符号的话这样做会引起混乱。我们通常使用小写字母来表示lisp 符号,表示macsyam符号时则使用大写字母。例如 LIST 指的是 $list,而list则指的是lisp符号“list”。

既然使用MAXIMA语言定义的函数不是普通的lisp函数,你必须使用mfuncall来调用它们。例如:

(D2)                        FOO(X, Y) := X + Y + 3

then at lisp level

CL-MAXIMA>>(mfuncall '$foo 4 5)
12

许多 lisp 函数 are shadowed 在maxima 包。这是因为它们在maxima中的用法和作为一个系统函数被定义不一致。例如在common lisp 的行为和在Maclisp中的就不一样。如果你想在maxima包使用zeta lisp 方式你应该使用 global:typep (or cl:typep for common lisp)。就像这样:

(macsyma:typep '(1 2)) ==> 'list
(lisp:typep '(1 2))==> error (lisp:type-of '(1 2))==> 'cons


看一下在"src/maxima-package.lisp"哪个符号被shadowed ,或者看看在lisp下所做的包的描述。


垃圾收集

符号计算会造成大量的垃圾。对其有效得加以控制在完成一些工作时是至关紧要的。

借着 GCL 的帮助, UNIX 系统下可以使用保护系统调用 (包括 SUN OS 4.0 和 一些BSD变种) 一个层次垃圾收集。它只对最近才写入的页进行收集。相关信息请参考ALLOCATE 和 GBCGCL 下的CGL文档。 在 lisp level 使用 (setq si::*notify-gbc* t) 将会帮你确定哪个区域可能需要更多的空间。

文件编制

资料的源代码是 `.texi' tex格式。通过这个格式我们可以生成在线命令 ? 和 describe 所使用的文件信息,也可以生成html或pdf文件。


帮助命令:

Function: DEMO (file)

功能和BATCH 相同,但是会在每个命令行之后暂停并在键入一个空格后继续。(如果在xmaxima下运行,则需要在一个新行后输入;)。demo文件都以.dem结尾。

Function: DESCRIBE (cmd)

这个命令将显示包含 "cmd"字符串的所有命令的相关信息。
(C1) describe("integ");
0: (maxima.info)Integration.
1: Introduction to Integration.
2: Definitions for Integration.
3: ASKINTEGER :Definitions for Simplification.
..
Enter n, all, none, or multiple choices eg 1 3 : 2 3;
Info from file /d/linux2/local/share/info/maxima.info:
Definitions for Integration
===========================

- Function: CHANGEVAR (EXP,F(X,Y),Y,X)
...

Function: EXAMPLE (command)
    将启动一个关于command命令如何工作的实例。像DEMO命令一样在每个命令行后都会暂停等待输入一个空格。
    包含在例子中的文件的名字由 manual_demo变量提供,默认是 maxima.dem。
页: [1]
查看完整版本: Maxima手册