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

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

Восстановить пароль Регистрация
 
CoVeReTeSS
3 / 3 / 0
Регистрация: 24.03.2011
Сообщений: 99
05.07.2011, 23:41     Умножение матриц #1
Форумчане, кто поможет, что здесь не то
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
81
82
83
84
85
86
87
88
89
90
91
92
93
// Multiplying arrays.cpp : main project file.
 
#include "stdafx.h"
#include<iostream>
#include<time.h>
 
using namespace System;
using std::cin;
using std::cout;
using std::endl;
 
int main(array<System::String ^> ^args)
{   
    cout<<"Input size of arrays ((N*N) type N): ";
    
    int size;
    cin>>size;
    int **MasA = new int *[size];
    {for(int i = 0; i <size;++i)
        MasA[i] = new int[size];
    }
    {for (int i = 0; i < size; i++)
     for (int j = 0; j < size; j++)
     MasA[i][j] = ((rand() % 10));
    }
 
    int **MasB = new int *[size];
    {for(int i = 0; i <size;++i)
        MasB[i] = new int[size];
    }
    {for (int i = 0; i < size; i++)
     for (int j = 0; j < size; j++)
     MasB[i][j] = ((rand() % 10));
    }
          srand(time(NULL));
    int **MasC = new int *[size];
    {for(int i = 0; i <size;++i)
        MasC[i] = new int[size];
    }
 
 
    cout << "Array A:" << endl << endl;
 for (int i = 0; i < size; i++)
 {
         for(int j = 0; j < size; j++)
                 cout << MasA[i][j] << " ";
         cout << endl;
 }
    cout << "Array B:" << endl << endl;
 for (int i = 0; i < size; i++)
 {
         for(int j = 0; j < size; j++)
                 cout << MasB[i][j] << " ";
         cout << endl;
 }
 
 
 //main
  
 
 
 {for (int i = 0; i < size; i++)
     for (int j = 0; j < size; j++)
         MasC[i][j] +=(MasB[i][j]*MasA[i][j]);
 
    }
 
    
    
    
    
    
    
    
    //End
    
    cout << "Array C:" << endl << endl;
 for (int i = 0; i < size; i++)
 {
         for(int j = 0; j < size; j++)
                 cout << MasC[i][j] << " ";
         cout << endl;
 }
 
    delete []MasA;
    delete []MasB;
    delete []MasC;
 
    char ch;
 
    std::cin >> ch;
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2011, 23:41     Умножение матриц
Посмотрите здесь:

Умножение матриц C++
Умножение матриц C++
Умножение матриц C++
C++ Умножение треугольных матриц«Методы обработки разреженных матриц»
Умножение матриц C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
05.07.2011, 23:51     Умножение матриц #2
как минимум формула кривая.
C++
1
2
3
4
5
6
7
8
9
      for (int m = 0; m < DIM_a; m++) {
            for (int n = 0; n < DIM_d; n++) {
                  
                  summ = 0;
                  for (int c = 0; c < DIM_b; c++)
                        summ += mat_A[m][c] * mat_B[c][n];
                  mat_C[m][n] = summ;
            }
      }
AlexeyDevil
 Аватар для AlexeyDevil
21 / 21 / 2
Регистрация: 06.11.2010
Сообщений: 57
06.07.2011, 00:00     Умножение матриц #3
C++
1
2
3
4
5
6
    for(int i=0; i!=size; ++i)
        for(int j=0; j!=size; ++j){
            for(int k=0; k!=size; ++k){
                matrOne[i][j] += matrixTwo[i][k] * matrixThree[k][j];
            }
         }
Ты просто перемножал их поэлементно, а надо строку на столбец. В остальном, вроде, норм. Только причеши ее.
CoVeReTeSS
3 / 3 / 0
Регистрация: 24.03.2011
Сообщений: 99
06.07.2011, 00:10  [ТС]     Умножение матриц #4
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
// Multiplying arrays.cpp : main project file.
 
#include "stdafx.h"
#include<iostream>
#include<time.h>
 
using namespace System;
using std::cin;
using std::cout;
using std::endl;
 
int main(array<System::String ^> ^args)
{   
    cout<<"Input size of arrays ((N*N) type N): ";
    cout<<"Size of ARRAY #1:";
    
    int size;
    cin>>size;
    int **MasA = new int *[size];
    {for(int i = 0; i <size;++i)
        MasA[i] = new int[size];
    }
    {for (int i = 0; i < size; i++)
     for (int j = 0; j < size; j++)
     MasA[i][j] = ((rand() % 10));
    }
 
    int **MasB = new int *[size];
    {for(int i = 0; i <size;++i)
        MasB[i] = new int[size];
    }
    {for (int i = 0; i < size; i++)
     for (int j = 0; j < size; j++)
     MasB[i][j] = ((rand() % 10));
    }
          srand(time(NULL));
    int **MasC = new int *[size];
    {for(int i = 0; i <size;++i)
        MasC[i] = new int[size];
    }
    cout << "Array A:" << endl << endl;
 for (int i = 0; i < size; i++)
 {
         for(int j = 0; j < size; j++)
                 cout << MasA[i][j] << " ";
         cout << endl;
 }
    cout << "Array B:" << endl << endl;
 for (int i = 0; i < size; i++)
 {
         for(int j = 0; j < size; j++)
                 cout << MasB[i][j] << " ";
         cout << endl;
 }
 //main
 { for(int i=0; i!=size; ++i)
        for(int j=0; j!=size; ++j){
            for(int k=0; k!=size; ++k){
 MasC[i][j] += MasB[i][k] * MasA[k][j];
 
 
              }
         }
    }
    //End
    cout << "Array C:" << endl << endl;
 for (int i = 0; i < size; i++)
 {
         for(int j = 0; j < size; j++)
                 cout << MasC[i][j] << " ";
         cout << endl;
 }
    delete []MasA;
    delete []MasB;
    delete []MasC;
    char ch;
    std::cin >> ch;
    return 0;
}
Все равно что-то не то, при выводе выходит отрицательное громадное значение...

ЗЫ

Я делаю программу для умножения n*n матриц
co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
06.07.2011, 00:18     Умножение матриц #5
MasC обнули перед сложением
C++
1
2
   char ch;
        std::cin >> ch;
ппц )))
сделай system("pause");
CoVeReTeSS
3 / 3 / 0
Регистрация: 24.03.2011
Сообщений: 99
06.07.2011, 00:24  [ТС]     Умножение матриц #6
Обнуление устранило ошибку, но не до конца, выводится неправильное значение
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
// Multiplying arrays.cpp : main project file.
 
