MATLAB入门-程序控制结构

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)

这里涉及一个开发规范:

  1. 在matlab中,创建一个函数文件是,要求文件名和函数名一致(方便系统查找);
  2. 在一个函数文件(.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 %%%%%%%%%%%%
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值