Mathematica 9 is now available
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.
Mathematica > 系统界面与配置 > 调用外部程序 > Compile >

Compile

Updated In 8 Graphic
Compile
创建一个经过编译的函数,已知 的数值对 expr 求值.
Compile
假定 的类型与 匹配.
Compile
假定 是秩为 的对象数组,每个对象的类型都与 匹配.
Compile
假定 expr 中匹配 的子表达式的类型与 匹配.
_Integer机器整数
_Real机器精度的近似实数(缺省)
_Complex机器精度近似复数
True | False逻辑变量
  • 作为经过编译的函数的输入给出的嵌套列表必须是全数值数组.
  • Compile 处理数值函数、矩阵运算、程序式编程结构、列表操作函数以及函数式编程结构等等.
  • 经过编译的代码处理数值精度和局部变量的方式与普通的 Mathematica 代码不同.
  • 如果不能用经过编译的代码对有特殊参数的经过编译的函数求值,则使用普通的 Mathematica 代码代替.
  • 普通 Mathematica 代码可以从经过编译的代码内部调用. 由 Mathematica 代码获得的结果假设是近似实数除非特别指明,否则由 Compile 的第三个参数指定.
  • Compile 计算的对象的次数和次序可能和普通的 Mathematica 代码不同.
  • Compile 有属性 HoldAll,在默认情况下在编译前并不进行计算.
  • 可以使用 Compile[..., Evaluate[expr]] 指定 expr 应当在编译前进行符号性计算.
  • 可以给出下列选项:
CompilationOptionsAutomatic编译过程的选项
CompilationTarget$CompilationTarget代码产生的目标运行时间
ParallelizationAutomatic经过编译的函数执行的并行控制
RuntimeAttributes{}经过编译的函数的计算属性
RuntimeOptionsAutomatic经过编译的函数的运行时间选项
对于机器实数 x,编译函数 Sin[x]+x^2-1/(1-x)
CompiledFunction 用机器数进行计算:
绘制经过编译的函数:
对于机器实数 x,编译函数 Sin[x]+x^2-1/(1-x)
In[1]:=
Click for copyable input
Out[1]=
CompiledFunction 用机器数进行计算:
In[2]:=
Click for copyable input
Out[2]=
绘制经过编译的函数:
In[3]:=
Click for copyable input
Out[3]=
编译函数对 进行牛顿迭代并且指出最近的根:
绘出三个根的吸引域:
通过避免计算同样的结果超过一次,Automatic 的默认设置产生效率更高的代码:
当优化水平降低,生成效率较低的代码:
下面产生 C 代码并且链接回源代码以便执行:
下面是一个更大的例子,表示C代码生成的速度优势:
默认操作运行得更慢:
可列表的经过编译的函数使用线程并行执行:
以下显示依次运行操作:
通常,$ProcessorCount 用来确定要使用多少线程:
用户可以使用 C 代码生成和并行操作结合起来,以获得更快的操作:
以下创建一个可列表的(listable)经过编译的函数:
它以正常方式在单个输入上进行操作:
当变量包含与输入规格不匹配的列表,它线性作用于变量:
如果存在一个分支,可列表性(listability)需要定义一个函数,如下所示,使用 Function
可列表的经过编译的函数是等价的,但是执行得更加快速:
可列表的经过编译的函数可以并行运行,在多核机器上加速:
使用可列表属性通常比多次调用 CompiledFunction 更快:
利用并行化可以给出一个更大的加速:
结果是相同的:
对于 的牛顿方法的吸引盆的详细图示:
通常,整数算术溢出被捕获,并且计算切换到使用 bignums:
关闭溢出检查使得执行更加快速,但是结果可能是不准确的:
Perlin 噪声是一种用于生成过程纹理的常见算法:
下面定义了 Perlin 噪声函数的参数,并且使用 Perlin 函数生成一个地形过程纹理:
这个噪声函数在具有不同的参数和颜色集合时可以模拟木纹效果:
用户可以把纹理应用到三维对象:
版本 2 的新功能 | 版本 8 修改功能
Ask a question about this page  |  Suggest an improvement  |  Leave a message for the team
格式:   HTML  |  CDF