如何对向量的每个元素执行条件赋值

时间:2013-02-18 20:12:55

标签: function matlab vector

我有这样的功能:

  

y = -2,x <= 0   y = -2 + 3x ^ 2,其中0 = 1

我需要在1D矩阵的每个元素上计算此函数,而不使用循环。

我认为定义像这样的函数是可能的:

function y= foo(x)

if x<=0
    y=-2;
elseif x>=1
    y=1;
else
    y= -2+3*x.^2;
end

end

但这只会产生一个结果,如何对所有元素进行操作?我知道。运算符,但如何访问if?

中的单个元素

2 个答案:

答案 0 :(得分:1)

function b = helper(s)
  if s<=0
    b=-2;
  elseif s>=1
    b=1;
  else
    b= -2+3*s^2;
  end
end

然后只需致电

arrayfun(@helper, x)

生成您想要的函数foo

答案 1 :(得分:1)

另一种不需要arrayfun()的方法是乘以条件:

y = -2*(x <= 0) + (-2+3*x.^2).*(x < 1).*(x > 0) + (x >= 1)

你也可以做一个功能。这将接受x的矢量输入,例如

x = [1 4 0 -1 0.5];
y = -2*(x <= 0) + (-2+3*x.^2).*(x < 1).*(x > 0) + (x >= 1)

输出

y =

   1.0000   1.0000  -2.0000  -2.0000  -1.2500