设为首页 友情链接
在线留言 发表文章
加入收藏 广告联系

刺猬首页

| 专案技术 | 网络技术 | 图形图象 | 网络编程 | 网页设计 | 操作系统 | 服务器 | 技术白皮书 | 在线实验室 | 刺猬论坛 |
小说专版  | 数据库 | 设计赏析 | 存储频道 | 网络安全 | 私服架设 |  Solaris | 网站评估 | PC维护技巧 | 下载中心 | 博 客 |
专   题: | Linux | java | cisco | 防病毒 | 刀片 | SOA | iscsi | ASP.NET | SQL | Oracle |
您现在的位置: IT公社 IT community >> Linux专题 >> Linux应用技巧 >> 教程正文 用户登录 新用户注册
专 题 栏 目
最 新 热 门
最 新 推 荐
相 关 文 章
廉价的超级计算--集群 L…
集群扫盲篇:Linux高性能…
NetApp新系统简化Linux计…
如何用Linux搭建中学计算…
打造香港最快的计算机
计算Java日期--学习怎…
一个函数,利用shift计算…
计算100以内能被3整除的…
写一个脚本,利用循环计…
怎么计算WEB服务器的最大…
  计算机代数系统MAXIMA         
计算机代数系统MAXIMA
 

1. 下载地址

MAXIMA 可以在 http://sourceforge.net/projects/maxima 免费下载。如果不是从源码安装,你需要下载一个 maxima 和一个 maxima-exec 包。推荐用 maxima-exec_gcl-*,因为用这个你不需要再安装 LISP 解释器了。

2. MAXIMA 的历史

MAXIMA 是由 DOE-MACSYMA 演变而来的。MACSYMA 是 MIT 在 60年代末创造的一种 CAS。它是用 LISP 实现的。MACSYMA 早期的赞助包括 ARPA, DOE, ... 它运行于一台 ARPAnet 早期的PDP-10主机上。 一直以来 MACSYMA 都是世界上最大的 LISP 程序,用于公式推导和符号计算。

但是由于 MIT 1982年的时候决定把MACSYMA变成一个关闭源码的商业程序,帮助销售 LISP 机器。所以产生了很多 MACSYMA 的分支,比如 VAXIMA, MAXIMA, ... 商业利益的诱惑使得 MIT 从 Berkeley 收回了 50 份正在使用的 MACSYMA 系统,引起很多人不满,使人想起了当年 AT&T 在 UNIX 身上的作法。同时也直接导致了 Richard Stallman 从 MIT 辞职,创立自由软件基金会(FSF)和GNU项目,这样才会有我们今天使用的 GNU/Linux.

商业的 MACSYMA 是由 Symbolics Inc 销售的,后来是 Macsyma Inc,但是 Macsyma Inc 在 1999 年突然不明原因的解体了,程序员各奔东西,众多的用户失去了支持。

现在的MAXIMA 是 MACSYMA 的一个 GPL 的衍生版本,它是自由软件。它就是 MACSYMA 未来的希望。虽然以前有 REDUCE, CAMAL, Mathlab-68, PM, ... 但是 MACSYMA 在Mathematica 和 Maple 出现以前显然是没有对手的。但是现在似乎Mathematica 和 Maple 已经挤垮了 MACSYMA。不过各有各的好处,你继续看下去就知道 MAXIMA 哪些地方比 Mathematica 和 Maple 好。

由于 MAXIMA 就是 MACSYMA 的一个版本。下文中我们的 "MAXIMA" 和 "MACSYMA" 两个单词可以互换。

3. MAXIMA 简介

MAXIMA 是完全可以跟 Mathematica 和 Maple 比美的 CAS。实际上 Mathematica 和 Maple 的很多优点都是从 MACSYMA 身上学来的。

3.1. 严密的逻辑

Maple 和 Mathematica 经常做错的东西,MACSYMA 经常会给你一个合理的答复。当然它也会做错。小心!计算机代数系统给出的答案都有可能是错误的,不能完全依赖它们。

你可以试试积分: integrate(x^i,x) 和 Integrate 1/sqrt(2-2*cos(x)) from x=-pi/2 to pi/2。 Mathematica 4.1 会立即给你一个不完全正确甚至错误的答案。

在这种情况下,MAXIMA 的表现要聪明的多,因为它毕竟有几十年的经验。MAXIMA 缺省是一个非常严密的系统,如果你要积分:

integrate(x^i,x);  MAXIMA 会问你:

Is i + 1 zero or nonzero?  这是因为现在我们不知道 i 是否等于 -1。如果 i=-1, 那么这个积分应该等于 LOG(x),其中 LOG 是 MAXIMA 的自然对数符号。如果 i 不等于 -1,那么积分应该等于

i + 1

x

------

i + 1

  • 这样每次都要问你有时很麻烦,你也可以告诉它,没有特殊指明的情况下,假设积分里的符号都是正数:

ASSUME_POS: True;  它以后遇到 integrate(x^i,x); 就会直接给你

i + 1

x

------

i + 1

而不会再问你问题了。

3.2. 方便的推理

不仅严密,而且 MAXIMA 有比 Mathematica 和 Maple 方便的推理系统。你跟 MAXIMA 就像在对话:

看看这个例子:如果A>=B, B>=C, C>=A, 那么 A=C 吗?

(C1) ASSUME(A>=B, B>=C);

(D1) [A >= B, B >= C]

(C2) ASSUME(C>=A);

