MATLAB中M脚本文件和M函数文件的转换
关于编译器的局限,其中一点就是不能直接编译脚本文件,当用户需要对脚本文件进行编译的时候,一种便捷的方法就是先把脚本文件转换为函数文件,才能用MATLAB编译器将M文件转化为MEX文件。将脚本文件转化为函数文件只需要在脚本文件的最上方加上函数的定义即可。下面应用具体实例来介绍脚本文件与函数文件的转换。
例题 脚本文件与函数文件的转换。
在M编辑器中输入:
% shili.m.
>> m=magic(4);
>> n=m.^2;
>> disp(n);
先将该文件保存在某个目录下,并将MATLAB工具栏上的当前目录改为该M文件所在目录,清空Workspace,在命令行输入:
>> shili
则显示结果为:
256 4 9 169
25 121 100 64
81 49 36 144
16 196 225 1
并且发现Workspace中多了两个变量:m和n。在命令窗口直接输入:
>> m
则显示结果为:
m =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
再直接输入n:
>> n
则显示结果为:
n =
256 4 9 169
25 121 100 64
81 49 36 144
16 196 225 1
这正是脚本M文件的中间变量,即是可以访问脚本M文件的中间变量的。再利用mcc命令看看能不能将其编译为MEX文件。
在命令窗口输入:
>> mcc -x shili
则显示结果为:
??? Error using ==> mcc
Error: -x is no longer supported. The MATLAB Compiler no longer generates
MEX files because there is no longer any performance advantage to doing so: the
MATLAB JIT accelerates MATLAB files by default.
To hide proprietary algorithms, use the PCODE function.
出现了编译错误,可见MATLAB编译器不能编译脚本M文件。现在将其转化为函数M文件。在M编辑器输入:
%shili.m.
function n=shili()
m=magic(4);
n=m.^2;
disp(n);
return
运行该函数M文件前应先清空Workspace,运行后发现中间变量m和n没有保存下来,而n矩阵的值是可以得到的,因为它是函数的返回值。在命令窗口输入:
>> a=shili
256 4 9 169
25 121 100 64
81 49 36 144
16 196 225 1
则显示结果为:
a =
256 4 9 169
25 121 100 64
81 49 36 144
16 196 225 1
其中a是返回值n,再使用mcc命令编译该函数M文件。
>> mcc -x shili
编译通过,再运行shili指令得到相同的结果。