Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
1 / 1 / 1
Регистрация: 08.10.2012
Сообщений: 50
1

Перемножить 2 матрицы

08.10.2012, 21:39. Показов 3106. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Пытаюсь перемножить 2 матрицы размерности 4х4 на С++, однако при выводе результирующей матрицы появляется матрица, состоящая из четырех одинаковых строк, чего быть не должно, должна появиться матрица, состоящая из 16 разных значений. Подскажите, пожалуйста, что я делаю не так. (сообщения об ошибке компиляции при этом не возникает)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 //Код перемножения матриц:
for(i = 0; i < 4; i++)
{
for(j = 0; j < 4; j++)
{SMatrix[i][j] = 0;
for(k = 0; k < 4; k++)
{
SMatrix[i][j] += vhodMatrix[k][j]*sinapsMatrix[i][k];
}
}
}
 
//Вывод результирующей матрицы:
SMatrix[1][4] = 0;
for(i = 0; i < 4; i++)
{
for(j = 0; j < 4; j++)
{
cout << SMatrix[i][j] << ", ";
}
cout << endl;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.10.2012, 21:39
Ответы с готовыми решениями:

Перемножить матрицы
Помогите написать код: :)

Перемножить матрицы. В=А*А(транспонированная)
Здравствуйте. Помогите пожалуйста. 2 курс. Не знаю как решить.

Перемножить две матрицы
Сформировать два одномерных массива целочисленных из 10 элементов каждый, а потом сформировать...

Заданы матрицы А, В, С, D, каждая из которых содержит по три строчки и по три столбца. Перемножить матрицы Р и Q
Заданы матрицы А, В, С, D, каждая из которых содержит по три строчки и по три столбца. Перемножить...

16
101 / 101 / 39
Регистрация: 17.04.2011
Сообщений: 554
08.10.2012, 21:54 2
кидай полностью код

Добавлено через 3 минуты
а то так толком не понятно
1
577 / 256 / 18
Регистрация: 29.11.2010
Сообщений: 868
08.10.2012, 21:56 3
C++
1
2
3
4
5
6
7
for(i = 0; i < 4; i++)
{
   for(j = 0; j < 4; j++)
   {
        SMatrix[i][j] = vhodMatrix[i][j]*sinapsMatrix[i][j];
   }
}
0
101 / 101 / 39
Регистрация: 17.04.2011
Сообщений: 554
08.10.2012, 21:59 4
SMatrix[1][4] = 0; почему у тебя здесь числа поставь i и j

Добавлено через 3 минуты
SMatrix[i][j] = vhodMatrix[i][j]*sinapsMatrix[i][j]; тут перед равно должен плюс стоять
0
1 / 1 / 1
Регистрация: 08.10.2012
Сообщений: 50
08.10.2012, 22:02  [ТС] 5
Спасибо за ответ, выкладываю полный код:
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <windows.h> 
#include <iostream>
 
char bufRus[256];
 
char* Rus(const char* text) {
      CharToOem(text, bufRus);
      return bufRus;
      }
int i, j, k;      
using namespace std;
char h;
float n;
 
