2013-07-07 3 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

Смежные вопросы