定义了一个句柄函数,里面包括一个积分,积分里面也含有句柄函数,代码如下:
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
请问这是为何?

 Réponse acceptée

mayenot
mayenot le 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))

Plus de réponses (0)

Catégories

En savoir plus sur 输入和输出参数 dans Centre d'aide et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!