MATLAB外部程序接口技术
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第十一章MATLAB外部程序接口技术
11.1M编译器的功用和前提准备
11.2创建MEX文件
11.2.1MEX文件编译的验证
【例11.2-1】验证mex应用程序把C码文件编译成MEX文件的正确性。
(1)先将matlab\extern\examples\mex目录下的yprime.c文件复制到用户自己的工作目录(比方d:\mywork),然后将此文件名改为my_yprime.c。
(2)运行以下指令
cd d:\mywork
mex my_yprime.c
my_yprime(1,1:4)
which my_yprime
ans =
2.0000 8.9685 4.0000 -1.0947
d:\mywork\my_yprime.dll
〖说明〗
应该指出:mex的编译操作也可以象图11.2-1那样在DOS环境中进行,结果相同。
图 11.2-1 在DOS状态下进行编译操作
【例11.2-2】验证mcc应用程序把M码文件编译成MEX文件的正确性。
(1)先将matlab\extern\examples\mex目录下的yprime.m文件复制到用户自己的工作目录(比方d:\mywork),然后将此文件名改为my_yprime_m.m。
(2)运行以下指令
cd d:\mywork %把用户目录指定为当前目录
mcc -x my_yprime_m
my_yprime_m(1,1:4)
which my_yprime_m
ans =
2.0000
8.9685
4.0000
-1.0947
d:\mywork\my_yprime_m.dll
11.2.2由M文件创建C MEX文件的算例
【例11.2-3】先编写一个“判断方阵是否奇异”的M文件,然后由该M文件生成相应的MEX文件。
(1)在MATLAB的编辑器中,编写下面的函数文件exm1.m 。
[exm1.m]
function y=exm1(A)
[m,n]=size(A);
if m~=n;
error('An input matrix should be n-by-n.')
end
r=rank(A);
if r==m
disp('This matrix is nonsigular')
else
disp('This matrix is sigular')
end
(2)把该函数文件存放于用户目录d:\mywork下。
(3)在MATLAB命令窗中,运行以下指令对exm1.m进行编译。
mcc -x exm1 %编译m文件。
(4)调用MEX文件exm1.dll 进行计算
A=[1,0,1;2,1,0;4,1,4]
exm1(A)
which exm1
A =
1 0 1
2 1 0
4 1 4
This matrix is nonsigular
d:\mywork\exm1.dll
【例11.2-4】产生一个绘圆的MEX文件。本例演示:(A)M脚本文件不能被编译;(B)如何把脚本文件改写成函数文件;(C)改写后的M函数文件可被正确编译。
(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
(5)运行生成的MEX文件circle_f.dll
circle_f(0.5)
which circle_f
11.3创建独立的外部应用程序
11.3.1M编译器的预配置
一对M编译器mbuild应用程序的设置
二配置正确性的验证
【例11.3-1】验证mbuild应用程序把C码文件编译成EXE文件的正确性。
(1)先将matlab\extern\examples\cmath目录下的ex1.c文件复制到用户自己的工作目录(比方d:\mywork),然后将此文件名改为my_ex1.c。
(2)在MATLAB指令窗中运行以下指令,将在d:\mywork目录下产生my_ex1.exe。
cd d:\mywork
mbuild my_ex1.c
(3)打开Windows的DOS窗口,并使d:\mywork成为当前目录,运行my_ex1.exe,若得到结果与图11.3-1相同,就表示mbuild应用程序工作正常。
图 11.3-1 在DOS窗口运行验证程序my_ex1.exe所得的结果