声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1058|回复: 1

[编程技巧] M函数的基本结构分析

[复制链接]
发表于 2008-4-29 14:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x

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列的矩阵,但不返回任何矩阵。
%
% Designed  by 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;
    elseif  nargin ==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 编辑 ]

评分

1

查看全部评分

回复
分享到:

使用道具 举报

发表于 2008-5-9 17:49 | 显示全部楼层
好东西  谢谢楼主的分享
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-18 04:52 , Processed in 0.071633 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表