表面上,Maple与Mathematica非常相似,本文将从易用性,符号技术和性能上介绍Maple的技术优势:
- Maplesoft有一个开放和社区理念,贯穿我们所做的一切。不像Mathematica,Maple的数学引擎一直由有才干的工程师和遍布全球的研究实验室的专家合作开发。这种协作方式允许Maplesoft提供的先进的数学算法扎实地融入到最自然的用户界面中。这种开放性也体现在其他许多方面,如与其他组织形成伙伴关系,遵守国际标准,连接到其他软件工具中,Maple大量源代码的公开。
- Maplesoft的提供方案满足所有的学术需求,包括先进的工具,用于数学,工程建模,远程学习,测试和评估。相比之下,Wolfram Research 有没有提供任何工具用于自动测试和评估,这是学术活动中至关重要的。我们的在线测评与智能评分系统MapleTA™ ,是基于Maple。即使你现在不关心自动测试,今天选择Maple会给你和你的机构的一个宝贵的开端。
工作环境
Maple的目标是为用户提供一种自然的环境用于教学,学习和计算。这包括在任何地方使用标准的数学符号,遵守标准软件约定,并给用户提供环境创建一致的文档,与他们的教科书,白板和笔记本中的一样。
标准的数学符号
Maple使用标准的数学符号,圆括号表示函数 f(x) , |
Mathematica中使用方括号 f[x] |
Maple使用中的函数使用标准的表达,首字母小写 log(x),sin(x),cos(x) |
Mathematica中使用首字母大写Log[x],Sin[x], Cos[x] |
Maple中等号表示为“=” |
Mathematica中,等号用于变量赋值,双等号表示等于,因此表达会报错 |
Maple中自动使用二维的分数和指数表达,例如,当输入“/”时,Maple插入水平分数线,然后你的输入就会出现在分母的位置 |
Mathematica中分数和指数不是自动应用格式,使用功能键和标准键组合输入(如Ctrl+/输入“/”)或先输入Mathematica表达式 再用菜单操作将其转化为传统形式。 |
Maple通过默认面板使用标准数学格式。 |
Mathematica中,面板输入命令。必须使用菜单操作将命令转化为标准的数学形式。 |
对于不同的用户习惯,Maple也提供了传统的语法输入给用户。如Maple支持计算样式的语法:2*x^2+cos(x/2)。用户也可选择他们习惯的样式,包括在同一文档中使用两种形式。
Enter vs. Shift Enter
- Maple中,用户输入了问题,敲击<Enter>键告诉Maple执行计算操作并给出结果。输入“2+2<Enter>”得到结果4。
- Mathematica中,输入“2+2<Enter>”将会把光标移到下一行,不会作任何计算。需要执行计算,必须敲击<Shift>+<Enter>。这种非标准的输入需要用户改变他们的习惯。
排版
Maple的数学表达式与教科书中的排版一样,易于阅读和理解。
Mathematica中,即使使用传统样式,仍然与教科书的标准不同。如变量名没有使用斜体。对很容易理解的表达式,也难以快速理解。
文字与计算结果合并
- Maple的 中很容易将文字和数学合并到同一个句子中。甚至可以将计算结果放到句子中间,因此当计算结果改变时,这些语句可以自动更新。如下图,当改变函数定义并重新运行文档时,得到新的结果。
- Mathematica中不能用这种方式实现文本和数学结果的合并。你可以在一个单元中显示文本和静态公式,但不能显示计算结果。如果计算结果改变了,必须手动编辑进行修改。
撤消操作
- Maple的中,你可以在你的文档中撤消或重做文本,绘图和其他可视化的改变,包括数学计算或绘图操作的视觉效果。可以撤消很多步操作,而不仅仅是最近的一个操作。
- Mathematica中你只能撤消最近的一个基本编辑操作(如剪切,复制,输入文本)。你不能重做未完成的操作,或撤消最近的多个操作。如果需要撤消多个操作,唯一的办法是返回到文件的早期版本(保存过的文件)。
Clickable Math^TM(可点击数学)
从1998年开始引入的数学操作的环境敏感的智能菜单,到今天扩展到指导,任务模板,Math Apps,Smart Popups等更多应用中,Maple的可点击数学方法颠覆了数学教学与学习。
下面的示例使用Maple的Drag-to-Solve求解线性方程,教学生如何操作,移动子项并执行等号两边的操作。为从等号的一边移动子项到另一边,学生只要简单拖动这部分,Maple会执行学生所期望的操作。
Drag-to-Solve^TM
学生也可以使用Maple中的智能化菜单直接得到计算结果:
Mathematica中,不能通过拖曳的方式一步步实现计算。为实现上述计算,必须输入公式,选择菜单项直接得到结果。
示例:子项的菜单操作
Maple中,可以对整个表达式或一个子项进行数学操作。这允许你用不同的形式重写部分表达式,作为求解过程中的一步。你可以使用三角恒等式对sec(x)操作:
Maple中也可以对子项绘图。例如,你想提醒学生表达式中有时分母会为0,可以使用智能弹出预览特性,快速预览分母的图形,如图。
Mathematica中,使用菜单不可能对子项进行操作。
轻松创建互动式应用程序(互动课件、智能计算书)
在Maple中,你可以拖放GUI元件(滑动条、按钮、数学、画图等)到Maple文件中快速创建复杂的互动式应用程序,然后使用菜单定义属性。
相比,Mathematica需要使用GUIKit工具包使用编程方式创建相似的应用程序,对用户的编程知识和经验要求较高。
数学计算功能的优势
Maple的数学引擎由有才干的工程师和遍布全球的研究实验室的专家合作开发。这种合作让Maplesoft提供先进的数学算法应用于各领域。
- 微分方程:Maple求微分方程的符号解的能力无人能敌。最著名的教材,Kamke的《微分方程》(Differentialgleichungen)中的1345个可解的线性和非线性常微分方程中,Maple可得到其中97.5%的符号解,所花时间为43分钟,而Mathematica只能求解其中的79.8%,并且需要花费7小时8分钟。
- 因式分解:因式分解是一种重要的,常用的表达式化简方法。对数学研究者来说,找到大型多项式的不可约因子为洞察其相关数学结构提供重要手段。Maple使用最新的研究文献中的成果成功解决了具有挑战性的大型多项式因式分解问题。Zimmermann的《多项式因式分解的挑战》提出了八个问题代表难以分解的八类多项式。Maple可解决所有问题,五个问题少于20秒,其他三个也少于80秒。而Mathematica求解三个少于2秒,二个接近一个小时,另外三个计算一个小时后终止,未得到答案。
- 物理:Maple提供最全面的支持用于本科,研究生和研究级别的物理用数学软件包。它覆盖矢量分析, 张量分析,量子态矢量微积分,经典和量子场论等,同时提供自然的输入和教科书质量的结果显示。与此相反,Mathematica不能处理反交换和非交换变量,不能处理物理中的大多数专业规则和运算符,也不支持输入输出中的传统物理学符号。
- 微分几何:Maple的微分几何支持覆盖了广泛的领域,从喷气计算到广义相对论背后的数学。它也包含一系列的微分几何教程,包括初级和高级专题。Mathematica不提供任何的函数支持微分几何。
学生使用数学软件不仅仅是为得到最终答案,他们需要通过软件工具了解问题背后的概念。Maple提供的各种功能,如Drag-to-Solve,智能菜单,任务模板和Smart Popup,让学生一步步解决问题而不需要输入命令。此外,Maple的学生包给学生提供一个学习环境,使
用和课堂上老师一样的方法,探索和强化基本概念。
Mathematica没有这样的一步步求解工具。最接近的是Wolfram/Alpha中的”Show Steps”, 它不在Mathematica中,必须通过浏览器访问。此外,它的功能不是交互式的,它显示最终答案和中间的步骤,不允许学生一步步尝试他们的问题。
Maple学生包的另一个优势是,所执行的计算考虑到了学生的水平。这样避免了返回的结果超出了学生的知识范围。例如,在计算向量欧式范数时,使用不同函数包结果如下:
Mathematica没有这样的能力更具学生特定的知识和能力给出相应的解,它只能给出通解。这样,指导老师需要花费更多的时间向学生解释所不期望的结果。
编程
函数 vs 过程编程
Maple中,你可以编写脚本和程序,与其他的过程化编程语言类似,如C,Java,Fortran,Visual Basic等。它也包含来自于函数和面向对象编程的很多元素,让你选择最适合你的问题和编程风格的方法。
Mathematica也支持不同的编程风格,但是主要是函数化的方法。这种方法难以读,写和调试。
检测错误
语法错误是编程中常见的错误。编译器或翻译器的任务是帮助程序员查找错误并尽可能简单地改正。下面的一个简单程序,因缺少分号,Maple会很快定位到这个语法错误并将光标移到这个位置,而Mathematica不能得到所期望的答案,也没有任何提示信息。
并行编程
- Maple是唯一在你的程序中使用多线程的计算系统。Maple编程语言可直接加载和控制线程,基于任务的编程模型简化了线程管理。Maple的任务编程模型减少和消除了标准线程编程的困难,中等级别的程序员即能充分利用计算机的处理能力。
- Mathematica中的并行编程涉及新的数学内核,需要额外的内存和资源,以及节点间复杂的消息传递,这种方式的并行编程和调试将花费更长时间,更多的编程经验。
- Maple的多线程编程对核的数量没有限制。
- Mathematica限制核的数量为4,除非购买额外的许可。
其他编程问题
- 调试:都可以设置断点和单步执行代码。Maple中,可在程序停止处计算任意表达式,以便于评估,检查和调试代码。Maple还可以逐步调试内置库的程序,如同用户自己的代码一样。这两点Mathematica做不到。
- 编写脚本:Maple 和Mathematica都提供基于解释器的非图形用户界面,这对程序员来说很有用,通常他们会用自己喜欢的编辑器作代码开发。通常Maple会显示错误信息,而Mathematica不显示,这样用户调试代码会很困难。
数值
Maple的数值模型源自IEEE/754浮点标准,该标准扩展了Maple的一致性覆盖更高的精度和更复杂的浮点计算。这个数值模型被软硬件行业接受,并被深入理解和接受。Maple的计算结果可以与使用相同国际标准的系统的结果用同一种方法比较。例如,Matlab中的算法代码可导入到Maple中并得到相同的结果。此外,选择Maple的决定总是查阅了标准文档后作出的。
Mathematica使用的数值模型派生自一个“有效位运算”的东西,不是国际标准,而且细节也未公布。其他系统写的算法在Mathematica中实现时常会得到不同结果,而且差别是不可预测的。虽然每种系统在浮点运算上有其固有的优势和弱点,Maple的模型的优势是易于理解,且经过了可识别的问题验证。相反,Mathematica的专有模型意味着错误的结果不是总能预测或检测。
示例(来自加州大学伯克利分校的Richard Fateman):一个递归序列定义为
收敛于1/3,程序如下:
Mathematica的程序中最后输出
显然不是1/3的近似。可以看到,Mathematica没有任何警示信息给用户。这些意外的结果不是软件的bug造成的,而是其使用的浮点模型导致的。
性能
Maple是世界上最快的符号计算引擎。很多对标分析表明很多基本运算,如多项式计算,Maple的速度快很多,而且每个版本都有更多改进。多项式计算似乎不会出现在许多日常应用中,事实上,它是几乎所有符号算法的核心,如求解方程或积分。
求解方程的符号解是一项基本操作。从多项式求解文献中找到50个小型的多项式,Maple用少于50秒的时间求解了所有问题,Mathematica只能求解其中的26个,时间也更长。另外24个问题,5分钟内未得到结果而终止计算。
应用程序接口
Maple提供了许多应用程序接口与其它标准工具和语言连接。因此,无论你用什么工具,都可以利用Maple强大的数学计算环境。
代码生成
代码生成功能将计算公式和程序转换为不同的编程语言。你可以使用Maple或Mathematica开发原始的方案或算法,然后导出成其他语言,作为正在开发的大型项目的一部分。
Maple可以生成Visual Basic,MATLAB,Java,C,C#和Fortran代码。包含自动类型推导,自动类型转换,方程化简分析和代码优化。Maple的目标是容易的将代码集成到你的代码中。为最大化的保证兼容性,Maple坚持导出的C代码符合ANSII C标准。
Mathematica可以导出C或Fortran代码,但不能直接使用,因为它不是标准的C或Fortran代码。
示例
上图中,Mathematica生成的代码将Sin[]的方括号转换成了圆括号,但正弦和平方根函数首字母大写,因此必须用一个宏文件(mdefs.h)装换成对等的C语言。即使这样,还不够,见下图示例。
函数arctanh(x)不是标准C数学库的部分,Maple自动将其转换为C中对等的表达,而Mathematica不变,因此即使使用宏文件转换也不能使用。
生成Fortran语言也与此类似。Maple生成的代码可以马上直接使用,Mathematica生成的代码需要编译成单独的定义文件,也不是总能生成可工作的代码。此外,Maple还会考虑Fortran编译器在行格式和变量名长度上的限制。
因为Mathematica没有考虑这些因素,因此生成的代码需要后处理后才能工作。
MATLAB接口
Maple紧密集成在MATLAB中,直接调用对方所有的命令,变量和函数并工作在对方环境中。可以将MATLAB代码转换成Maple代码,或从Maple表达式和程序生成MATLAB代码。
Mathematica不支持任何内建联系。第三方工具提供调用MATLAB函数或生成MATLAB代码功能,但不被Wolfram Research支持。代码生成工具有十多年没有更新了。不支持相互的通讯和代码转换。
CAD接口
Maple提供参数化的双向接口连接SolidWorks,AutoDesk Inventor和NX CAD系统,可以从CAD文件中获取参数进行分析和优化,并将新的值返回到设计中。交互式助手和编程API都支持该功能用于重新配置和优化。
Mathematica提供工具导出3D对象成CAD格式,但不提供两种产品中的主动连接。没有办法从CAD图形中获取参数,也不可能将新的参数值直接推送到CAD设计中。
开放性
Maple和Mathematica的数学引擎有相似的架构:用C 或C++编写内核,用Maple或Mathematica编程语言编写的大型预定义函数库 。
Maple大约95%的功能是用Maple编程语言开发,每个用户都可以察看这些预定义库的源代码,这对了解Maple内部机制很有用。Maple的调试器允许用户一步步查看对于给定输入的函数库的表现。事实上,用户不仅可以查看这些代码,还可以修改或拓展这些代码以实现自定义的功能。
Mathematica中所有的内置库由Mathematica编程语言开发,但对用户是隐藏的。源代码存储在专有文件格式.mx文件中。用户不能查看这些代码,也不可能使用Mathematica调试器逐步运行它们。因为代码是不可见的,也不可能自定义Mathematica库程序。