• 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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    然后在命令窗口中输入以下代码来测试:

    values=[12.7, 45.4, 98.9, 26.6, 53.1];
    [ave,stdev]=stat(values)
    
    • 1
    • 2

    运行结果为:
    在这里插入图片描述

    一个文件里定义多个函数

    例如:把上面的两个函数都存储在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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    但是,**从命令窗口中只能调用第一个函数stat2,而第二个函数avg只能在stat2.m中被其他函数调用,不能在命令行中被调用。**所以在命令窗口中只能输入以下代码:

    values = [12.7, 45.4, 98.9, 26.6, 53.1];
    [ave,stdev] = stat2(values)
    
    • 1
    • 2

    这里涉及一个开发规范:

    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    这样一来,就可以直接运行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 %%%%%%%%%%%%
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
  • 相关阅读:
    【应用】布隆过滤器
    网工内推 | 急招网工,思科、华为认证优先,法定节假日三薪
    【第46篇】RepVGG :让卷积再次伟大
    高效模拟,灵活扩展!GNSS模拟器的多实例应用浅析(二)
    了解如何利用来自 ADAudit Plus 的基本用户登录报告:登录失败
    【Linux-Windows】千兆网口以及千兆网线
    初级java 面试时经常会问到的问题!
    产品经理的薪资待遇凭什么这么高?看完你就明白了
    zookeeper动态扩缩容(无需重启)
    c# 异步进阶———— 自定义 taskschedule[三]
  • 原文地址:https://blog.csdn.net/m0_47484802/article/details/132819112