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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.83
VВладимир
1 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 50
08.10.2012, 21:39     Перемножить 2 матрицы #1
Здравствуйте! Пытаюсь перемножить 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;
}
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Евгений89
 Аватар для Евгений89
99 / 99 / 9
Регистрация: 17.04.2011
Сообщений: 554
Завершенные тесты: 2
08.10.2012, 21:54     Перемножить 2 матрицы #2
кидай полностью код

Добавлено через 3 минуты
а то так толком не понятно
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
08.10.2012, 21:56     Перемножить 2 матрицы #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];
   }
}
Евгений89
 Аватар для Евгений89
99 / 99 / 9
Регистрация: 17.04.2011
Сообщений: 554
Завершенные тесты: 2
08.10.2012, 21:59     Перемножить 2 матрицы #4
SMatrix[1][4] = 0; почему у тебя здесь числа поставь i и j

Добавлено через 3 минуты
SMatrix[i][j] = vhodMatrix[i][j]*sinapsMatrix[i][j]; тут перед равно должен плюс стоять
VВладимир
1 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 50
08.10.2012, 22:02  [ТС]     Перемножить 2 матрицы #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;
}
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
08.10.2012, 22:04     Перемножить 2 матрицы #6
Цитата Сообщение от Евгений89 Посмотреть сообщение
SMatrix[i][j] = vhodMatrix[i][j]*sinapsMatrix[i][j]; тут перед равно должен плюс стоять
зачем ???
Евгений89
 Аватар для Евгений89
99 / 99 / 9
Регистрация: 17.04.2011
Сообщений: 554
Завершенные тесты: 2
08.10.2012, 22:07     Перемножить 2 матрицы #7
по тому что в этот массив будет забиваться произведение двух других массивов
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
08.10.2012, 22:09     Перемножить 2 матрицы #8
Цитата Сообщение от Евгений89 Посмотреть сообщение
по тому что в этот массив будет забиваться произведение двух других массивов
и зачем там плюс?
Евгений89
 Аватар для Евгений89
99 / 99 / 9
Регистрация: 17.04.2011
Сообщений: 554
Завершенные тесты: 2
08.10.2012, 22:15     Перемножить 2 матрицы #9
Цитата Сообщение от defer Посмотреть сообщение
и зачем там плюс?
для увеличения
VВладимир
1 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 50
08.10.2012, 22:16  [ТС]     Перемножить 2 матрицы #10
Все поправил, как вы написали, но это все равно не помогает
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
08.10.2012, 22:18     Перемножить 2 матрицы #11
Цитата Сообщение от Евгений89 Посмотреть сообщение
для увеличения
Зачем увеличивать если значение 0 и прибавляем число к 0? Проще сразу заменить число
Евгений89
 Аватар для Евгений89
99 / 99 / 9
Регистрация: 17.04.2011
Сообщений: 554
Завершенные тесты: 2
08.10.2012, 22:19     Перемножить 2 матрицы #12
SMatrix[1][4] = 0; тут та почему опять цифры
defer
秘密
 Аватар для defer
555 / 235 / 3
Регистрация: 29.11.2010
Сообщений: 783
08.10.2012, 22:19     Перемножить 2 матрицы #13
Цитата Сообщение от VВладимир Посмотреть сообщение
Все поправил, как вы написали, но это все равно не помогает
Покажите что получилось после исправления
Евгений89
 Аватар для Евгений89
99 / 99 / 9
Регистрация: 17.04.2011
Сообщений: 554
Завершенные тесты: 2
08.10.2012, 22:31     Перемножить 2 матрицы #14
снаало проверяется условие SMatrix[i][j] = 0 с текущими значениями
выполняется команда i++ что приводит к увеличению на 1 потом снова проверяется условие
SMatrix[i][j] += vhodMatrix[i][j]*sinapsMatrix[i][j];
процесс будет до тех пор пока не привысит i и j задоного значения в твоем случае 4
после чего значение SMatrix[i][j] определяется суммой умножения чисел забитых в двух других массивах
зто значение выводится на экран как ни крути матрица у тебя будет на выводе 4х4 цифры только поменяются
VВладимир
1 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 50
13.10.2012, 10:27  [ТС]     Перемножить 2 матрицы #15
Все равно алгоритм не работает. Бьюсь, бьюсь, ничего не получается, выводится одна строка и потом 4 раза повторяется то есть 4 знаяения повторяются 4 раза, а должно быть 16 разных значений
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
13.10.2012, 11:49     Перемножить 2 матрицы #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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2012, 16:53     Перемножить 2 матрицы
Еще ссылки по теме:

Перемножить матрицы произвольного размера C++
Перемножить все отрицательные элементы матрицы C++
C++ Перемножить две матрицы

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

Или воспользуйтесь поиском по форуму:
VВладимир
1 / 1 / 0
Регистрация: 08.10.2012
Сообщений: 50
13.10.2012, 16:53  [ТС]     Перемножить 2 матрицы #17
СПАСИБО ОГРОМНОЕ! ВЫ МНЕ ОЧЕНЬ ПОМОГЛИ!
Yandex
Объявления
13.10.2012, 16:53     Перемножить 2 матрицы
Ответ Создать тему
Опции темы

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