12.3 MATLAB编译器使用入门
12.3.1 由M文件创建C MEX文件的入门算例
【例 12.3.1 -1 】先编写 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) % 调用 exm1 来判断矩阵 A 是否奇异。
which exm1 % 查询所调用的 exm1 的路径和全称。
A =
1 0 1
2 1 0
4 1 4
This matrix is nonsigular d:\mywork\exm1.dll
12.3.2 由M文件创建外部应用程序的入门算例
【 例 12.3.2 -1 】 建立一个脱离 MATLAB 环境,可独立运行的外部程序。该程序的功能是:对于给定矩阵 A ,如果存在 S 使得 S -1 AS= Λ,则要求出一个 S ,否则给出信息说明所给的矩阵 A 不能对角化。
(1)编写两个 M 函数文件: exm2.m 和 exm2_f.m 。(第一个文件是主文件。)
[exm2.m]
- function exm2
- A=[4,0,0;0,3,1;0,1,3];
- S=exm2_f(A)
- [exm2_f.m]
- function S=exm2_f(A)
- [m,n]=size(A);
- if m~=n
- error( ' 输入矩阵应是方阵! ' );
- end ;
- e=eig(A);
- % 检查输入矩阵的特征值是否各异
- same=0;
- for i=1:m-1
- for j=(i+1):m
- if e(j)==e(i)
- same=1;
- end
- end
- end
- % A 可以对角化的条件是 A 具有互异特征值或者 A 为埃尔米特矩阵。
- if any(any((A'-A)))&(same==1)
- error( ' 矩阵无法对角化! ' );
- end
- [v,d]=eig(A);
- S=v;
复制代码
(2)把这两个函数文件存放于用户自己的目录 d:\mywork ,并在 MATLAB 中运行检验。
exm2
S =
1.0000 0 0
0 0.7071 0.7071
0 0.7071 -0.7071
(3)生成独立的外部可执行程序。在 MATLAB 指令窗中,运行如下指令
mcc -m exm2 exm2_f
(4)打开 DOS 窗口,在 d:\mywork 目录下,运行 exm2.exe |