wing2 发表于 2006-3-31 14:40

[求助]一个MATLAB编译器的应用实例

我想使用MATLAB的编译器,但由于是新手不太懂,所以想看一下关于这方面实例的应用。请大家帮一下忙。谢谢!

happy 发表于 2006-3-31 19:26

12.3 MATLAB编译器使用入门
12.3.1 由M文件创建C MEX文件的入门算例

【例 12.3.1 -1 】先编写 M 文件,然后生成相应的 MEX 文件。该文件用以判断方阵是否奇异。
cd d:\mywork
(1)在 MATLAB 的编辑器中,编写下面的函数文件 exm1 .m 。

function y=exm1(A)
=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=
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 。(第一个文件是主文件。)

function exm2
A=;
S=exm2_f(A)


function S=exm2_f(A)
=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
=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

wing2 发表于 2006-4-2 08:36

HAPPY教授,非常感谢!

wing2 发表于 2006-4-2 08:38

关于这方面的书那一本较好呢?

happy 发表于 2006-4-2 09:14

《深入浅出MATLAB 7.x混合编程》这本书不错,没见到电子版的,不过买一本还是物有所值的,具体的介绍可以看帖子
http://forum.vibunion.com/thread-4852-1-1.html

happy 发表于 2006-4-3 09:17

用mcc -B sgl 文件名
页: [1]
查看完整版本: [求助]一个MATLAB编译器的应用实例