#include "stdafx.h"
#include<iostream>
#include<time.h>
 
using namespace System;
using std::cin;
using std::cout;
using std::endl;
 
int main(array<System::String ^> ^args)
{   
    cout<<"Input size of arrays ((N*N) type N): ";
    cout<<"Size of ARRAY #1:";
    
    int size;
    cin>>size;
    int **MasA = new int *[size];
    {for(int i = 0; i <size;++i)
        MasA[i] = new int[size];
    }
    {for (int i = 0; i < size; i++)
     for (int j = 0; j < size; j++)
     MasA[i][j] = ((rand() % 10));
    }
 
    int **MasB = new int *[size];
    {for(int i = 0; i <size;++i)
        MasB[i] = new int[size];
    }
    {for (int i = 0; i < size; i++)
     for (int j = 0; j < size; j++)
     MasB[i][j] = ((rand() % 10));
    }
          srand(time(NULL));
    int **MasC = new int *[size];
    {for(int i = 0; i <size;++i)
        MasC[i] = new int[size];
    }
    cout << "Array A:" << endl << endl;
 for (int i = 0; i < size; i++)
 {
         for(int j = 0; j < size; j++)
                 cout << MasA[i][j] << " ";
         cout << endl;
 }
    cout << "Array B:" << endl << endl;
 for (int i = 0; i < size; i++)
 {
         for(int j = 0; j < size; j++)
                 cout << MasB[i][j] << " ";
         cout << endl;
 }
 //main
 
 { for(int i=0; i!=size; ++i)
        for(int j=0; j!=size; ++j){
            MasC[i][j]=0;
            for(int k=0; k!=size; ++k){
 MasC[i][j] += MasB[i][k] * MasA[k][j];
              }
         }
    }
    //End
    cout << "Array C:" << endl << endl;
 for (int i = 0; i < size; i++)
 {
         for(int j = 0; j < size; j++)
                 cout << MasC[i][j] << " ";
         cout << endl;
 }
    delete []MasA;
    delete []MasB;
    delete []MasC;
    char ch;
    std::cin >> ch;
    return 0;
}
Насчет последней фразы, знаю что фейл лень было добавлять новую библиотеку и _getch
co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
06.07.2011, 00:26     Умножение матриц #7
в чем это выражается?
CoVeReTeSS
3 / 3 / 0
Регистрация: 24.03.2011
Сообщений: 99
06.07.2011, 00:31  [ТС]     Умножение матриц #8
Ну допустим, задаем сайз 2.

