![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=1739597866-6mJOkUDaLa1B4dY7cfZUOOnrScDL5oyy-0-800c4008a87e2dde993f8ad21184b9bd)
其中各参数的含义如下。
● 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=1739597866-qn1UKuiSTBWsU9v1NEUMldh8qBcoXBjv-0-bc1d29c6fcd2bb5f9517c1aec35274bb)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_47_2.jpg?sign=1739597866-LCzbLILAz10YPOVWDrjPDzMv27vMu9b8-0-51b33660a7af9d7b5e043864a0fe06cb)
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_47_3.jpg?sign=1739597866-hScatwIrxWOnhgmmVoyLQv5Js6ZINzJX-0-2c28ed2d3d89fcec4e4009a7aaa6294e)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_47_4.jpg?sign=1739597866-dAgFrsUvRHhGZ3OvHKzXgOvn3AQhZ6s2-0-5859b3255d38716b4d64ad0d5e162daf)
MATLAB库函数中提供了大量关于函数句柄的操作函数,将函数句柄的功能与其他数据类型联系起来,扩展了函数句柄的应用。函数句柄的简单操作函数如表2-9所示。
表2-9 函数句柄的简单操作函数
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_47_5.jpg?sign=1739597866-W6toKFGf6wNWh4cvciyeInoR8LbF0Lv1-0-0ec27f8e77e20087d234be28adcd3944)
例2-12:函数句柄的基本操作。
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_47_6.jpg?sign=1739597866-1s0Fq8xO5NtgY486NJ8DA2onLf4g3VTt-0-52c23e36b95e524d6da62191c52ea87b)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_47_7.jpg?sign=1739597866-7ZbGLhki2yFVnk84Q8XgIt3q6NHCtwgc-0-1f08eb3a0ad93ea4ff6ed93de6917a66)
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_47_8.jpg?sign=1739597866-zqcYhZaqKLEwaIMiA6UWY7cycp1OEdfS-0-394504ba845526f87a4310ef1dfa4874)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_48_1.jpg?sign=1739597866-MegBHBdhvoKVKun6GhUtgyXvJMakYYdf-0-b24514241a95718b14284e8ab2be57cb)
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_48_2.jpg?sign=1739597866-bvIkn0zc71NYjHLcy2UN3zMPUXf5xJyp-0-a6d0b4d210c2d1de44acd4ee4d66cb9e)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_48_3.jpg?sign=1739597866-hGHQsGjOJ0XAiattWBULttFBBbqnJmaX-0-4c36a827d17e3064bf1d204a9418c130)
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_48_4.jpg?sign=1739597866-ny43z0JkBCdGO1eNzSfuh4huqG8EuZfC-0-9e9b335d670fdfac2cfd6e811011c8fa)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_48_5.jpg?sign=1739597866-6gNRrvWts5eqkV8RKyBVLihvSR6JrV8H-0-22107faeadb84834824e0848f6db66f8)
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_48_6.jpg?sign=1739597866-DcIGvgz1JKgf7Uczu6AUiRIIfWiVlaiG-0-bc13bbe0dc8068bed543a26d1897bc4c)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_48_7.jpg?sign=1739597866-QLTMlXUnHGcXuz1kLkFLrauWvnFgL6wB-0-63333020c58ab5d92265a8f430fb9a3d)