2013-07-07 26 views
0

我是MATLAB新手(和本網站!),我需要一些幫助來解決我被分配給課堂的問題。我在這個網站上搜索了類似的MATLAB問題,但我沒有遇到任何問題。問題是要求用戶返回最接近零的最大數字。換句話說,編寫一個函數,該函數以數字列表/數組作爲輸入並返回與零相鄰的最大數字。舉例來說,如果MATLAB:返回數組中最大的數字?

a=[1 -2 3 4 0 5 6 0 -7], Output: y=6. 

我試圖解決使用比較複雜的功能我在網上找到的問題,它似乎在MATLAB工作。但是,它不會我們的自動在線MATLAB分級制度的命令「imdilate」上工作不認可:

x=[1 2 0 4 5 -6 0 7 0 8] 
    zero_mask = (x == 0); 
    adjacent_to_zero_mask = imdilate(zero_mask, [1 0 1]); 
    max_value_adjacent_to_zero = max(x(adjacent_to_zero_mask)); 
    y=max_value_adjacent_to_zero 

我想問,是有解決這個問題不涉及簡單得多的方法「 imdilate「或其他類似的功能? 謝謝你的幫助,我真的很感激!

回答

1

我想出了一個骯髒的解決方案:

a=[0 1 -2 3 4 0 5 6 0 -7]; 
I=find(a==0); 
I=unique([I+1,I-1]); 
I=I((I>0)&(I<=length(a))); 
output = max(a(I)); 
+0

有時候,髒好:d我想你的代碼,它完美地工作。我以前曾嘗試使用'unique',但我認爲我沒有正確設置命令。您的幫助是真正的讚賞! –

+0

@ JohnWayne'sStuntDouble其實這並不是必需的。如果你忽略它,代碼仍然可以工作:'I = [I + 1,I-1]'(不管''a') –

+0

@DennisJaheruddin是可行的。爲了避免重複的索引,我包含了「獨特」,但最終的結果是一樣的。 – tashuhka