2013-02-18 52 views
0

我有這樣的功能:如何將向量的每個元素執行有條件分配

Y = -2,其中x < = 0 Y = -2 + 3×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中的單個元素?

回答

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的行爲。

+0

它說: 「使用輔助誤差(第2行) 沒有足夠的輸入參數。」。 – 2013-02-18 23:25:34

+1

@Ramy是的,有一個'@'丟失。 – us2012 2013-02-18 23:32:37

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 
相關問題