具有多元函数和矢量化的feval

时间:2014-05-16 15:22:53

标签: matlab if-statement vectorization

我需要用双变量函数f和两个向量v1和v2调用feval(让我们说v1是x' s和v2是y' s)返回向量z = [f(v1) (1),v2(1))... f(v1(n),v2(n)]。 我怎么能这样做?

以下示例不起作用:

function z = f(x,y)
if x>0.5
z=x+y;
else
z=x+2*y;
end
end

确实

feval(f,[0.4 2 3],[4 5 6]) 

返回:[8.4 12 15] 而不是[8.4 7 9]。

正确的语法是什么?

1 个答案:

答案 0 :(得分:2)

if条件在元素方面不起作用,正如您所期望的那样。相反,仅当表达式中的所有元素(在您的情况下为if)评估为x>0.5时,才会输入true分支。

要实现您的目标,请将您的功能更改为

function z = f(x,y)
    ind = x>.5;
    z(ind) = x(ind) + y(ind);
    z(~ind) = x(~ind) + 2*y(~ind);
end

请注意logical index ind取代if

对于您的特定功能,代码可以简化为

function z = f(x,y)
    z = x + y + (x<=.5).*y;
end