Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Как через n-вложенный цикл посчитать умножение матриц за методом Шимбелла

61K
10 декабря 2014 года
Максим Тесля
13 / / 10.12.2014
У меня курсовая работа по программированию.Нужно реализовать на С++ или С# алгоритм Шимбелла ,применяя классы и графику.
Про программную реализацию этого метод в интернете почти ничего не нашел.Есть конечно какие-то наброски но так как я 2 курс плюс не очень понимаю программировании эти наброски мне ничего не дали.
Просьба если есть у кого-то реализация этого метода ,прошу помочь.Но если нет то объясните мне хотя бы как перемножить матрицы.

По методу нужно перемножать каждый элемент строки матрицы А на каждый элемент столбца матрицы В.
Умножение заменяем суммированием .
Пример:ищем 1 элемент матрицы С.
(a1.1+b1.1) (a1.2 +b2.1) (a1.3+b3.1) суммируем эти пары элементов и ищем минимальную суму которая заносится в новую матрицу C в эл. c1.1.
и так для всех остальных 8 эл.
a1.1 a1.2 a1.3
a2.1 a2.2 a2.3
a3.1 a3.2 a3.3
x
b1.1 b1.2 b1.3
b2.1 b2.2 b2.3
b3.1 b3.2 b3.3
326
11 декабря 2014 года
sadovoya
757 / / 19.11.2005
Цитата:
объясните мне хотя бы как перемножить матрицы


Строку умножаешь на столбец подобно скалярному произведению векторов (в школе должны были объяснять), т.е. вычисляешь скалярное произведение вектор-строки первой матрицы на вектор-столбец второй матрицы. Результат - элемент результирующей матрицы с индексами [номер строки, номер столбца] исходных. Например, для матриц 3x3:
c[1,1] = a[1,1]*b[1,1] + a[1,2] *b[2,1] + a[1,3]*b[3,1]
остальные 8 аналогично.

В общем случае длина строк первой матрицы должна быть равна длине столбцов второй.

Так в математике (линейная алгебра). См. здесь. В методе возможно имеется ввиду что-то другое, какое-нибудь псевдоумножение.

88K
11 декабря 2014 года
Roleri
9 / / 02.12.2014
Умножение по методу Шимбелла не такое, как в линейной алгебре.
Ниже написан код для вычисления одного элемента произведения с индексами i и k.
Нулевые элементы матриц обрабатываются особым образом, поскольку в этом случае в теории графов обычно имеют в виду не нулевой, а бесконечно большой вес ребра. Вы, вроде, должны немножко представлять, зачем это нужно.

 
Код:
double minsum = Double.MaxValue; // любая допустимая сумма будет меньше этой величины
for (j = 0; j < m; ++j) // перебираем элементы, как при обычном перемножении матриц
{
  if ((a[i][j] != 0.0) && (b[j][k] != 0.0)) // суммы с хотя бы одним нулём пропускаются
    minsum = Math.Min(minsum, a[i][j] + b[j][k]); // ищем минимальную сумму
}
c[i][k] = (minsum == Double.MaxValue) ? 0.0 : minsum; // если ни одной допустимой суммы не найдено, то пишем 0
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог