0

我有这样的功能:

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

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

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

function y= foo(x)

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

end

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

4

2 回答 2

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

于 2013-02-18T23:09:32.673 回答
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
于 2013-02-19T07:28:18.103 回答