- MATLAB R2022a完全自学一本通
- 刘浩等编著
- 699字
- 2023-12-06 17:04:00
2.1.4 函数句柄
在MATLAB平台中,对函数的调用方法分为直接调用法和间接调用法。
● 对于直接调用法,被调用的函数通常被称为子函数。但是子函数只能被与其M文件同名的主函数或M文件中的其他函数调用,一个文件中只能有一个主函数。
● 使用函数句柄对函数进行调用可以避免上述问题。函数句柄提供了一种间接调用函数的方法。创建函数句柄需要用到操作符@。对于MATLAB函数库提供的各种M文件中的函数和使用者自主编写的程序的内部函数,都可以创建函数句柄,从而可以通过函数句柄来实现对这些函数的间接调用。
创建函数句柄的一般句法格式为:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_46_6.jpg?sign=1739431814-5ZxGg3TNGumLkhTpvGWxv4H6UInMqXNC-0-82574a8ef0650ef69c95d5ed2ea2caf0)
其中各参数的含义如下。
● 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=1739431814-Gh4K6UP6nv5ikfER7Y9vk5umppojwyYs-0-4692065d75516c6de346e2ecdd912563)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_47_2.jpg?sign=1739431814-6bC5Ntrzwobd0xZtffFQFXoTq3hZuufL-0-6b78bfc1bd36622ef46574d8ccd6bb4f)
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_47_3.jpg?sign=1739431814-fntnhvJIKBwWaoUFHK3RNsqwBTO1XQL5-0-5b009673ebe450f5c7aa78094a0f8079)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_47_4.jpg?sign=1739431814-qEYmJZSMQlKTIm7VVPlWrV1jTWE82zNj-0-6d9c913369755a5ae4c575921decf6e8)
MATLAB库函数中提供了大量关于函数句柄的操作函数,将函数句柄的功能与其他数据类型联系起来,扩展了函数句柄的应用。函数句柄的简单操作函数如表2-9所示。
表2-9 函数句柄的简单操作函数
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_47_5.jpg?sign=1739431814-Kew71zJl3rrq8H4Q7FuNIckZkAcjf85s-0-8e3cfb602209eb3385d63e11a3e66654)
例2-12:函数句柄的基本操作。
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_47_6.jpg?sign=1739431814-7yPWTHckSsJzlAy142o8qOznBVbObpHY-0-9b61f21bd7f4371c5c3ce0cb47058c2d)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_47_7.jpg?sign=1739431814-ZTrVSvVeKEs1trxDh6Oo7s7GVsJeX1G1-0-c69ff0869cd2c7eac625f97fd9df305a)
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_47_8.jpg?sign=1739431814-YQifxEWuCeIK5bw1h17vzM9EBhr3chVn-0-f3e3a406aa99299bcb80c270194ef30c)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_48_1.jpg?sign=1739431814-M4oVKJqB9lQf4j9nnlSiFvGJ0zNhRlMC-0-f3b89405130633a69e83dca70cceac61)
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_48_2.jpg?sign=1739431814-FVOZpSRniUGkVtcvyGjWkGTuiRb71Ojz-0-a1c48a19de6cf30a24cc58a68ac9ba6f)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_48_3.jpg?sign=1739431814-7k1AKPUeNiP5apNDKAmNNmieH9ARgYNM-0-837bb46252320ce8b07318bbfb54f1c0)
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_48_4.jpg?sign=1739431814-vkwEcvF7aRqqdMo7T58XrL8NcDAjTw6c-0-b8fd150542975ae777c46f49b33b8e09)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_48_5.jpg?sign=1739431814-oc649sXMtP7JdLSECBgHhhBatFNdw3LT-0-b80998bae7e78bc41830d6d8c0f8fed9)
在命令行窗口中输入:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_48_6.jpg?sign=1739431814-kBXixnpfa32h6r6D5wKZigylVKh3utXY-0-18076b3238b5991a8ee99bbe0ce9d3ba)
输出结果:
![](https://epubservercos.yuewen.com/57BE9F/26947316904586506/epubprivate/OEBPS/Images/44590_48_7.jpg?sign=1739431814-ldyL3EVqCLlCjNFJRvykXzffgsE4Dl9N-0-3cb9c599291df8c9775d3416609712cf)