12 MATLAB编译器和API
几乎所有使用过 MATLAB 的科技人员,无不为该软件的简洁、便捷和功能之强大和可靠所震撼,同时也对 MATLAB 产生了新的期望:一,希望程序能运行得更快;二,希望获得可摆脱 MATLAB 环境而独立运行的可执行软件;三,希望从其他“非 MATLAB ”的外部程序中调用 MATLAB 。
本章前 6 节介绍 MATLAB 版编译器( Compiler )。由于 1.2 版与 2.0 版差异较大,又由于 2.0 版缺少 1.2 版具有的优化功能,因此内容安排上将兼顾地论及两个版本。值得指出的是:除 Mathworks 外,还有其他一些公司生产的编译器,其中比较著名的是 MathTools 公司的 Mediva ;据该公司自称,性能优于 Mathworks 的,且具有绘图功能。
本章第 7 节论及 API 应用程序接口,扼要地介绍不同平台间的数据传送和 MATLAB 引擎技术。节后算例演示了,如何从外部调用 MATLAB 引擎。
12.1 编译器2.0概述
12.1.3 编译器2.0的局限性
12.1.4 把脚本文件改写为函数文件
【例 12.1.4 -1 】有一个绘圆的 M 脚本文件 circle.m 如下。希望获得一个 MEX 绘圆程序。
(1)原始的绘圆脚本文件
[circle.m]
clf;r=2;t=0:pi/100:2*pi;x=r*exp(i*t);
plot(x, 'r*' );axis( 'square' )
(2)对这脚本文件直接编译将因错误而失败
mcc -x circle
??? Error: File "circle" is a Script M-file and cannot be compiled with the current Compiler.
Error in ==> H:\MATLAB53\toolbox\compiler\mcc.dll
(3)把脚本文件改写成函数文件。
[circle_f.m] :
function circle_f(r)
clf;t=0:pi/100:2*pi;x=r*exp(i*t);
plot(x, 'r*' );axis( 'square' )
(4)再对 circle_f.m 进行编译,将顺利通过。
mcc -x circle_f %mcc 是编译指令,详见 12.4 节。
(5)运行生成的 MEX 文件 circle_f.dll
circle_f(0.5) % 调用 circle_f 绘制一半径为 0.5 的圆
which circle_f % 查询所调用的 circle_f 的路径全称。
d:\mywork\circle_f.dll

图 12.1.4 -1 MEX 文件 circle_f.dll 所画的圆
|