编程
Maple中,你可以编写脚本和程序,与其他的过程化编程语言类似,如C,Java,Fortran,Visual Basic等。它也包含来自于函数和面向对象编程的很多元素,让你选择最适合你的问题和编程风格的方法。
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没有考虑这些因素,因此生成的代码需要后处理后才能工作。
Maple紧密集成在MATLAB中,直接调用对方所有的命令,变量和函数并工作在对方环境中。可以将MATLAB代码转换成Maple代码,或从Maple表达式和程序生成MATLAB代码。
Mathematica不支持任何内建联系。第三方工具提供调用MATLAB函数或生成MATLAB代码功能,但不被Wolfram Research支持。代码生成工具有十多年没有更新了。不支持相互的通讯和代码转换。
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库程序。
| 留言与评论(共有 0 条评论) “” |