2012-11-08 109 views
3

我打電話的載體像這樣的自我編寫的函數「功能」:MATLAB迴歸與IF語句

x_values=[0 1 2]; 
result=func(x_values); 

的問題是,在這個功能我有一個if語句以確定輸出中。如果我將這個函數應用於標量,我沒有問題,但是如果我將它應用於數字向量,那麼if聲明就不適合他的工作。爲什麼?我該如何修復它?

function [y]=func(x) 
if(x==0) 
    y=0 
else 
    y=1./sin(x); 
end 
end 
+0

使用尺寸(X),以確定您的輸入是繼續前一個標量或矢量。你有沒有試過調試你的代碼? – Fredrik

回答

2

您需要分別處理零和非零條目。這很容易通過索引實現:

function [y]=func(x) 
xIsZero = x==0; 

%# preassign y 
y = x; 

%# fill in values for y 
y(xIsZero) = 0 

y(~xIsZero) = 1./sin(x(~xIsZero)) 
+0

非常感謝!這幫了我很多! – bergmeister

0

您只想分配矢量的子集。例如:

function [y]=func(x) 
    y=zeros(size(x)); 
    mask = x ~= 0; 
    y(mask) = 1 ./ sin(x(mask)); 
end 
+0

但是,如果你正在計算'sinc',你想使用'ones',而不是'zeros'。 –

+0

非常感謝! – bergmeister

1

答案是的IF幫助文件中解釋:

時的評價時的結果爲非空並且 包含所有非零元素(邏輯的或真實的數字)表達式爲真。否則, 的表達式爲false。

結論:要麼添加一個for循環,或者找到更好的方法進行矢量表達式