【发布时间】:2023-03-20 06:50:02
【问题描述】:
我需要使用 feval 来评估值向量上的函数。函数定义为:
function v = s(x,y)
if y>=0.5
if (-2*(x-3/4)+(y-1/2))<0
v=-0.5;
else
v=1.5;
end
else
v=max( -0.5,min( 1.5,(x-3./4)/(y-1./2) ) );
end
end
以下解决方案不起作用:
function v = s(x,y)
ind1=(y>=0.5);
ind2=(-2*(x(ind1)-3/4)+(y(ind1)-1/2)<0);
ind3=(-2*(x(ind1)-3/4)+(y(ind1)-1/2)>=0);
v(ind2)=-0.5;
v(ind3)=1.5;
v(~ind1)=max( -0.5,min( 1.5,(x(~ind1)-3./4)/(y(~ind1)-1./2) ) );
end
确实,有:
p(1,:)=[2 3 4 5];
p(2,:)=[1 0 7 8];
hs=@s;
f=feval(hs, p(1,:), p(2,:));
我得到 f=
-0.500000000000000 -0.500000000000000 -0.500000000000000
而不是 4 值向量。
【问题讨论】:
-
你不是说删除
IFs而不是向量化它们吗?那些x和y是向量吗?即便如此,您的第一种方法看起来已经矢量化了。 -
是的,我需要删除 if 以使用矢量化。但是上面的解决方案不起作用。
-
下面的解决方案怎么样?
huEx到底是什么?看起来可能是函数s。 -
对不起,它是 s 的句柄。已更正。
标签: matlab vector indexing vectorization