Консоль выбрасывает рэндомные значения двух массивов :
Array A:
1 7
4 0

Array B:
9 4
8 8

По правилу умножения матриц

Array C:
65 84
36 16

А вывод в консоли :
25 63
40 56

Сам попробуй
co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
06.07.2011, 00:33     Умножение матриц #9
мне студию впадлу запускать
CoVeReTeSS
3 / 3 / 0
Регистрация: 24.03.2011
Сообщений: 99
06.07.2011, 00:35  [ТС]     Умножение матриц #10
Не ленись, попробуй
silentnuke
Android Programmer
137 / 138 / 5
Регистрация: 08.12.2010
Сообщений: 421
06.07.2011, 00:40     Умножение матриц #11
C++
1
2
3
4
5
6
7
8
9
for(int i=0;i<size;++i)
{
    for(int j=0;j<size;++j)
    {
        MassC[i][j]=0;
        for (int k=0;k<size;++k)
            MassC[i][j]+=MassA[i][k]*MassB[k][j];
    }
}
CoVeReTeSS
3 / 3 / 0
Регистрация: 24.03.2011
Сообщений: 99
06.07.2011, 00:52  [ТС]     Умножение матриц #12
Я же сказал проблема не в этом.
silentnuke
Android Programmer
137 / 138 / 5
Регистрация: 08.12.2010
Сообщений: 421
06.07.2011, 01:02     Умножение матриц #13
Цитата Сообщение от CoVeReTeSS Посмотреть сообщение
Я же сказал проблема не в этом.
Да ну?)
с каких это пор
C++
1
MassC[i][j]+=MassB[i][k]*Massa[k][j];
эквиваетно
C++
1
MassC[i][j]+=MassA[i][k]*MassB[k][j];
просвятите меня)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2011, 23:07     Умножение матриц
Еще ссылки по теме:

C++ умножение матриц C++
Умножение матриц C++

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

Или воспользуйтесь поиском по форуму:
CoVeReTeSS
3 / 3 / 0
Регистрация: 24.03.2011
Сообщений: 99
06.07.2011, 23:07  [ТС]     Умножение матриц #14
Спасибо, ступил

Добавлено через 21 час 56 минут
Кому надо Вот полностью исправный код умножения двух матриц типа N*N
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
// Multiplying arrays.cpp : main project file.
 
#include "stdafx.h"
#include<iostream>
#include<time.h>
 
 
using namespace System;
using std::cin;
using std::cout;
using std::endl;
 
int main(array<System::String ^> ^args)
{   
    cout<<"Input size of arrays ((N*N) type N): ";
    
    int size;
    cin>>size;
    int **MasA = new int *[size];
    {for(int i = 0; i <size;++i)
        MasA[i] = new int[size];
    }
    {for (int i = 0; i < size; i++)
     for (int j = 0; j < size; j++)
     MasA[i][j] = ((rand() % 10));
    }
 
    int **MasB = new int *[size];
    {for(int i = 0; i <size;++i)
        MasB[i] = new int[size];
    }
    {for (int i = 0; i < size; i++)
     for (int j = 0; j < size; j++)
     MasB[i][j] = ((rand() % 10));
    }
          srand(time(NULL));
    int **MasC = new int *[size];
    {for(int i = 0; i <size;++i)
        MasC[i] = new int[size];
    }
    cout << "Array A:" << endl << endl;
    for (int i = 0; i < size; i++)
 {
         for(int j = 0; j < size; j++)
                 cout << MasA[i][j] << " ";
         cout << endl;
 }
    cout << "Array B:" << endl << endl;
 for (int i = 0; i < size; i++)
 {
         for(int j = 0; j < size; j++)
                 cout << MasB[i][j] << " ";
         cout << endl;
 }
 { for(int i=0; i<size; ++i)
        for(int j=0; j<size; ++j){
            MasC[i][j]=0;
            for(int k=0; k<size; ++k){
 MasC[i][j] += MasA[i][k] * MasB[k][j];
              }
         }
    }
    cout << "Array C:" << endl << endl;
 for (int i = 0; i < size; i++)
 {
         for(int j = 0; j < size; j++)
                 cout << MasC[i][j] << " ";
         cout << endl;
 }
    delete []MasA;
    delete []MasB;
    delete []MasC;
    }
Yandex
Объявления
06.07.2011, 23:07     Умножение матриц
Ответ Создать тему
Опции темы

Текущее время: 20:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru