Wolfram 语言支持哪些类型的计算机算法?
Wolfram 语言支持三种类型的计算机算法:
每种算法都有其各自的优点和缺点,并且了解何时使用从而得出最快和最准确的结果是任何 Wolfram 语言程序员工具箱的重要组成部分。本文档主要提供了每种类型的一般性概述,没有深入探讨所有技术细节。更多细节可通过链接在 Wolfram 语言文档中找到。
机器精度算法
当输入带小数点的数字(例如 4.2 或 1)或使用单个参数 N 函数(例如 N[1/2])时,将使用机器精度算法。在大多数现代计算机上,机器精度算术会产生大约 16 位尾数(小数点后的数字)。
使用机器精度算法的主要优势是速度。高精度的数值计算通常比机器精度的计算慢许多倍。
尽管机器精度计算速度很快,但应避免用于使用非常大或非常小且精度要求严格的数字(改为使用高精度)或需要符号结果(改为使用无限精度)的情况。
还值得注意的是,在使用机器精度时,不会跟踪舍入误差。这样做是为了提高速度,但可能导致错误的结果。例如,Out[1] 在以下情况是不正确的:
In[1]:= N[Sin[10^50]]
Out[1]= -0.4805
In[2]:= N[Sin[10^50], 20]
Out[2]= -0.78967249342931008271
Wolfram 语言的大多数内置数学函数提供的输出最匹配给定输入的精度。如果为这些功能提供机器精度输入,则它们将给出机器精度输出,例如:
In[3]:= Sin[4.2]
Out[3]= -0.871576
In[4]:= Precision[%]
Out[4]= MachinePrecision
同样,如果在单个计算中将机器精度输入与任意精度或无限精度输入组合在一起,则将给出机器精度结果:
In[5]:= 3 + 4.5
Out[5]= 7.5
In[6]:= Precision@%
Out[6]= MachinePrecision
数值运算符(NIntegrate, NSum, NDSolve 等)默认情况下返回机器精度。
高精度算法
使用高精度算法数值进行计算时,Wolfram 语言会跟踪所有点的精度。通常,Wolfram 语言会根据给定的输入精度,尝试为您提供尽可能高的精度结果
高精度数值通常用 N 函数及其第二参数生成。例如,N[Pi, 20] 给出 Pi 的20位精度(3.1415926535897932385)的数值结果。
高精度对于需要高度精度的计算(包括处理非常大或非常小的数字)很有用。但是,高精度计算比机器精度计算要慢,因此在不需要高精度时,通常不使用高精度数值。
与机器精度数字一样,如果您向内置数学函数提供高精度输入,则将获得高精度输出,例如:
In[1]:= N[7, 30]^2
Out[1]= 49.0000000000000000000000000000
In[2]:= Precision[%]
Out[2]= 29.699
结合机器精度和高精度输入将产生机器精度输出。因此,将不会跟踪错误.
计算高精度表达式的有效方法是使用 SetPrecision:
In[3]:= SetPrecision[1.9658*(1.23423423/500 + 600/3.9879), 20]
Out[3]= 295.76954069704845551
您可以通过设置其 WorkingPrecision 选项来强制数值运算符(NIntegrate、NSum、NDSolve 等)使用高精度。
无限精度算法
当已知精确输入且期望精确输出时,或当以代数方式操纵表达式时,将使用无限精度算法。
Rationalize 是将浮点数转换为精确数字的有效函数。
如果您对内置数学函数提供了无限精度输入,则将获得无限精度输出,例如:
In[1]:= Cos[Pi]
Out[1]= -1
In[2]:= Precision[%]
Out[2]= \[Infinity]
将无限精度和机器精度输入相结合将产生机器精度输出。
[English]
1-800-WOLFRAM (+1-217-398-0700 美国境外用户)
客服支持
周一至周五
8am–5pm 美国中部时区
- 产品注册或激活
- 预售信息和订单
- 安装帮助和首次启动
高级技术支持 (面向特定用户)
周一至周四
8am–7pm 美国中部时区
周五
8:30–10am & 11am–5pm 美国中部时区
- 优先技术支持
- Wolfram 专家助理专员
- Wolfram 语言编程帮助
- 高级安装支持