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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.79
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
#1

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

14.02.2010, 09:49. Просмотров 4368. Ответов 9
Метки нет (Все метки)

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

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

Матрицу А умножить на Матрицу В - C++
Народ, помогите написать программу, которая перемножает 2 матрицы. #include <stdio.h> #include <conio.h> int main (void) { ...

Матрицу умножить на матрицу - C++
матрицу умножить на матрицу,,помогите решить задачу.

Умножить матрицу на матрицу - C++
Как транспонированную матрицу At умножить на другую транспонированную Bt? #include "stdafx.h" #include <iostream> using...

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

умножить матрицу на столбец - C++
матрица квадратная

9
cibertronic
256 / 143 / 13
Регистрация: 27.12.2009
Сообщений: 908
14.02.2010, 09:57 #2
гдето такаятема уже была, поищи по форуму
0
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
14.02.2010, 10:23  [ТС] #3
Дайте простой пример плиз!
0
PointsEqual
ниначмуроФ
836 / 520 / 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;
}
0
kursant
1 / 1 / 0
Регистрация: 31.01.2010
Сообщений: 61
14.02.2010, 10:37  [ТС] #5
А проще что-нибудь есть?
0
PointsEqual
ниначмуроФ
836 / 520 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
14.02.2010, 11:15 #6
возможно есть) но я вот так написал)
0
Genius Ignat
1237 / 775 / 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;
}
проще не проще но так тоже можно.
2
PointsEqual
ниначмуроФ
836 / 520 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
14.02.2010, 11:28 #8
так тоже можно)
0
kazak
3048 / 2369 / 160
Регистрация: 11.03.2009
Сообщений: 5,436
Завершенные тесты: 1
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];
      }
   }
}
3
cibertronic
256 / 143 / 13
Регистрация: 27.12.2009
Сообщений: 908
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... если найду выложу
1
17.02.2010, 15:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.02.2010, 15:56
Привет! Вот еще темы с ответами:

Умножить вектор-строку на матрицу - C++
Есть вектор-строка размера 1*6, её надо умножить на матрицу размером 6*27. Не понимаю как сделать такое умножение. Сколько не пробовал не...

Умножить первую матрицу на вторую - C++
2 матрицы считываются с файла и выводятся, а вот умножение их почему то не работает, помогите #include &quot;stdafx.h&quot; #include &lt;iostream&gt; ...

Умножить матрицу квадратную на вектор - C++
уже не знаю, что делать до ужаса глупейшая ошибка, из-за чего весь алгоритм к чертям:( for (int i = 1; i &lt; size; i++) for (int...

Умножить матрицу на себя транспонированую - C++
Буду краток: необходимо Умножить матрицу на себя транспонированую!!!(без хранения транспонированной) Как в вышмате это сделать я понимаю, а...


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

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

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