句柄函数里套句柄函数的情况。

定义了一个句柄函数,里面包括一个积分,积分里面也含有句柄函数,代码如下:
D=500;p=1/1000;Dcoe=5;Ab=50;Av=80;hb=10;hv=6;backcost=200;a=1;b=4;c=1;
f=@(q,k,m)(Av*D/(m*q)+hv*q*(m*(1-D*p)-1+2*D*p)/2+Ab*D/q+hb*(q/2+k*Dcoe*sqrt(a*(b-q)^2+c))+backcost*D*Dcoe*sqrt(a*(b-q)^2+c)*integral(@(z,k)normpdf(z,0,1),k,inf)/q)
定义好后,直接带入具体数值可以算出函数值。但若将矩阵带入,则会出现异常情况。例如:
定义A=[1,2,3;4,5,6], 将A的第一列带入函数,命令f(E(1,1:3))会出现错误,而直接f(1,2,3)却没有错,报错原因为:
Not enough input arguments
请问这是为何?

 Accepted Answer

mayenot
mayenot on 24 Nov 2022

0 votes

因为函数调用的时候,如果你没有对参数个数做判断以支持可变参数个数 (一般通过 nargin结合varargin实现),那么你调用时指定的参数个数就必须和定义时的参数个数匹配。
你这里定义里是f=@(q,k,m),意味着 f 有三个输入参数,f(A(1,1:3))表示你只提供了一个参数,虽然这个参数是一个长度为3的向量,但是这个向量是整体性作为一个函数参数,所以,matlab会认为你少了2个参。当你写成f(A(1,1),A(1,2),A(1,3)) 时,参数个数正好是匹配的。
如果你想让你函数实现 f(A(1,1:3)) 式的调用,可以修改你的函数定义为:
A=[1,2,3;4,5,6];
D=500;p=1/1000;Dcoe=5;Ab=50;Av=80;hb=10;hv=6;backcost=200;a=1;b=4;c=1;
f=@(q,k,m)(Av*D/(m*q)+hv*q*(m*(1-D*p)-1+2*D*p)/2+Ab*D/q+hb*(q/2+k*Dcoe*sqrt(a*(b-q)^2+c))+backcost*D*Dcoe*sqrt(a*(b-q)^2+c)*...
integral(@(z,k)normpdf(z,0,1),k,inf)/q)
f(A(1,1),A(1,2),A(1,3))
f=@(x) f(x(1),x(2),x(3)); % 修改函数定义
f(A(1,1:3))

More Answers (0)

Tags

Asked:

on 24 Nov 2022

Answered:

on 24 Nov 2022

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!