2013-02-06 93 views
0

對於下列功能matlab返回所有的值數組中

function s = support(x, y) 
for i=1:length(x) 
if(y(i)~=1) 
s = x(i); 
end 
end 
end 

我正打算返回所有滿足if-statement值,但目前看來,該函數只返回最後元素滿足`if語句。我怎樣才能返回所有的值?我應該進行哪些修改?

+1

的主要問題是,在循環的每次迭代中's'會被覆蓋(另外:'end'丟失)。 – Jonas

+1

@WhoeverDownvotedThis:問一個基本問題有什麼不對? – Jonas

+0

@Jonas。我包括'末端'。謝謝你的提示... – Simplicity

回答

2

你可以簡單地寫

s = x(y~=1) 

這將返回x滿足您的條件(y~=1)的所有元素。但是,如果s應該是相同的大小xy,那麼它可能更有意義掩蓋元素s當條件不成立,即

s = x; 
s(y==1) = NaN 
2

你的價值不是一個數組,所以你返回只有最後一個值

function s = support(x, y) 
j=1; 
for i=1:length(x) 
    if(y(i)~=1) 
    s(j) = x(i); 
    j=j+1; 
    end 
end 

還要注意,對於這種問題有在Matlab很多語法shorcuts的,這是非常更爲有效,這是Matlab的功率。你可以這樣寫:

function s = support(x, y) 
s=x(y~=1); 

(看邏輯索引理解)

0

使用邏輯索引返回的所有元素在x滿足條件y not 1

s = x(y ~= 1)