技术标签: 经验分享
表面上,Maple与Mathematica非常相似,本文将从易用性,符号技术和性能上介绍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的数学表达式与教科书中的排版一样,易于阅读和理解。
Mathematica中,即使使用传统样式,仍然与教科书的标准不同。如变量名没有使用斜体。对很容易理解的表达式,也难以快速理解。
从1998年开始引入的数学操作的环境敏感的智能菜单,到今天扩展到指导,任务模板,Math Apps,Smart Popups等更多应用中,Maple的可点击数学方法颠覆了数学教学与学习。
下面的示例使用Maple的Drag-to-Solve求解线性方程,教学生如何操作,移动子项并执行等号两边的操作。为从等号的一边移动子项到另一边,学生只要简单拖动这部分,Maple会执行学生所期望的操作。
学生也可以使用Maple中的智能化菜单直接得到计算结果:
Mathematica中,不能通过拖曳的方式一步步实现计算。为实现上述计算,必须输入公式,选择菜单项直接得到结果。
示例:子项的菜单操作
Maple中,可以对整个表达式或一个子项进行数学操作。这允许你用不同的形式重写部分表达式,作为求解过程中的一步。你可以使用三角恒等式对sec(x)操作:
Maple中也可以对子项绘图。例如,你想提醒学生表达式中有时分母会为0,可以使用智能弹出预览特性,快速预览分母的图形,如图。
Mathematica中,使用菜单不可能对子项进行操作。
在Maple中,你可以拖放GUI元件(滑动条、按钮、数学、画图等)到Maple文件中快速创建复杂的互动式应用程序,然后使用菜单定义属性。
相比,Mathematica需要使用GUIKit工具包使用编程方式创建相似的应用程序,对用户的编程知识和经验要求较高。
Maple的数学引擎由有才干的工程师和遍布全球的研究实验室的专家合作开发。这种合作让Maplesoft提供先进的数学算法应用于各领域。
学生使用数学软件不仅仅是为得到最终答案,他们需要通过软件工具了解问题背后的概念。Maple提供的各种功能,如Drag-to-Solve,智能菜单,任务模板和Smart Popup,让学生一步步解决问题而不需要输入命令。此外,Maple的学生包给学生提供一个学习环境,使
用和课堂上老师一样的方法,探索和强化基本概念。
Mathematica没有这样的一步步求解工具。最接近的是Wolfram/Alpha中的”Show Steps”, 它不在Mathematica中,必须通过浏览器访问。此外,它的功能不是交互式的,它显示最终答案和中间的步骤,不允许学生一步步尝试他们的问题。
Maple学生包的另一个优势是,所执行的计算考虑到了学生的水平。这样避免了返回的结果超出了学生的知识范围。例如,在计算向量欧式范数时,使用不同函数包结果如下:
Mathematica没有这样的能力更具学生特定的知识和能力给出相应的解,它只能给出通解。这样,指导老师需要花费更多的时间向学生解释所不期望的结果。
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库程序。
文章浏览阅读2w次,点赞7次,收藏51次。四个步骤1.创建C++ Win32项目动态库dll 2.在Win32项目动态库中添加 外部依赖项 lib头文件和lib库3.导出C接口4.c#调用c++动态库开始你的表演...①创建一个空白的解决方案,在解决方案中添加 Visual C++ , Win32 项目空白解决方案的创建:添加Visual C++ , Win32 项目这......_c#调用lib
文章浏览阅读4.6k次。苹方字体是苹果系统上的黑体,挺好看的。注重颜值的网站都会使用,例如知乎:font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, PingFang SC, Microsoft YaHei, Source Han Sans SC, Noto Sans CJK SC, W..._ubuntu pingfang
文章浏览阅读159次。表单表单概述表单标签表单域按钮控件demo表单标签表单标签基本语法结构<form action="处理数据程序的url地址“ method=”get|post“ name="表单名称”></form><!--action,当提交表单时,向何处发送表单中的数据,地址可以是相对地址也可以是绝对地址--><!--method将表单中的数据传送给服务器处理,get方式直接显示在url地址中,数据可以被缓存,且长度有限制;而post方式数据隐藏传输,_html表单的处理程序有那些
文章浏览阅读1.2k次。使用说明:开启Google的登陆二步验证(即Google Authenticator服务)后用户登陆时需要输入额外由手机客户端生成的一次性密码。实现Google Authenticator功能需要服务器端和客户端的支持。服务器端负责密钥的生成、验证一次性密码是否正确。客户端记录密钥后生成一次性密码。下载谷歌验证类库文件放到项目合适位置(我这边放在项目Vender下面)https://github.com/PHPGangsta/GoogleAuthenticatorPHP代码示例://引入谷_php otp 验证器
文章浏览阅读4.3k次,点赞5次,收藏11次。matplotlib.plot画图横坐标混乱及间隔处理_matplotlib更改横轴间距
文章浏览阅读2.2k次。①Storage driver 处理各镜像层及容器层的处理细节,实现了多层数据的堆叠,为用户 提供了多层数据合并后的统一视图②所有 Storage driver 都使用可堆叠图像层和写时复制(CoW)策略③docker info 命令可查看当系统上的 storage driver主要用于测试目的,不建议用于生成环境。_docker 保存容器
文章浏览阅读834次,点赞27次,收藏13次。网络拓扑结构是指计算机网络中各组件(如计算机、服务器、打印机、路由器、交换机等设备)及其连接线路在物理布局或逻辑构型上的排列形式。这种布局不仅描述了设备间的实际物理连接方式,也决定了数据在网络中流动的路径和方式。不同的网络拓扑结构影响着网络的性能、可靠性、可扩展性及管理维护的难易程度。_网络拓扑csdn
文章浏览阅读1.8k次,点赞5次,收藏8次。IOS系统Date的坑要创建一个指定时间的new Date对象时,通常的做法是:new Date("2020-09-21 11:11:00")这行代码在 PC 端和安卓端都是正常的,而在 iOS 端则会提示 Invalid Date 无效日期。在IOS年月日中间的横岗许换成斜杠,也就是new Date("2020/09/21 11:11:00")通常为了兼容IOS的这个坑,需要做一些额外的特殊处理,笔者在开发的时候经常会忘了兼容IOS系统。所以就想试着重写Date函数,一劳永逸,避免每次ne_date.prototype 将所有 ios
文章浏览阅读5.3k次。方法一:用PLSQL Developer工具。 1 在PLSQL Developer的sql window里输入select * from test for update; 2 按F8执行 3 打开锁, 再按一下加号. 鼠标点到第一列的列头,使全列成选中状态,然后粘贴,最后commit提交即可。(前提..._excel导入pl/sql
文章浏览阅读83次。Git常用命令速查手册1、初始化仓库git init2、将文件添加到仓库git add 文件名 # 将工作区的某个文件添加到暂存区 git add -u # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,不处理untracked的文件git add -A # 添加所有被tracked文件中被修改或删除的文件信息到暂存区,包括untracked的文件...
文章浏览阅读202次。分享119个ASP.NET源码总有一个是你想要的_千博二手车源码v2023 build 1120
文章浏览阅读1.8k次。版权声明:转载请注明出处 http://blog.csdn.net/irean_lau。目录(?)[+]1、缺省构造函数。2、缺省拷贝构造函数。3、 缺省析构函数。4、缺省赋值运算符。5、缺省取址运算符。6、 缺省取址运算符 const。[cpp] view plain copy_空类默认产生哪些类成员函数