我有这样的功能:
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?
中的单个元素答案 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