Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.84/19: Рейтинг темы: голосов - 19, средняя оценка - 4.84
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313

Перемножение матриц.

21.07.2011, 11:08. Показов 3663. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужен код для перемножения матрицы и столбца за минимально возможное время.
Порядок матрицы ( и столбца ) огромен - около 100000. Помогите найти оптимальный код!
Ищу уже 2 день... что-то безрезультатно как то(((
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.07.2011, 11:08
Ответы с готовыми решениями:

Возведение матриц в степени, перемножение и сложение матриц
Даны 3-ех элементные вещественные векторы x и y и квадратные матрицы A и B. Вычислить: (A 2 * x, y) + (B 2 * y, x) + (A * B * x, y) ...

Перемножение матриц
Доброго времени суток. Подскажите как разобраться с перемножением матриц, если есть 2 матрицы размерностью МхМ (М = 2000-5000),...

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

5
 Аватар для Mиxaил
542 / 447 / 162
Регистрация: 10.12.2009
Сообщений: 1,857
21.07.2011, 11:16
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
int multMatrixBlock(double *a, const int n, double *b, const int m, double *res, double *c, double *d, double*e){
    int n_block=n/m;
    int m_small;
    int i,j,k,o;
    m_small=n-n_block*m;
    clearMatrix(res, n*n);
    for ( i = 0; i <= n_block; i++)
    {
        for ( j = 0; j <= n_block; j++)
        {
            for ( k = 0; k <=n_block; k++)
            {
                if (i<n_block && j<n_block && k<n_block) {
                    getSubMatrix(a, n, c, m, i, k);
                    getSubMatrix(b, n, d, m, k, j);
                    multMatrixSq(c, m, d, e);
                    setSubMatrixAdded(res, n, e, m, i, j);
                }
                else if (i<n_block && j<n_block && k==n_block) {
                    getSubMatrix(a, n, c, m, i, k);
                    getSubMatrix(b, n, d, m, k, j);
                    multMatrixRect(c, m, d,m_small, m, e);
                    setSubMatrixAdded(res, n, e, m, i, j);  
                }
                else if (i==n_block && j<n_block && k<n_block) {
                    getSubMatrix(a, n, c, m, i, k);
                    getSubMatrix(b, n, d, m, k, j);
                    multMatrixRect(c, m_small, d,m, m, e);
                    setSubMatrixAdded(res, n, e, m, i, j);
                }
                else if (i==n_block && j<n_block && k==n_block) {   
                    getSubMatrix(a, n, c, m, i, k);
                    getSubMatrix(b, n, d, m, k, j);
                    multMatrixRect(c, m_small, d,m_small, m, e);
                    setSubMatrixAdded(res, n, e, m, i, j);  
                }
                else if (i<n_block && j==n_block && k<n_block) {
                    getSubMatrix(a, n, c, m, i, k);
                    getSubMatrix(b, n, d, m, k, j);
                    multMatrixRect(c, m, d,m, m_small, e);
                    setSubMatrixAdded(res, n, e, m, i, j);
                }
                else if (i<n_block && j==n_block && k==n_block) {
                    getSubMatrix(a, n, c, m, i, k);
                    getSubMatrix(b, n, d, m, k, j);
                    multMatrixRect(c, m, d,m_small, m_small, e);
                    setSubMatrixAdded(res, n, e, m, i, j);
                }
                else if (i==n_block && j==n_block && k<n_block) {
                    getSubMatrix(a, n, c, m, i, k);
                    getSubMatrix(b, n, d, m, k, j);
                    multMatrixRect(c, m_small, d,m, m_small, e);
                    setSubMatrixAdded(res, n, e, m, i, j);  
                }
                else if (i==n_block && j==n_block && k==n_block) {
                    getSubMatrix(a, n, c, m, i, k);
                    getSubMatrix(b, n, d, m, k, j);
                    multMatrixSq(c, m_small, d, e);
                    setSubMatrixAdded(res, n, e, m, i, j);  
                }
            }
        }
    }
    return 0;
}
нашел в интернете

Добавлено через 1 минуту
матрица хранится в одномерном массиве.
0
3 / 4 / 1
Регистрация: 13.07.2011
Сообщений: 313
21.07.2011, 11:21  [ТС]
Вот только там нет определния кучи ф-ций...
0
 Аватар для Mиxaил
542 / 447 / 162
Регистрация: 10.12.2009
Сообщений: 1,857
21.07.2011, 11:38
Цитата Сообщение от hello19 Посмотреть сообщение
Вот только там нет определния кучи ф-ций...
исходые функции не удалось найти, сорри... Зато есть еще вот это:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
int multMatrixSq(double *a, const int n, double *b, double *c){
    double s1=0, s2=0, s3=0, s4=0;
    double *f, *g, *h;
    int i, j, k;
    if (n%2==0){
        for (i = 0; i < n-1; i+=2)
        {
            f=a+i*n;
            for (j = 0; j < n-1; j+=2)
            {
                g=b+j;
                for (k=0;k<n;k++){
                    s1+=f[k]*g[n*k];    
                    s2+=f[n+k]*g[n*k];  
                    s3+=f[k]*g[n*k+1];  
                    s4+=f[n+k]*g[n*k+1];    
                }
                h=c+i*n+j;
                h[0]=s1; s1=0;
                h[n]=s2; s2=0;
                h[1]=s3; s3=0;
                h[n+1]=s4; s4=0;
            }
        }
    }
    else {
        for (i = 0; i < n-1; i+=2)
            {
                f=a+i*n;
                for (j = 0; j < n-1; j+=2)
                {
                    g=b+j;
                    for (k=0;k<n;k++){
                        s1+=f[k]*g[n*k];
                        s2+=f[n+k]*g[n*k];
                        s3+=f[k]*g[n*k+1];
                        s4+=f[n+k]*g[n*k+1];
                    }
                    h=c+i*n+j;
                    h[0]=s1; s1=0;
                    h[n]=s2; s2=0;
                    h[1]=s3; s3=0;
                    h[n+1]=s4; s4=0;
                }
                if  (j==n-1){
                    g=b+j;
                    for (k=0;k<n;k++){
                        s1+=f[k]*g[n*k];    
                        s2+=f[n+k]*g[n*k];  
                    }
                    h=c+i*n+j;
                    h[0]=s1; s1=0;
                    h[n]=s2; s2=0;
                }
            }
            if (i==n-1){
                f=a+i*n;
                for (j = 0; j < n-1; j+=2)
                {
                    g=b+j;
                    for (k=0;k<n;k++){
                        s1+=f[k]*g[n*k];    
                        s3+=f[k]*g[n*k+1];  
                    }
                    h=c+i*n+j;
                    h[0]=s1; s1=0;
                    h[1]=s3; s3=0;
                }
                if  (j==n-1){
                    g=b+j;
                    for (k=0;k<n;k++){
                        s1+=f[k]*g[n*k];    
                    }
                    h=c+i*n+j;
                    h[0]=s1; s1=0;
                }
            }
        }
    return 0;
}
тут, вроде, без сторонних функций
1
Каратель
Эксперт С++
6610 / 4029 / 401
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
21.07.2011, 11:42

Не по теме:

Цитата Сообщение от hello19 Посмотреть сообщение
около 100000
лол) я представляю сколько веремени будут перемножаться такие матрицы кодом приведеным выше, а ТС рекомендую смирится с этим заданием, к сожалению это не студенческая задача


а по теме: вам нужно ленточное перемножение матриц
1
Freelance
Эксперт С++
 Аватар для asics
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
21.07.2011, 11:49
Вот подобная тема -- Распараллеливание
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.07.2011, 11:49
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru