
1、首先在电脑中打开matlab软件。
2、在打开的页面中点击“主页”栏目下的“新建”按钮。
3、然后在打开的下拉菜单中选择“函数”选项。
4、即可打开函数编辑器,在其中可以进行函数的输入设置。
5、之后可以点击“编辑器”选项卡中的“保存”按钮将编写的函数文件保存。
一个m文件中定义了多个函数的话,这些函数只能在这个m文件中的函数中调用。
function 函数名
函数内容
end
function 函数名1
函数内容
end
matlab中如何定义函数
首先建立M文件或直接点击(File/New/Function)建立函数文件,其中函数文件的格式是:
function [输出变量] = 函数名称(输入变量)
% 注释
% 函数体
end
编写代码如下并保存文件,注意文件命名时不能以数字开头:
function [s] = eg_sum( n )
% calculate the sum of 1n
s = 0;
for i = 1:n
s = s + i;
end
回到控制台Command Window(主界面),注意要使用之前保存的函数文件名来调用函数,如下所示:
>> clear
>> a = eg_sum(10)
运行结果: a = 55
函数名可以与函数文件名不一致,只要知道调用函数时是通过函数文件名调用的这点即可!如下图所示,即使文件名仍然是eg_sum,但我可以修改函数名为:my_sum 调用时用文件名调用就好,如下所示:
>> b = eg_sum(10)
运行结果: b = 55
以一幅uint8类灰度图像为例,原图:
直接使用laplacian滤波模板滤波:
>>
f=imread('moontif');
>>
w=fspecial('laplacian',0)
>>
g1=imfilter(f,w,'replicate');
>>
imshow(g1)
效果并不理想,因为原图是一幅uint8类图像,输出结果仍为uint8类,所有像素均为正值,而拉普拉斯滤波模板中存在负值,变换结果中的所有负值被截掉了。
解决此问题,须先进行类型变换:
f2=im2double(f);
%将f转换为归一化的double类图像
然后再进行滤波:
>>
g2=imfilter(f2,w,'replicate');
>>
imshow(g2,[])
在editor中独立m文件创建函数,有特定的函数头的啊,文件名称是函数名。调用直接可以在其他的m文件中使用,也可以在comman命令窗中调用,但是得保证找得到你所定义的m函数的文件(路径需要特定的)
%试试nargin nargout
function [y1,y2]=fun(x1,x2)
%函数定义
if nargin==1&nargout==1
y1=x1;
elseif nargin==1&nargout==2
y1=x1/2;
y2=x1/2;
elseif nargin==2&nargout==1
y1=x1+x2;
else nargin==2&nargout==2
y1=(x1+x2)/2;
y2=(x1+x2)/2;
end
可以,将所有函数都写到一个文件中不过这个文件也只能是函数文件 你可以为你的函数文件先写一个总函数,类似于C语言的main函数然后其它的函数写在后面写在同一个函数文件中的函数是可以互相调用的 例如: function []=main() x = ga(@objfun,nvars,); endfunction output=objfun(x) end 实际上,就是将原来要在命令行里运行的代码或者要写在脚本m文件中要运行的代码写到main函数中当然不一定要命名为main,可以改其它名字只要将该函数放在最先的位置就可以了函数m文件以第一个定义的函数作为主函数而后面可以定义更多的函数,都可以被主函数调用 这样就是将优化函数、约束函数、和主函数写在同一个文件的办法但是,由于主体运行的代码被被封装为一个函数所以不能像脚本m文件那样调用base工作空间中变量生成的变量也不保存在base工作空间中当函数运行完毕,退出的时候,它运行时所产生的变量将会被清空你可以将要输入和输出的变量以函数输入参数和输出参数的形式传递实际上不及用脚本m文件方便但是脚本m文件中是不能用function语句定义函数的
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)