Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.74/43: Рейтинг темы: голосов - 43, средняя оценка - 4.74
0 / 0 / 0
Регистрация: 19.04.2011
Сообщений: 7
1

Нахождение наибольшего элементе в строке матрицы

19.04.2011, 14:24. Показов 8164. Ответов 10
Метки нет (Все метки)

Всем доброго времени суток !
Прошу помочь решить задачу по matlab'у

Построить квадратную матрицу порядка 5 по правилу A(i,j)=sin(j+i/3). Найти наибольший элемент в каждой строке.

Первую половину задачи удалось осилить самому:

Matlab M
1
2
3
4
5
6
7
8
9
m=5; n=5
max=0.00001
A=zeros(m,n);
for i=1:m
    for j=1:n
        A(i,j)=sin(j+i/3);
    end
end
disp('Matrica A'); disp(A);


теперь, как я понимаю, необходимо задать два цикла: по строке и по элементу строки, в которых программа будет проводить сравнение и-того элемента с неким МАКСИМАЛЬНЫМ заранее заданным.

Заранее благодарен !
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.04.2011, 14:24
Ответы с готовыми решениями:

Нахождение наибольшего элемента в строке матрицы
не могу понять в чём ошибка сделал функцию которая должна искать наибольший элемент в строке...

Нахождение наибольшего элемента в строке и этот элемент должен быть минимальным в столбце
a)Матрица задана формулой A=0.1*(N*N-pow((j-N/2+0.2),2))*pow((i-N/2-0.3),2); Нужно вывести вектор...

