注:本篇文章为课程学习笔记,课程链接为:头歌
相比于C语言,这里多了一个end
带参数的函数具体的使用方法为:function[y1,……yn]=myfun(x1,……,xm)
其中y1,……,yn表示函数运行后的输出值,x1,……,xm表示调用函数时的输入值,function是必须有的标志。
可以理解:这里的function就是函数头
例如:求平均值的函数,将文件保存为average.m,并输入以下代码:
这是一个返回一个值的函数,在命令窗口输入以下代码来测试:
其结果为:
对于返回多个值的函数,可以写成如下形式,创建一个stat.m文件,并输入:
function[m,s]=stat(x)
n=length(x);
m=sum(x)/n;
s=sqrt(sum(x-m).^2/n));
end
然后在命令窗口中输入以下代码来测试:
values=[12.7, 45.4, 98.9, 26.6, 53.1];
[ave,stdev]=stat(values)
例如:把上面的两个函数都存储在stat2.m文件中。输入以下代码:
function [m,s] = stat2(x)
n = length(x);
m = avg(x,n);
s = sqrt(sum((x-m).^2/n));
end
function m = avg(x,n)
m = sum(x)/n;
end
但是,**从命令窗口中只能调用第一个函数stat2,而第二个函数avg只能在stat2.m中被其他函数调用,不能在命令行中被调用。**所以在命令窗口中只能输入以下代码:
values = [12.7, 45.4, 98.9, 26.6, 53.1];
[ave,stdev] = stat2(values)
这里涉及一个开发规范:
为了便于理解,这里把上面的函数整合一下,形成一个新的函数文件test.m:
注:第一个函数名需要与文件名一致。
function test
values = [12.7, 45.4, 98.9, 26.6, 53.1];
[ave,stdev] = stat2(values)
z=1:99;
avg(z,99)
end
function [m,s]=stat2(x)
n=length(x);
m=avg(x,n);
s=sqrt(sum(x-m).^2/n));
end
function m=avg(x,n)
m=sum(x)/n;
end
这样一来,就可以直接运行test.m文件。
把之前的两个关卡中的程序封装成两个函数answer_me和fibonacci,要求输入字符串answer_me的时候运行第一个关卡对应的函数answer_me,输入字符串fibonacci时运行第二个关卡对应的函数fibonacci。让我们一起开始新的内容吧。
%%%%% function_test.m %%%%%
%%%%%构造主函数function_test
function function_test(string,datain) %string是待执行函数名,datain是函数的输入参数
if strcmp(string,'answer_me') %如果是answer_me函数
answer_me(datain); %执行函数,在函数内输出回答
end
if strcmp(string,'fibonacci') %如果是fibonacci函数
fab=fibonacci(datain); %执行函数,返回对应于序号num的斐波那契数
disp(num2str(fab)); %输出对应于序号num的斐波那契数
end
end
%%%%%%%%%% begin %%%%%%%%%
%%%%% 1. 构造函数answer_me(question)
function answer_me(question)
switch question
case '田鸡炖土鸡'
answer='附近有妖气';
case '熟读唐诗三百首'
answer='不会吟诗我不走';
case '天空飘来5个字'
answer='关我什么事';
case 'Who are you'
answer='社会主义接班人';
otherwise
answer='我不认识你';
end
disp(answer);
end
%%%%% 2. 构造函数fab=fibonacci(num)
function fab=fibonacci(num)
f=zeros(1,num);
for n=1:1:num
if(n==1||n==2)
f(n)=1;
else
f(n)=f(n-1)+f(n-2);
end
end
fab=f(num);
end
%%%%%%%%% end %%%%%%%%%%%%