(D2) [C >= A]

(C3) IS(EQUAL(A,B));

(D3) TRUE

另一个例子: 如果 x>y, 那么x2 >y2 吗?

(C4) ASSUME(x>y);

(D4) [x > y]

(C5) IS(x^2>=y^2);

MACSYMA was unable to evaluate the predicate:

2 2

x >= y

-- an error. Quitting. To debug this try DEBUGMODE(TRUE)

  • MAXIMA 不能回答你,因为 x,y 的符号未知。 现在你告诉它 x 和 y 都是正数:

(C6) assume(x>0, y>0);

(D6) [x > 0, y > 0]

(C7) is(x^2>y^2);

(D7) TRUE

这下它告诉你答案了。 它可以根据一些事实来化简式子。我们有这样一个复杂的式子:

(C11) EXP:-K^2*L^2*M^2*N^2-K^2*L^2*N^2+K^2*M^2*N^2+K^2*N^2

2 2 2 2 2 2 2 2 2 2 2 2

(D11) - K L M N + K M N - K L N + K N

我们还有两个简单的事实:

(C12) EQ1:L^2+K^2 = 1

2 2

(D12) L + K = 1

(C13) EQ2:N^2-M^2 = 1

2 2

(D13) N - M = 1

让它根据这两个事实化简第一个式子: (C14) SCSIMP(EXP,EQ1,EQ2)  得到一个很简单的答案:

4 4

(D14) K N

3.3. 抽象代数

在你还没有函数的定义时,你就可以声明这个函数的一些性质。这样你可以在很多时候大大简化结果。比如,你可以声明一个函数是奇函数:

(C1) DECLARE(F,ODDFUN);

(D1) DONE

(C2) F(-A);

(D2) -F(A)

  • F(-A) 以后简化时就可以被当成 -F(A)。你再声明 F(X) 是 OUTATIVE:

(C5) DECLARE(F,OUTATIVE);

(D5) DONE

(C6) F(3*A);

(D6) 3 F(A)

这样,F(3a) 可以被当成 3F(a)。综合以上两个事实,我们可以得到:

(C7) F(-A)+F(2*A)-F(A);

(D7) 0

如果你告诉 MAXIMA,n 是一个整数,那么它就知道 sin(n pi) = 0.

(C1) declare(n,integer);

(D1) DONE

(C2) sin(n*%pi);

(D2) 0

你甚至可以定义自己的操作符,它可以有中缀,前缀,后缀,nary等各种方式,可以有任意的优先级,可以设定它是左结合还是右结合。比如我们来定义一个NARY操作 "&",它的优先级是180(缺省),它是右结合的。

(C6) NARY("&");

(D6) "&"

(C7) declare("&",RASSOCIATIVE);

(D7) DONE

(C x&y&a&b;

(D x & (y & (a & b))

3.4. 超强的扩展能力

另外,MAXIMA 是可以用自己的语言或者 LISP 进行扩展的。比如你可以用 recur 包来推导递推关系:

(C load(recur);

(D /usr/share/maxima/5.9.0rc3/share/algebra/recur.mac

现在我们来解一个“快速排序”的时间复杂度分析里出现的简单的递推关系:

T(0)=0

T(N)=2*T(N-1)+1

这样输入到 MAXIMA:

(C14) CHAR(T(N+1)-2*T(N),1,T,N,1,[T(0)=0]);

N

(D14) T(N) = 2 - 1

这个 recur 实际上只是一个200多行的小程序,就可以帮你处理线性递推关系,生成函数……

MAXIMA 有函数式的程序语言,它比通常的过程式语言要强大的多。你甚至可以接触到它底层的 LISP。Mathematica 的语法就是跟 MACSYMA 学来的。

MAXIMA 完全是用 LISP 语言写的,所以它继承了 LISP 语言天生的特征。它分为上下两层,上面一层叫做 MAXIMA level,下面一层叫做 LISP level。上下两层是相通的,如果你懂得 LISP,你可以随时按 Ctrl-C 进入到 LISP 的环境,定义一个函数,然后退回到 MAXIMA 层调用那个函数。当然在 LISP level 还有很多工作可以做。你也可以在 MAXIMA level 定义了函数,然后在 LISP level 进行调用。

4. 资料

MAXIMA 跟商业的 MACSYMA 的功能基本相同。如果你有商业的 MACSYMA 那就可以用它的手册。如果你没有,就只好看 MAXIMA 自带的 manual 了。

Linux联盟收集整理

频道声明:本频道的文章除部分特别声明禁止转载的专稿外,可以自由转载.但请务必注明出出处和原始作者 文章版权归本频道与文章作者所有.对于被频道转载文章的个人和网站,我们表示深深的谢意。

原始作者:佚名 录入时间:2007-3-31 2:14:18
信息来源:不详 投稿信箱:itqoo@126.com
教程录入:itqoo    责任编辑:itqoo 
  • 上一个教程:

  • 下一个教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    - 关于我们 - 合作伙伴 - 友情链接 - 广告刊登 - 投稿热线 - 在线留言版权声明联系方式 -
    IT公社版权所有 粤ICP备05127012号
    Copyrigh@2005-2006 itqoo.com.Inc All Rights Reserved  推荐分辨率 1024*768
    联系站长:E-Mail:itqoo@126.com     MSN:urchincc@hotmail.com    QQ:点击这里给我发消息
    特别感谢:亿太网络提供空间支持