• MATLAB程序设计与应用 4.4 特殊形式的函数


    MATLAB程序设计与应用

    4. 第4章 MATLAB程序流程控制

    4.4 特殊形式的函数

    除了最常用的通过函数文件定义一个函数,MATLAB还可以使用子函数
    此外还可以通过内联函数和匿名函数自定义函数。

    4.4.1 子函数

    在 MATLAB 的函数定义中,如果函数较长,往往可以将多个函数分别写在不同的函数文件中,但有时函数可能很短,可能希望将多个函数定义放在同一个函数文件中,这就存在子函数的定义问题。

    在 MATLAB 中,可以在一个函数文件中同时定义多个函数,其中函数文件中出现的第一个函数称为主函数(Primary Function),其他函数称为子函数(Subfunction),但需要注意的是子函数只能由同一函数文件中的函数调用。在保存函数文件时,函数文件名一般和主函数名相同,外部程序只能对主函数进行调用。例如建立func.m文件,程序如下:

    function d = func(a , b , c)  % 主函数  
    d = subfunc(a , b) + c;
    function c = subfunc(a , b)   % 子函数
    c = a * b;	
    
    • 1
    • 2
    • 3
    • 4

    命令行调用

    >> func(3,4,5)
    
    ans =
    
        17
    
    • 1
    • 2
    • 3
    • 4
    • 5

    注意:同一函数文件中主函数和子函数的工作区是彼此独立的,各个函数间的信息传递可以通过输入输出参数、全局变量来实现。

    4.4.2 内联函数

    以字符串形式存在的函数表达式可以通过 inline函数转化成内联函数。

    >> a = '(x + y) ^ 2';
    >> f = inline(a)
    
    f =
    
         内联函数:
         f(x,y) = (x + y) ^ 2
    
    >> f(3,4)
    
    ans =
    
        49
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    4.4.3 匿名函数

    匿名函数的基本格式:

    函数句柄变量 = @(匿名函数输入参数) 匿名函数表达式
    
    • 1

    其中,函数句柄变量相当于函数的别名,利用它可以间接调用函数:“@”是创建函数句柄的运算符;“@”后面定义了一个匿名函数,包括函数输入参数和函数表达式;函数有多个输入参数时,参数间用逗号分隔。

    >> sqr = @(x) x.^2 %定义匿名函数
    
    sqr =
    
      包含以下值的 function_handle:
    
        @(x)x.^2
    
    >> sqr([1,2,3])
    
    ans =
    
         1     4     9
    
    >> f = @(x,y) x ^ 2 + y ^ 2;
    >> f(3 , 4)
    
    ans =
    
        25
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    也可以通过下列语句给已存在的函数定义函数句柄,并利用函数句柄来调用函数。

    函数句柄变量 = @函数名
    
    • 1

    其中,函数名可以是 MATLAB提供的内部函数,也可以是用户定义的函数文件。

    >> h = @sin % 取正弦函数句柄
    
    h =
    
      包含以下值的 function_handle:
    
        @sin
    
    >> h(pi / 2)
    
    ans =
    
         1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    匿名函数的执行效率要明显高于内联函数,在参数传递方面也要比内联函数方便、高效。内联函数在将来的 MATLAB版本中将被删除,取而代之的是匿名函数,内联函数能实现的,匿名函数完全可以更好地实现,并且调用效率要比内联函数高得多。

  • 相关阅读:
    InnoDB & index页-mysql详解(二)
    塑造元宇宙未来的5项技术
    算法day39|62,63
    采集数据工具推荐,以及采集数据列表详细图解流程
    LeetCode 热题 100 | 二叉树(终)
    JWT生成tonken验证+AOP拦截验证
    FPGA+MCU+SDRAM方案,用于服装厂生产过程中以及设计过程中制作样板,剪裁布料
    汽车维修保养小程序,汽车维修小程序
    基于Spring Boot的精准扶贫管理系统
    JAVA中让Swagger产出更加符合我们诉求的描述文档,按需决定显示或者隐藏指定内容
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/126497218