int main()
{
   float SMatrix[j][i]; 
   
   cout << Rus("Вывод значений матрицы синаптических весов нейронов W")<< endl;
float sinapsMatrix[4][4] = {{0.42, 1, 0.4, 0.5}, //Ввод матрицы W -синаптических весов нейронов
{0.09, 0, 0.3, 0.2},
{0.33, 0, 0.2, 0.2},
{0.17, 0, 0.1, 0.1}};
 
sinapsMatrix[1][4] = 0;
 
for(k = 0; k < 4; k++)
{
for(j = 0; j < 4; j++)
{
cout << sinapsMatrix[k][j] << ", ";
}
 
cout << endl;
}
 
cout << h << endl;
float vhodMatrix[4][4] = {{321.6, 380, -6.7, 80}, 
{381.6, 480, -7.8, 85},
{330.8, 550, -3.9, 80},
{302.3, 500, -5, 80}};
 
 
cout << Rus("Вывод значений матрицы входных параметров Х")<< endl;
 
 
vhodMatrix[1][4] = 0;
 
for(i = 0; i < 4; i++)
{
for(k = 0; k < 4; k++)
{
cout << vhodMatrix[i][k] << ", ";
}
 
cout << endl;
}
 
//Операция перемножения матрицы W и матрицы X 
 
for(i = 0; i < 4; i++)
{
for(j = 0; j < 4; j++)
{SMatrix[i][j] = 0;
for(k = 0; k < 4; k++)
{
SMatrix[i][j] += vhodMatrix[k][j]*sinapsMatrix[i][k];
}
}
}
 
//Вывод решения перемножения матрицы W и матрицы X - значений матрицы текущего состояния сети S=W*X "
cout << Rus("Расчет значений матрицы текущего состояния сети S=W*X ")<< endl;
SMatrix[i][j] = 0;
for(i = 0; i < 4; i++)
{
for(j = 0; j < 4; j++)
{
cout << SMatrix[i][j] << ", ";
}
cout << endl;
} 
 system("pause"); 
 return 0;
}
0
577 / 256 / 18
Регистрация: 29.11.2010
Сообщений: 868
08.10.2012, 22:04 6
Цитата Сообщение от Евгений89 Посмотреть сообщение
SMatrix[i][j] = vhodMatrix[i][j]*sinapsMatrix[i][j]; тут перед равно должен плюс стоять
зачем ???
0
101 / 101 / 39
Регистрация: 17.04.2011
Сообщений: 554
08.10.2012, 22:07 7
по тому что в этот массив будет забиваться произведение двух других массивов
0
577 / 256 / 18
Регистрация: 29.11.2010
Сообщений: 868
08.10.2012, 22:09 8
Цитата Сообщение от Евгений89 Посмотреть сообщение
по тому что в этот массив будет забиваться произведение двух других массивов
и зачем там плюс?
0
101 / 101 / 39
Регистрация: 17.04.2011
Сообщений: 554
08.10.2012, 22:15 9
Цитата Сообщение от defer Посмотреть сообщение
и зачем там плюс?
для увеличения
0
1 / 1 / 1
Регистрация: 08.10.2012
Сообщений: 50
08.10.2012, 22:16  [ТС] 10
Все поправил, как вы написали, но это все равно не помогает
0
577 / 256 / 18
Регистрация: 29.11.2010
Сообщений: 868
08.10.2012, 22:18 11
Цитата Сообщение от Евгений89 Посмотреть сообщение
для увеличения
Зачем увеличивать если значение 0 и прибавляем число к 0? Проще сразу заменить число
0
101 / 101 / 39
Регистрация: 17.04.2011
Сообщений: 554
08.10.2012, 22:19 12
SMatrix[1][4] = 0; тут та почему опять цифры
0
577 / 256 / 18
Регистрация: 29.11.2010
Сообщений: 868
08.10.2012, 22:19 13
Цитата Сообщение от VВладимир Посмотреть сообщение
Все поправил, как вы написали, но это все равно не помогает
Покажите что получилось после исправления
0
101 / 101 / 39
Регистрация: 17.04.2011
Сообщений: 554
08.10.2012, 22:31 14
снаало проверяется условие SMatrix[i][j] = 0 с текущими значениями
выполняется команда i++ что приводит к увеличению на 1 потом снова проверяется условие
SMatrix[i][j] += vhodMatrix[i][j]*sinapsMatrix[i][j];
процесс будет до тех пор пока не привысит i и j задоного значения в твоем случае 4
после чего значение SMatrix[i][j] определяется суммой умножения чисел забитых в двух других массивах
зто значение выводится на экран как ни крути матрица у тебя будет на выводе 4х4 цифры только поменяются
0
1 / 1 / 1
Регистрация: 08.10.2012
Сообщений: 50
13.10.2012, 10:27  [ТС] 15
Все равно алгоритм не работает. Бьюсь, бьюсь, ничего не получается, выводится одна строка и потом 4 раза повторяется то есть 4 знаяения повторяются 4 раза, а должно быть 16 разных значений
0
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
13.10.2012, 11:49 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
#include <iostream> 
#include <iomanip>
 
int main() 
{ 
    const int size = 4;  
    int i, j, z;
    double A[size][size] = { 0.42, 1, 0.4, 0.5, 
                            0.09, 0, 0.3, 0.2,
                            0.33, 0, 0.2, 0.2,
                            0.17, 0, 0.1, 0.1}; 
 
    double B[size][size] = {321.6, 380, -6.7, 80, 
                           381.6, 480, -7.8, 85,
                           330.8, 550, -3.9, 80,
                           302.3, 500, -5, 80}; 
     
 
    
    double C[size][size]; 
 
 
    for ( i = 0; i < size; i++) 
        for ( j = 0; j < size; j++) 
        { 
            C[i][j] = 0; 
            for ( z = 0; z < size; z++) 
                C[i][j] += A[i][z] * B[z][j]; 
        }  
         
        for ( i = 0; i < size; i++) 
            for ( j = 0; j < size; j++) 
            { 
                if( j % size == 0) 
                    std::cout << std::endl; 
                std::cout <<std::setw(8) <<  C[i][j]; 
            }
            std::cout << std::endl;
}
1
1 / 1 / 1
Регистрация: 08.10.2012
Сообщений: 50
13.10.2012, 16:53  [ТС] 17
СПАСИБО ОГРОМНОЕ! ВЫ МНЕ ОЧЕНЬ ПОМОГЛИ!
0
13.10.2012, 16:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.10.2012, 16:53
Помогаю со студенческими работами здесь

Перемножить матрицы произвольного размера
#include &lt;iostream&gt; using std::cin; using std::cout; using std::endl; int main() { int...

Как правильно перемножить матрицы?
помогите, пожалуйста, дописать программу. Не могу разобраться, как перемножить матрицы #include...

Перемножить элементы первой строки матрицы
2. Дан двумерной массив Найти и умжонить элементов первой строки

Считать с файла две матрицы и перемножить их
Считать с файла две матрицы и перемножить их


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru