studyboy 发表于 2008-4-29 14:16

M函数的基本结构分析


M函数由function 语句引导,基本结构为:
function [ out1, out2, out3,... ] = 函数名(in1, in2, in3, ... )
%注释说明语句
输入、返回变量格式的检测
函数体语句

输入和返回的变量个数由 nargin 和 nargout 两个Matlab保留变量决定。返回变量多于一个,用方括号,若为1个,可以省略。
正规的变量个数检测非常有必要,特别是对于要做一个比较复杂的工程来说。
以薛定宇老师书中的生成Hilbert矩阵程序为例:

function A = myhilb(n, m)
% A=MYHILB(N,M)产生一个N行M列的Hilbert矩阵A;
% A=MYHILB(N)产生一个N行N列的Hilbert方阵A;
% MYHILB(N,M)调用格式只显示N行M列的矩阵,但不返回任何矩阵。
%
% Designedby Pro. Dingyu XUE at 30 July,2001
% Modified by studyboy at 29 April, 2008

if nargout>1, error('Too many output arguments.');end
if nargin == 1,m=n;
    elseifnargin ==0 | nargin>2
    error('Wrong number of input arguments.');
end

J=1:double(m);
J=J(ones(n,1),:);
I=(1:double(n))';
I=I(:,ones(1,m));
E=ones(n,m,'double');
A1=E./(I+J-1);

if nargout==1,
    A=A1;
    elseif nargout==0,
      disp(A1);
end

Tips:
1.应当养成一个良好的编程习惯,比如这里对输入变量和返回变量的检测和说明;
2.在Matlab编程中,应尽量使用向量编程,这样可以提高效率。

对比原程序:

A1=zeros(n,m);
for i=1:n
    for j=1:m
      A(i,j)=1/(i+j-1);
    end
end

若n=1000;n=500;比较计算时间:
原程序结果:Elapsed time is 3.469414 seconds.
修改后的结果:Elapsed time is 0.036210 seconds.

可以看出效率有很大的提高。
参考:
1.薛定宇 陈阳泉 基于MATLAB/Simulink的系统仿真技术与应用 清华大学出版社
2.Matlab Help

[ 本帖最后由 ChaChing 于 2009-4-29 20:28 编辑 ]

ljan765 发表于 2008-5-9 17:49

好东西谢谢楼主的分享
页: [1]
查看完整版本: M函数的基本结构分析