![MATLAB R2022a完全自学一本通](https://wfqqreader-1252317822.image.myqcloud.com/cover/854/47548854/b_47548854.jpg)
2.1.4 函数句柄
在MATLAB平台中,对函数的调用方法分为直接调用法和间接调用法。
● 对于直接调用法,被调用的函数通常被称为子函数。但是子函数只能被与其M文件同名的主函数或M文件中的其他函数调用,一个文件中只能有一个主函数。
● 使用函数句柄对函数进行调用可以避免上述问题。函数句柄提供了一种间接调用函数的方法。创建函数句柄需要用到操作符@。对于MATLAB函数库提供的各种M文件中的函数和使用者自主编写的程序的内部函数,都可以创建函数句柄,从而可以通过函数句柄来实现对这些函数的间接调用。
创建函数句柄的一般句法格式为:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_46_6.jpg?sign=1739703264-34WpqqhviLeUjcmjTuktyXe94bpHSLuF-0-80a57ecbbef178afed057e1e6d436096)
其中各参数的含义如下。
● Function_Filename是函数对应的M文件的名称或MATLAB内部函数的名称。
● @是句柄创建操作符。
● Function_Handle变量保存了这一函数句柄,并在后续的运算中作为数据流进行传递。
例如,F_Handle=@cos就创建了MATLAB内部函数cos的句柄,并将其保存在F_Handle变量中,在后续的运算过程中可以通过F_Handle(x)来实现cos(x)的功能。
在通过函数句柄调用函数时,也需要指定函数的输入参数。例如,可以通过F_Handle(arg1,arg2,…,argn)这样的调用格式来调用具有多个输入参数的函数。
对于那些没有输入参数的函数,在使用函数句柄调用时,在函数句柄变量之后的圆括号中不填写变量名即可,即F_Handle()。
例2-11:函数句柄的创建与调用。
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_47_1.jpg?sign=1739703264-ErZju0eMjC3GDjZOv8mqoUorYy4bpFbi-0-0073ce7c51d4a4a9da729e351d38048b)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_47_2.jpg?sign=1739703264-ZrKC8D5STrCdNyBHN4Ei6sAWf6mbbsTY-0-b0525778f8c81dfded5565b934bed572)
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_47_3.jpg?sign=1739703264-8gyBxC3x8ZjZDVdZRpTwpAhpV7Cwnldm-0-693f1a9251d6db4890b518a65e9566ed)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_47_4.jpg?sign=1739703264-Vf2fbowGH7lzhrtWnxaYOym7XYoQYOrp-0-18f06f1a2a13d5e0ccb9d3147aff1070)
MATLAB库函数中提供了大量关于函数句柄的操作函数,将函数句柄的功能与其他数据类型联系起来,扩展了函数句柄的应用。函数句柄的简单操作函数如表2-9所示。
表2-9 函数句柄的简单操作函数
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_47_5.jpg?sign=1739703264-07Nj77Flt11NuebgwCeQ4jDrc0F5ZHca-0-e6e710bce861729e42847f7ad60b2a94)
例2-12:函数句柄的基本操作。
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_47_6.jpg?sign=1739703264-EGCkeb8UUYxXdNCGjNV87jcfrtkXiyvs-0-931c4666bf702470fd0eb1f5a370407e)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_47_7.jpg?sign=1739703264-HKOxdxGs2CiO2b4SILbxJ76acQfbLVoA-0-9877d6692caaceb51df138246e8cd156)
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_47_8.jpg?sign=1739703264-kfKSDCIcqHfXyZwP60JErv8rpoOi3IjM-0-ba0c5d3ff1c83d7b54e76cbe6f1f4fee)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_48_1.jpg?sign=1739703264-Zd3dtm2z2lOHuG8ervEuU4eDbAfvshFJ-0-f075ac769c27668b957a9986ab5c46ba)
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_48_2.jpg?sign=1739703264-Df5hVmLyKrRbsF9WLMwPbDxt1YQ7aeST-0-70182abe641c546e59c3510a464c8ae2)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_48_3.jpg?sign=1739703264-a6zH5uWdKCMBlGpr5uIYuWMX8DYNfIKK-0-07479bdf70a859706fdd41c08a925426)
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_48_4.jpg?sign=1739703264-4LCsvynE5aUnHcA4d3wYMM27m4c7rM3H-0-7a6f5353ae5cd3e9f8daf81f7094c2fa)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_48_5.jpg?sign=1739703264-1bjHwlXdCKDvsn9un5C1o0jmSi4Hwh82-0-3a9da42242569e17c44c1bfd4c4c9e08)
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_48_6.jpg?sign=1739703264-8DsfSy653J58A7qKI1EOeie0QWUDVTFP-0-480492d2728a1adf64c9f3231c0bdccf)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_48_7.jpg?sign=1739703264-fXwQaPXFDNyvKYFoU6jLpJtezY03w0GE-0-6685c3456116e81528971bf5e401fc8c)