Определение наибольшего значения из наименьших по каждой строке матрицы
Ребята, пожалуйста, помогите сделать 2 задачи новичку, пожалуйста кто-то откликнитесь( 2....

Поиск наибольшего количества подряд идущих нулей в строке матрицы
Надо найти наибольшее кол-во подряд идущих нулей в строке и отсортировать матрицу по возрастанию,...

10
2819 / 2116 / 86
Регистрация: 02.05.2010
Сообщений: 3,195
19.04.2011, 17:00 2
Лучший ответ Сообщение было отмечено как решение

Решение

Так будет проще
C
1
2
3
4
n=5;
[i, j] = meshgrid(1:5);
A=sin(j+i/3)
Amax=max(A(1:n,:)')
Результат:
A =
0.9719 0.9954 0.9093 0.7231 0.4573
0.7231 0.4573 0.1411 -0.1906 -0.5013
-0.1906 -0.5013 -0.7568 -0.9290 -0.9990
-0.9290 -0.9990 -0.9589 -0.8133 -0.5782
-0.8133 -0.5782 -0.2794 0.0501 0.3742
Amax =
0.9954 0.7231 -0.1906 -0.5782 0.3742
3
535 / 522 / 38
Регистрация: 13.03.2011
Сообщений: 727
19.04.2011, 18:35 3
Отличное решение в духе MATLAB!
Только строку 4 я бы чуточку упростил, избавившись от операции транспонирования:
Код
Amax = max(A, [], 2)
2
2819 / 2116 / 86
Регистрация: 02.05.2010
Сообщений: 3,195
19.04.2011, 18:40 4
Цитата Сообщение от Sledge5 Посмотреть сообщение
Отличное решение в духе MATLAB!
Спасибо за похвалу. У Вас учусь краткости. Спасибо за науку.
0
0 / 0 / 0
Регистрация: 19.04.2011
Сообщений: 7
19.04.2011, 23:48  [ТС] 5
Благодарю Вас за помощь!
0
0 / 0 / 0
Регистрация: 19.04.2011
Сообщений: 7
02.05.2011, 17:24  [ТС] 6
Всех с прошедшим праздником!

У меня возникло несколько вопросов по предложенному ранее варианту решения данной задачи,
надеюсь у Вас найдутся время и силы помочь

1. Прежде всего, оператор meshgrid - не совсем понял, что означает единица в скобке (1,5), просто до этого всегда матрицы приходилось задавать в циклах.

2. И, конечно, в большей степени вызвала интерес вот эта строка
Amax = max(A, [], 2)
как я понимаю, здесь: А - матрица, в которой ищем максимум, [] - не совсем понял что , 2 поиск по строке вроде, но тоже не понял на чем основана такая символика обозначений.

А еще, если возможно конечно, был бы рад увидеть решение в виде задания циклов, о которых шла речь в первом сообщении, ибо это предпочтительный вариант решения задачи.

Спасибо !
0
2819 / 2116 / 86
Регистрация: 02.05.2010
Сообщений: 3,195
02.05.2011, 18:01 7
Цитата Сообщение от Progr4mist Посмотреть сообщение
был бы рад увидеть решение в виде задания циклов, о которых шла речь в первом сообщении, ибо это предпочтительный вариант решения задачи.
Предпочтительней потому, что Вам так понятней или от того, что так требует преподаватель?
[i, j] = meshgrid(1:5) Здесь задаются две матрицы вида. Значения элементов матрицы изменяются от 1 до 5 с шагом 1. Обе матрицы создают базу, на которой рассчитывается матрица-функция
A=sin(j+i/3) i =
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
j =
1 1 1 1 1
2 2 2 2 2
3 3 3 3 3
4 4 4 4 4
5 5 5 5 5
Amax = max(A, [], 2) Это другая форма функции max. Она ищет максимальный элемент в строках (по 2-му индексу матрицы). Было бы Amax = max(A, [],1) искала бы максимальный в столбцах.
2
535 / 522 / 38
Регистрация: 13.03.2011
Сообщений: 727
02.05.2011, 18:09 8
2. И, конечно, в большей степени вызвала интерес вот эта строка
Amax = max(A, [], 2)
как я понимаю, здесь: А - матрица, в которой ищем максимум, [] - не совсем понял что , 2 поиск по строке вроде, но тоже не понял на чем основана такая символика обозначений.
Давайте разбираться. Функция max ищет максимум между двумя значениями, которые могут быть и числами, и матрицами, и массивами любой размерности (но обязательно одинаковыми!).
Код
Xmax = max(A, B)
Если искать максимум только в одной переменной (векторе, матрице, массиве с любой размерностью), то проблем со вторым параметром нет:
Код
Amax = max(A)
Но беда в том, что в этом случае функция max находит максимальный элемент в первом измерении, т.е. по строкам в каждом столбце. Чтобы искать максимум в каждой строке по столбцам, нужно указать размерность массива, вдоль которой проводить поиск максимального значения. Легко догадаться, что номер размерности в этом случае равен 2.
Возникает новая проблема: как задействовать в вызове функции 3-й параметр, не указывая при этом 2-ой? Решается он явным указанием пустого значения ([]) в качестве 2-го параметра. Теперь получается, что 2-ой параметр ничего не изменил, но такое его указание дало нам возможность использовать 3-ий параметр вызываемой функции.

Такой приём можно использовать, если при вызове функции MATLAB нужно пропустить какой-нибудь параметр вызова этой функции. Кстати, параметр размерности (в справке обозначен везде переменной dim), вдоль которой ведется вычисление встречается в функциях MATLAB достаточно часто.

Добавлено через 5 минут
Использование циклов в MATLAB вместо встроенных функций и поэлементных операций как раз НЕ ЯВЛЯЕТСЯ предпочтительным.
2
0 / 0 / 0
Регистрация: 19.04.2011
Сообщений: 7
02.05.2011, 18:27  [ТС] 9
Галина Борисовн,
Sledge5,

Спасибо за подробные ответы !
Галина Борисовн,
Что касается решения через циклы, если честно, мне так легче и сам преподаватель посоветовал пойти этим путем. Собственно потому то у меня и возникли вопрос на счет предложенного ранее решения.
Sledge5,
После прочтения Вашего подробного разъяснения работы оператора max в данной задаче, у меня остался лишь один вопрос:
За что отвечает 2-ой параметр (в нашем случае "пустышка" []) и почему мы не можем сразу вместо нее вписать 2, т.е. как мы решили что нам нужно задействовать именно 3-ий параметр, минуя 2-ой.

Прошу прощенья, если мои вопросы звучат крайне некомпетентно, буду рад Вашей помощи !


ps получается, что
2-ой параметр - это i
3 - j ?
0
535 / 522 / 38
Регистрация: 13.03.2011
Сообщений: 727
02.05.2011, 23:08 10
Цитата Сообщение от Progr4mist Посмотреть сообщение
За что отвечает 2-ой параметр (в нашем случае "пустышка" []) и почему мы не можем сразу вместо нее вписать 2, т.е. как мы решили что нам нужно задействовать именно 3-ий параметр, минуя 2-ой.
2-ой параметр - это имя второй матрицы (вектора или массива). У нас его нет, потому и пустое значение указываем.
Почему мы так решили? Это не мы решили, а программисты Mathworks. Это они так определили заголовок функции. И это логично! Почему это логично? Потому что максимум обычно ищется среди двух значений. Эти значения находятся в соответствующих позициях массивов, указанных в качестве первого и второго параметра.
Пример: допустим, у нас есть две матрицы 3х3 случайных чисел (переменные a и b)
Код
max(a)
В этом случае получаем матрицу 1х3, где каждое число - максимальное значение в соответствующем столбце. Про матрицу b не буду писать - там всё аналогично.

Код
x = max(a, b)
В этом случае получаем матрицу 3х3, где каждое число - максимальное значение в соответствующей позиции из двух матриц. Т.е.
Код
x(1,1) = max(a(1,1), b(1,1))
x(2,1) = max(a(2,1), b(2,1))
и т.д.
Второй параметр нельзя пропускать, потому что подразумевается, что там будет имя второго массива.

Все параметры встроенных функций описаны в справке:
Код
help max
или
Код
doc max
1
0 / 0 / 0
Регистрация: 19.04.2011
Сообщений: 7
02.05.2011, 23:57  [ТС] 11
Вот теперь для меня целиком прояснилась ситуация. Очень хорошо и доступно объяснили, за что превелико благодарен. Думаю теперь я в силах привести подробное обоснование решения задачи преподавателю.

Ещё раз спасибо за Вашу отзывчивость и терпение !
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.05.2011, 23:57

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Найти сумму наибольшего и наименьшего из значений в каждой строке матрицы
Дана действительная матрица размера n на m. Получить последовательность b1,..,bn, где bk- это сумма...

Получить сумму наибольшего значения элементов матрицы и наименьшего в этой же строке
Доброго времени суток, помогите пожалуйста решить задачку: Дана целочисленная матрица размером...

Нахождение суммы элементов матрицы, произведения, наибольшего, наименьшего элементов
Создайте свой собственный модуль, реализующий некоторые действия для работы с матрицами (нахождение...

С помощью процедуры определить порядковые номера наибольшего элемента в каждой строке матрицы
Задали матрицу Z размерности (5х6). Составить схему алгоритма и программу, в которой с помощью...

Нахождение наибольшего по модулю элемента и выбрасывание из исходной матрицы строчку и столбец этого элемента
В данной действительной квадратной матрице порядка n найти наибольший по модулю элемент. Получить...

Найти в каждой строке матрицы числа равные сумме наибольшего и наименьшего значения элементов строк
Нужно найти в каждой строке массива числа которые равны сумме наибольшего и наименьшего значения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.