MATLAB入门-程序控制结构
注:本篇文章为课程学习笔记,课程链接为:头歌
if、elseif、else
相比于C语言,这里多了一个end
switch、case、otherwise
相比于C语言,这里也多了一个end,默认字符也不一样。
for循环
for循环的基本用法:
例如:
while循环
while循环的基本用法为:
例如:
循环的嵌套
需要注意的是:有几个循环就有几个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)
这里涉及一个开发规范:
- 在matlab中,创建一个函数文件是,要求文件名和函数名一致(方便系统查找);
- 在一个函数文件(.m)中,可以有多个函数,但是只有第一个函数(与.m文件的文件名一致)可以被工程目录中的其他程序调用,称之为全局函数,而后面的其他函数都只能被当前函数文件中的其他程序调用,不能被文件以外的程序调用,称之为局部函数。
为了便于理解,这里把上面的函数整合一下,形成一个新的函数文件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 %%%%%%%%%%%%