我有这样的功能:
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 中的单个元素?
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
。
另一种不需要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