Форум программистов, компьютерный форум CyberForum.ru

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

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

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

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

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

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

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

Может есть у кого какие соображения прошу поделиться.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.07.2012, 16:48     Перемножение матриц
Посмотрите здесь:

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

Перемножение 2-ух матриц - C++
Помогите пожалуйста с перемножением 2-ух матриц? в долгу не останусь) Выделение памяти написал, а вот как использовать с умножением, и...

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

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

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

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

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

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

http://ru.wikipedia.org/wiki/Умножение_матриц
Mr.Armik
2 / 2 / 0
Регистрация: 11.06.2010
Сообщений: 88
09.07.2012, 17:12  [ТС]     Перемножение матриц #3
на бумаге я могу сделать как захочу, меня интересует как представляется это в С++.
это надо делать через 3 звездочки или че? (***mass)
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
09.07.2012, 17:16     Перемножение матриц #4
Mr.Armik, пишете шаблонный класс матрицы и перегружаете оператор умножения. Делов-то.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,363
09.07.2012, 17:18     Перемножение матриц #5
Мне самым простым решением представляется разработка класса матрицы, который "умеет" перемножать матрицу на матрицу; ну, может быть, еще на константу и на вектор, если потребуется. В противном случае, ты очень-очень лехко запутаешься со всеми этими ***mass и будешь искать ошибки очень долго.
А дальше эти вложенные матрицы можно наворачивать сколь угодно, лишь бы памяти хватило....
_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 Посмотреть сообщение
разработка класса матрицы, который "умеет" перемножать матрицу на матрицу
гы - не верно по принцыпам ООП
нужно представить класс матрицы и написать глобальный оператор умножения.
Mr.Armik
2 / 2 / 0
Регистрация: 11.06.2010
Сообщений: 88
09.07.2012, 17:33  [ТС]     Перемножение матриц #7
может кто кусочек кода скинет? ) а то поболтать я и сам могу )
_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.../doc/index.htm
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,363
09.07.2012, 17:41     Перемножение матриц #9
Ищи в инете книгу: Леен Аммерааль, STL для программистов на C++. Там есть готовая реализация класса матрицы произвольного размера, включая нужное тебе умножение.
Mr.Armik
2 / 2 / 0
Регистрация: 11.06.2010
Сообщений: 88
09.07.2012, 17:44  [ТС]     Перемножение матриц #10
Не в умножении загвоздка, а в представлении матрицы, элементами который являются матрицы поменьше.

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

Писать свой какой то новый класс "матрица" не очень хочется, потому как в последствии мне надо будет вставлять ассемблеровкие вставки.
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,363
09.07.2012, 17:50     Перемножение матриц #11
Тебе нужен шаблонный класс.
C++
1
template <class T> class matrix { ... };
Чем специализируешь тип элементов (это самый class T) - то и будет: хоть матрица целых, хоть матрица матриц, и применяя этот принцип последовательно - получишь с какой угодно вложенностью.
_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);
динамично средствами с++ не объявишь, только заданный размер.
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
09.07.2012, 17:55     Перемножение матриц #13
Цитата Сообщение от _stealth_ Посмотреть сообщение
только заданный размер.
Чего?
_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
)
soon
2540 / 1305 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
09.07.2012, 18:08     Перемножение матриц #15
Цитата Сообщение от _stealth_ Посмотреть сообщение
ну размер нужно указать при компиляции (это если юзать типа
Это понятно.
Поясню: мне показалось, что под "только заданный размер" вы подогнали еще и vector с matrix, т.е. что их размер можно задавать только на этапе компиляции. Поэтому и спросил.
Mr.Armik
2 / 2 / 0
Регистрация: 11.06.2010
Сообщений: 88
09.07.2012, 18:28  [ТС]     Перемножение матриц #16
Скажите, вот предположим есть функция генерирует квадратную матрицу. Как вернуть указатель на эту матрицу, или ссылку. И в чем разница указателя и ссылки? )

C++
1
2
3
4
5
6
7
8
9
10
11
double** generation(int n)
{
    double **a = new double*[n];
    for(int i=0;i<n;i++)
    {
        a[i] = new double[n];
        for(int j=0;j<n;j++)
            a[i][j] = rand()%100;
    }
    return a;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2012, 21:34     Перемножение матриц
Еще ссылки по теме:

Перемножение матриц - C++
Делаю перемножение матриц. В результате выдает некорректные числа #include &lt;iostream&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt; ...

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

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

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

Перемножение матриц - C++
Перемножить матрицы m*n и m*p где заданы константы n=1000,m=1100,p=12000


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

Или воспользуйтесь поиском по форуму:
_stealth_
16 / 16 / 1
Регистрация: 07.06.2012
Сообщений: 100
11.07.2012, 21:34     Перемножение матриц #17
ссылка - это, можно сказать, сама переменнрая. указатель на переменную - это указатель на какую-то область памяти, которя используется (в ошибочный случаях может и не использоваться) какой-либо переменной.

чтобы получить указатель на массив, нужно просто взять адрес первго элемента. Это и будет указатель на первый элемент массива, за ним будет второй, потом 3й... (передвигаемся либо [] либо ++).

Зачем две-то звездочки? Важно понять, что для компьютера не существует никаких массивов, для него, в его памяти, это просто последовательность байтов. Например, если у нас массив из 2х int, то в мамяти компа это будут два элемента, стоящие друг за другом.

лучше не использовать указатели, особенно на таком уровне подготовке - есть готовые классы для матриц.
Yandex
Объявления
11.07.2012, 21:34     Перемножение матриц
Ответ Создать тему
Опции темы

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