Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Mr.Armik
4 / 4 / 0
Регистрация: 11.06.2010
Сообщений: 91
#1

Перемножение матриц - C++

09.07.2012, 16:48. Просмотров 1109. Ответов 16
Метки нет (Все метки)

Доброго времени суток.

Подскажите как разобраться с перемножением матриц, если есть 2 матрицы размерностью МхМ (М = 2000-5000), элементами которых являются в свою очередь матрицы NxN (N = 4);

Как перемножить 2 простые матрицы я знаю, но как представить матрицу в матрице, и сделать умножение... Преподаватель говорил что то на счет ссылок вроде.

Может есть у кого какие соображения прошу поделиться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2012, 16:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перемножение матриц (C++):

Перемножение матриц - C++
Помогите решить проблему суть задачи проверить матрицу бинарного отношения на свойства. Все сделал кроме Транзитивности, суть того, что...

Перемножение матриц. - C++
Нужен код для перемножения матрицы и столбца за минимально возможное время. Порядок матрицы ( и столбца ) огромен - около 100000....

Перемножение матриц - C++
Народ помогите плиз!!! Не получается перемножить 2 матрици 3х3. Может у кого есть запрограммированый алгоритм? Очень нужно.

Перемножение матриц - C++
Доброго времени суток! У меня есть две матрицы: первая k x m и вторая u x s размерностей. Нужно их перемножить. Подскажите, пожалуйста, в...

Перемножение матриц - C++
Как сделать перегрузку *= для матриц ?! Был такой вариант: Matrix& Matrix::operator *= (const Matrix &rhs) { Matrix...

Перемножение матриц - C++
Привет. Помогите пожалуйста решить нетрудную задачу.Заранее спасибо. (если можно рабочую версию) Дано два двумерных массива ...

16
_stealth_
16 / 16 / 1
Регистрация: 07.06.2012
Сообщений: 100
09.07.2012, 16:57 #2
Представляем лист в клеточку. В каждой клеточке еще 4 клетки. Таким образом кол-во клеток просто ворастает.

http://ru.wikipedia.org/wiki/Умножение_матриц
0
Mr.Armik
4 / 4 / 0
Регистрация: 11.06.2010
Сообщений: 91
09.07.2012, 17:12  [ТС] #3
на бумаге я могу сделать как захочу, меня интересует как представляется это в С++.
это надо делать через 3 звездочки или че? (***mass)
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
09.07.2012, 17:16 #4
Mr.Armik, пишете шаблонный класс матрицы и перегружаете оператор умножения. Делов-то.
0
CheshireCat
Эксперт С++
2895 / 1244 / 78
Регистрация: 27.05.2008
Сообщений: 3,397
09.07.2012, 17:18 #5
Мне самым простым решением представляется разработка класса матрицы, который "умеет" перемножать матрицу на матрицу; ну, может быть, еще на константу и на вектор, если потребуется. В противном случае, ты очень-очень лехко запутаешься со всеми этими ***mass и будешь искать ошибки очень долго.
А дальше эти вложенные матрицы можно наворачивать сколь угодно, лишь бы памяти хватило....
0
_stealth_
16 / 16 / 1
Регистрация: 07.06.2012
Сообщений: 100
09.07.2012, 17:23 #6
Цитата Сообщение от Mr.Armik Посмотреть сообщение
это надо делать через 3 звездочки или че? (***mass)
*** - это если указатель на указатель на указатель.
нужно использовать matrix[1][1][1][1] - вторя строка второй столбец и во внутреней так же.

пример с бумагой к тому, что такая матрица не отличается от другой обычной матрицы.

Добавлено через 1 минуту
Цитата Сообщение от CheshireCat Посмотреть сообщение
разработка класса матрицы, который "умеет" перемножать матрицу на матрицу
гы - не верно по принцыпам ООП
нужно представить класс матрицы и написать глобальный оператор умножения.
0
Mr.Armik
4 / 4 / 0
Регистрация: 11.06.2010
Сообщений: 91
09.07.2012, 17:33  [ТС] #7
может кто кусочек кода скинет? ) а то поболтать я и сам могу )
0
_stealth_
16 / 16 / 1
Регистрация: 07.06.2012
Сообщений: 100
09.07.2012, 17:37 #8
кода?
дык как матрица-то организованна?
C++
1
int matrix[9][9][3][3];
так?

