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

Как умножить матрицу на матрицу? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.79
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
14.02.2010, 09:49     Как умножить матрицу на матрицу? #1
Как умножить матрицу на матрицу? Напишите пожалуйста!
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cibertronic
 Аватар для cibertronic
255 / 142 / 13
Регистрация: 27.12.2009
Сообщений: 893
14.02.2010, 09:57     Как умножить матрицу на матрицу? #2
гдето такаятема уже была, поищи по форуму
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
14.02.2010, 10:23  [ТС]     Как умножить матрицу на матрицу? #3
Дайте простой пример плиз!
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
14.02.2010, 10:30     Как умножить матрицу на матрицу? #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
//Умножение матриц
bool MultiplyMatrix(double **Matrix1, int Rows1, int Columns1,
     double **Matrix2, int Rows2, int Columns2,
     double ***ResultMatrix, int *ResultRows, int *ResultColumns)
{
 *ResultRows = Rows1;
 *ResultColumns = Columns2;
 double **Ret;
 Ret = AllocMatrix(*ResultRows, *ResultColumns);
        *ResultMatrix = Ret;
        if (Ret != NULL)
 {
  for (int i = 0; i < *ResultRows; i++)
   for (int j = 0; j < *ResultColumns; j++)
   {
    double Sum = 0;
    for (int n = 0; n < Rows2; n++)
    {
     Sum += Matrix1[i][n]*Matrix2[n][j];
    }
    (*ResultMatrix)[i][j] = Sum;
   }
  return true;
 }else return false;
}
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
14.02.2010, 10:37  [ТС]     Как умножить матрицу на матрицу? #5
А проще что-нибудь есть?
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
14.02.2010, 11:15     Как умножить матрицу на матрицу? #6
возможно есть) но я вот так написал)
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
14.02.2010, 11:26     Как умножить матрицу на матрицу? #7
Проверено:
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
#include <iostream.h>
int main(){
const int H = 2;
const int W = 2;
int matrix1[H][W] = {
    { 2,3 },
    { 5,7 }
 
};
 
int matrix2[H][W] = {
    { -1,2 },
    { -2,3 },
 
};
 
//Матрица которая получается при произведении двух матриц
int pmatrix[H][W] = {0};
 
//Вычисляем произведение матриц
int i,j,t;
 for (i=0; i < H; i++)
    for (j=0; j < W; j++)
            for (t=0;t <H; t++)
                pmatrix[i][j]+=matrix1[i][t]*matrix2[t][j];
 
 
//вывод получившейся матрицы
int k,p;
for(k=0;k<H;k++){
    for(p=0;p<W;p++){
cout<<' '<<pmatrix[k][p];
    }
cout<<'\n';
}
 
return 0;
}
проще не проще но так тоже можно.
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
14.02.2010, 11:28     Как умножить матрицу на матрицу? #8
так тоже можно)
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
14.02.2010, 11:41     Как умножить матрицу на матрицу? #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
int a[SIZE_RA][SIZE], b[SIZE][SIZE_CB], c[SIZE_RA][SIZE_CB];
...
for (i = 0; i < SIZE_RA; i++)
{
   for (j = 0; j < SIZE_CB; j++)
   {
      for (k = 0; k < SIZE; j++)
      {
         c[i][j] += a[i][k] * b[k][j];
      }
   }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2010, 15:56     Как умножить матрицу на матрицу?
Еще ссылки по теме:

Умножить квадратную матрицу на вектор C++
умножить матрицу на столбец C++
в матрице А(n x m) найти первый столбец, не содержащий отрицательных элементов, и умножить его как вектор на матрицу А C++

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

Или воспользуйтесь поиском по форуму:
cibertronic
 Аватар для cibertronic
255 / 142 / 13
Регистрация: 27.12.2009
Сообщений: 893
17.02.2010, 15:56     Как умножить матрицу на матрицу? #10
а я когдато писал такую
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
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
 
 
void main()
{
int i,j,    // индекы элементов матрици а (строка,столбец соответственно)
    i1,j1,  // индекы элементов матрици b (строка,столбец соответственно)
    n,m,    // размерность матрицы а      (строка,столбец соответственно)
    k,l;    // размерность матрицы b      (строка,столбец соответственно)
const int N1=10,M1=10,Z1=100;  //  максимально домустимые размеры массивов (ЗАДАЮТСЯ КАК КОНСТАНТЫ)
int a[N1][M1],b[N1][M1],c[Z1];  // массивы
system("title произведение мариц");  // название программы в заголовке окна
 
 
system("echo введите количество строк и столбцов матрицы а");
scanf("%d%d",&n,&m);   // присваивание значений размеров матрицы а, введенных с клавиатуры
system("echo введите количество строк и столбцов матрицы b");
scanf("%d%d",&k,&l);   // присваивание значений размеров матрицы b, введенных с клавиатуры
if(n<1 || m<1 || k<1 || l<1) // проверка правильности введенных значений размеров матриц
{
system("echo количество строк и столбцов не может быть меньше хотябы одного элемента!!!");
system("echo.");  // пустая строка.
system("pause");  // ожидание нажатия любой клавиши
exit(2);      // выход из программы
}
 
if(m !=k)     // проверка на возможность перемножения матриц
{
system("echo количество столбцов матрицы а должно быть равно количеству строк матрицы b");
system("echo.");
system("pause");
exit(2);
}
 
system("echo введите элементы матрицы а"); // формирование матрицы а
for(i=0;i<n;i++)    //строки
 for(j=0;j<m;j++)      // столбцы
 scanf("%d",&a[i][j]);         // присвоение массиву элементов введенных с клавиатуры
system("echo введите элементы матрицы b"); // формирование матрицы b
for(i1=0;i1<k;i1++)
 for(j1=0;j1<l;j1++)
 scanf("%d",&b[i1][j1]);
 
system("cls");        // очистка экрана
system("echo исходные матрицы:");
system("echo.");
                                // контрольный вывод на экран сформированных матриц
system("echo матрица а:");
for(i=0;i<n;printf("\n"),i++)
 for(j=0;j<m;j++)
 printf("%4d",a[i][j]);
system("echo матрица b:");
for(i1=0;i1<k;printf("\n"),i1++)
 for(j1=0;j1<l;j1++)
 printf("%4d",b[i1][j1]);
 
int h=0,s=0;           // переменная массива b, переменная суммы
 
 for(i=0;i<n;i++)
 for(j1=0;j1<l;j1++)
 {
  for(i1=0;i1<k;i1++)
  {
  int r=a[i][i1];
  int e=b[i1][j1];
   int s=s+r*e;            // суммирование произведений элементов строки матрицы а на элементы столбца матрицы b
   if(i1==k-1)     // если строка матрицы а закончена,
   {
   c[h]=s;         // то полученную сумму произведений присваиваем массиву с,
   s=0;            // переменную суммы сбрасываем на исходное значение
   h++;            // и увеличиваем индекс массива с на еденицу
   }
  }
 }
 
 
 system("echo матрица с:"); // вывод полученного одномерного массива в виде двумерного
 for(h=0;h<l*n;h++)     // здесь l*n означает максимальную длинну массива(размерность полученной матрицы) n строк на l столбцов
 {
  printf("%5d",c[h]);      // вывод элементов массива на эеран
  if(h%l==1)       // если строка закончена
  printf("\n");    // новая строка
 }
 getch();
}
Добавлено через 1 минуту
тут немного более надежно...единственное это то что писал под целочисленную матрицу. )

Добавлено через 8 минут
гдето еще была не с выходом при ошибке ввода и при окончании работы, а с возможностью повтора, найти не могу.... ну там принцип такой типа "повторить? 1-да 2-нет" основывал на операторе do...while... если найду выложу
Yandex
Объявления
17.02.2010, 15:56     Как умножить матрицу на матрицу?
Ответ Создать тему
Опции темы

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