Matlab 函数文件简介

在matlab中,M文件分为脚本文件和函数文件。如果M文件的第一个可执行语句以function开头,那么这个M文件就是函数文件。

脚本文件与函数文件的区别

  • 脚本文件只是存储在文件中的 matlab 语句的集合。执行脚本文件时,结果与所有命令直接输入命令窗口时的结果相同。
  • 脚本文件执行完后创建的任何变量都将保留在工作空间中。而函数文件内定义的变量为局部变量,只在函数文件内部起作用,当函数文件执行完后,这些内部变量将被清除。
  • 脚本文件没有输入参数,也不会返回任何结果。

函数文件的形式

通常,函数文件由函数声明行、H1行、在线帮助文本区、编写和修改记录、函数主体等几个部分组成。一般形式如下:

function [outarg1,outarg2,…] = fname(inarg1,inarg2,…)
% H1 comment line
% Other comment lines

end

语句 function 作为函数开始的标记,并指定函数的名称与输入和输出参数列表。

  • MATLAB中的函数文件名必须以字母开头,可以是字母、下划线、数字的任意组合,但不可以超过31个字符。
  • 输入参数列表在函数名后面的圆括号中,输出参数列表在等号左边的方括号中。(如果只有一个输出参数,则可以删除方括号。)

函数名应当与文件名一致(保存函数文件时会默认以函数名作为文件名予以保存),如果两者不一致,MATLAB将以文件名为准,以后调用时使用文件名调用该函数。例如,函数名为 My_fun,则该函数应保存在名为 My_fun.m 的文件中。

H1注释行是紧随函数声明之后的以“%”开头的第一条注释行。其包括大写的函数名和函数功能简要描述,采用 lookfor 命令可在命令行窗口显示H1行的信息。

函数的调用

在表达式中调用函数,需要函数名和实参列表。直接在命令窗口中输人函数名,或将其包含在脚本文件或其他函数中来调用函数。调用程序中使用的名称必须与函数名(包括大小写)完全一致。当函数被调用时,第一个实参的值替代第一个形参, 以此类推,其他的实参/形参对。

执行从函数的顶部开始,并在返回语句、结束语句或函数末尾时结束。由于执行在函数末尾时自动停止,所以在大多数函数中实际上并不需要return语句,且很少使用。

例:完整的函数文件示范。

function [W_box, H_box, bdown, MStitch] = Fun_Match(im2, MStitch)
% 图像匹配
% 输入参数:
% im2——待匹配图像
% MStitch——参数结构
% 输出参数
% W_box——宽度信息
% H_box——高度信息
% bdown——上下信息
% MStitch——参数结构

Pwidth = MStitch.Pwidth;
Pheight = MStitch.Pheight; 
W_min = MStitch.W_min; 
W_max = MStitch.W_max;
H_min = MStitch.H_min; 
minval = MStitch.minval; 
im1 = MStitch.im1;
[Fheight, Fwidth] = size(im2);

hw = waitbar(0, '图像匹配进度:', 'Name', '图像匹配……');
w_ind = 64; h_ind = 151;
for w = W_min : W_max
    for h = H_min : Fheight
        imsum = 0; 
        x2 = 1;
        for x1 = Pwidth-w : 5 : Pwidth
            y2 = 1;
            for y1 = Pheight-h+1 : 5 : Pheight
                [x1, y1] = CheckRC(x1, y1, im1);
                [x2, y2] = CheckRC(x2, y2, im2);
                imsum = imsum + abs(im1(y1, x1) - im2(y2, x2));
                y2 = y2 + 5;
            end
            x2 = x2 + 5;
        end
        if imsum*5*5 < minval*w*h
            minval = imsum*5*5/(w*h);
            w_ind = w;
            h_ind = h;
        end
    end
    rt = 0.5*(w - W_min)/(W_max - W_min);
    waitbar(rt, hw, sprintf('图像匹配进度:%i%%', round(rt*100)));
end
W_box = w_ind-1;
H_box = h_ind+1;
bdown = 1;
if H_box < size(im2, 1)
    H_box = size(im2, 1);
end

for w = W_min : W_max
    for h = H_min : Fheight
        imsum = 0; 
        x2 = 1;
        for x1 = Pwidth-w : 5 : Pwidth
            y1 = 1;
            for y2 = Fheight-h+1 : 5 : Fheight
                [x1, y1] = CheckRC(x1, y1, im1);
                [x2, y2] = CheckRC(x2, y2, im2);
                imsum = imsum + abs(im1(y1, x1) - im2(y2, x2));
                y1 = y1 + 5;
            end
            x2 = x2 + 5;
        end
        if imsum*5*5 < minval*w*h
            minval = imsum*5*5/(w*h);
            w_ind = w;
            h_ind = h;
            bdown = 0;
        end
    end
    rt = 0.5 + 0.5*(w - W_min)/(W_max - W_min);
    waitbar(rt, hw, sprintf('图像匹配进度:%i%%', round(rt*100)));
end
MStitch.minval = minval;
delete(hw);
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

早知晓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值