http://www.boost.org/doc/libs/1_50_0/libs/numeric/ublas/doc/index.htm
0
CheshireCat
Эксперт С++
2895 / 1244 / 78
Регистрация: 27.05.2008
Сообщений: 3,397
09.07.2012, 17:41 #9
Ищи в инете книгу: Леен Аммерааль, STL для программистов на C++. Там есть готовая реализация класса матрицы произвольного размера, включая нужное тебе умножение.
0
Mr.Armik
4 / 4 / 0
Регистрация: 11.06.2010
Сообщений: 91
09.07.2012, 17:44  [ТС] #10
Не в умножении загвоздка, а в представлении матрицы, элементами который являются матрицы поменьше.

т.е. есть Большая матрица, элементами которой есть матрицы поменьше. Как динамически объявить такую матрицу?

Писать свой какой то новый класс "матрица" не очень хочется, потому как в последствии мне надо будет вставлять ассемблеровкие вставки.
0
CheshireCat
Эксперт С++
2895 / 1244 / 78
Регистрация: 27.05.2008
Сообщений: 3,397
09.07.2012, 17:50 #11
Тебе нужен шаблонный класс.
C++
1
template <class T> class matrix { ... };
Чем специализируешь тип элементов (это самый class T) - то и будет: хоть матрица целых, хоть матрица матриц, и применяя этот принцип последовательно - получишь с какой угодно вложенностью.
1
_stealth_
16 / 16 / 1
Регистрация: 07.06.2012
Сообщений: 100
09.07.2012, 17:52 #12
либо буст, там это реализованно.
либо можно самому использовать vector<vector<int> > например для двухмерной или больше для многомерной.

у буста это будет кажется
C++
1
2
3
4
using namespace boost::numeric::ublas;
matrix<double> m (3, 3);
// или
vector<double> v (3);
динамично средствами с++ не объявишь, только заданный размер.
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
09.07.2012, 17:55 #13
Цитата Сообщение от _stealth_ Посмотреть сообщение
только заданный размер.
Чего?
0
_stealth_
16 / 16 / 1
Регистрация: 07.06.2012
Сообщений: 100
09.07.2012, 18:00 #14
ну размер нужно указать при компиляции (это если юзать типа
C++
1
2
int i[10]; // ok
int i[x]; // not good
)
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
09.07.2012, 18:08 #15
Цитата Сообщение от _stealth_ Посмотреть сообщение
ну размер нужно указать при компиляции (это если юзать типа
Это понятно.
Поясню: мне показалось, что под "только заданный размер" вы подогнали еще и vector с matrix, т.е. что их размер можно задавать только на этапе компиляции. Поэтому и спросил.
0
09.07.2012, 18:08
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2012, 18:08
Привет! Вот еще темы с ответами:

Перемножение матриц - C++
Помогите исправить ошибки. //--------------------------------------------------------------------------- #include &lt;iostream&gt; ...

Перемножение матриц - C++
Даны две квадратные матрицы.Напишите программу перемножающую матрицы по правилам перемножения матриц. У меня есть программа. но мне...

Перемножение матриц - C++
Помогите пожалуйста перемножить матрицу а на с и вычесть из этого м-цу б, у меня постоянно нули =/ #include &lt;math.h&gt; #include...

Перемножение 2-х матриц - C++
Написал программу перемножения матриц, не понимаю в чем дело , выводит бред. Подскажите в чем проблема пожалуйста.Размеры матрицы...


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

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

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