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

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

Восстановить пароль Регистрация
 
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
03.06.2012, 19:08     Перемножение матриц #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
#include <math.h>
#include <iostream.h>
int main() {
int itr, k, l, m=4, N=2;
double a[4][4]={{25,2,-2,1},{0,-20-0.3*N,3,0.1*N},{2,5,25,-2},{-4,-0.1*N,1,16+0.3*N}}, 
b[4]={{25*N+11},{-49-0.5*N},{2*N-67},{-3.9*N+13}},
 c[4]={{0},{0},{0},{0}},
 g[4]={{0},{0},{0},{0}},
 c_old[4], temp, var, eps=0.01;
 
cout <<endl<<"Matrix A"<<endl; 
for (k=0; k<4; k++)
{
for (l=0; l<4; l++)
{
cout<<a[k][l]<<" ";
}
cout <<endl;
}
cout <<endl;
cout <<"Matrix B"<<endl; 
for (k=0; k<4; k++)
{
cout<<b[k];
cout<<endl;
}
cout <<endl;
do
{
    itr++;
    for (k=0; k<m; k++)
        c_old[k]=c[k];
    for (k=0; k<m; k++)
    {
        var=0;
        for (l=0; l<m; l++)
            if (k!=l) var+=a[k][l]*c[l];
        c[k]=(b[k]-var)/a[k][k];
    }
    temp=0;
    for (k=0; k<m; k++)
        temp+=fabs(c_old[k]-c[k]);
} while (temp>eps);
 
cout <<"Matrix X"<<endl; 
for (k=0; k<4; k++)
{
cout<<c[k];
cout<<endl;
}
g[4]=a[4][4]*c[4]-b[4];
for (k=0; k<4; k++)
{
cout<<g[k];
}
return 0; }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2012, 19:08     Перемножение матриц
Посмотрите здесь:

C++ перемножение матриц
C++ Перемножение матриц
Перемножение 2-ух матриц C++
C++ Перемножение матриц на С++
C++ перемножение матриц
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
03.06.2012, 19:18     Перемножение матриц #2
C++
1
if (k!=l) var+=a[k][l]*c[l];
var всегда будет 0
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
03.06.2012, 19:58  [ТС]     Перемножение матриц #3
var всегда будет 0
"к" же индекс в массиве, не понял, что вы хотели сказать
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4925 / 2668 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
03.06.2012, 20:12     Перемножение матриц #4
Цитата Сообщение от apachan Посмотреть сообщение
"к" же индекс в массиве, не понял, что вы хотели сказать
c[l] содержит 0 для любого l = 0, 1, 2, 3
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
05.06.2012, 00:19  [ТС]     Перемножение матриц #5
и как быть? код вроде рабочий, систему ур-ий решает, а с умножением косяк =/
-=ЮрА=-
Заблокирован
Автор FAQ
05.06.2012, 01:48     Перемножение матриц #6
apachan, вот наглядный простой и рабочий пример как перемножить матрицы
Как умножить матрицы

Не по теме:

Также по желанию загляни сюда http://www.cyberforum.ru/faq/thread4...ml#post2464869 и далее,
уверен лишним не будет!

apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
24.06.2012, 22:51  [ТС]     Перемножение матриц #7
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
apachan, вот наглядный простой и рабочий пример как перемножить матрицы
Как умножить матрицы

Не по теме:

Также по желанию загляни сюда http://www.cyberforum.ru/faq/thread4...ml#post2464869 и далее,
уверен лишним не будет!

Может и простой, но у меня не получилось

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
#include <math.h>
#include <iostream.h>
int main() {
int itr, k, l, v, m=4, N=2;
double a[4][4]={{25,2,-2,1},{0,-20-0.3*N,3,0.1*N},{2,5,25,-2},{-4,-0.1*N,1,16+0.3*N}}, 
b[4]={{25*N+11},{-49-0.5*N},{2*N-67},{-3.9*N+13}},
 c[4]={{0},{0},{0},{0}},
 g[4]={{0},{0},{0},{0}},
 c_old[4], temp, var, eps=0.01;
 
cout <<endl<<"Matrix A"<<endl; 
for (k=0; k<4; k++)
{
for (l=0; l<4; l++)
{
cout<<a[k][l]<<" ";
}
cout <<endl;
}
cout <<endl;
cout <<"Matrix B"<<endl; 
for (k=0; k<4; k++)
{
cout<<b[k];
cout<<endl;
}
cout <<endl;
do
{
    itr++;
    for (k=0; k<m; k++)
        c_old[k]=c[k];
    for (k=0; k<m; k++)
    {
        var=0;
        for (l=0; l<m; l++)
            if (k!=l) var+=a[k][l]*c[l];
        c[k]=(b[k]-var)/a[k][k];
    }
    temp=0;
    for (k=0; k<m; k++)
        temp+=fabs(c_old[k]-c[k]);
} while (temp>eps);
 
cout <<"Matrix X"<<endl; 
for (k=0; k<4; k++)
{
cout<<c[k];
cout<<endl;
}
for(k = 0; k < 4; k++)
    for(l = 0; l < 1; l++)
    for(v = 0; v < 4; v++)
    {
        g[4] += a[k][v]*c[v];
    }
for (k=0; k<4; k++)
{
cout<<" "<<g[4];
}
return 0; }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2012, 12:52     Перемножение матриц
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
25.06.2012, 12:52     Перемножение матриц #8
apachan, всмотревшись в твой алгоритм уловил что требуется рассчёт по методу Гаусса. Вот нормальная реализация метода Гаусса. Методом Гаусса решить систему n линейных алгебраических уравнений
Ошибка у тебя возникла внутри прямого хода, потому как не сортируешь строки по максимальному элементу на главной диагонали на каждой итерации...
Корректность же результатов перемножения матриц зависит от корректности прямого хода.
Ну и вот это
Цитата Сообщение от apachan Посмотреть сообщение
for(k = 0; k < 4; k++)
* * for(l = 0; l < 1; l++)
* * for(v = 0; v < 4; v++)
* * {
* * * * g[4] += a[k][v]*c[v];
* * }
меня повергло в уныние, g[4] во первых в векторе g последний индекс имеет величину 3 (память же всего под 4-ри элемента
Цитата Сообщение от apachan Посмотреть сообщение
g[4]={{0},{0},{0},{0}},
), во вторых, где индексация???У тебя же ведь всё к одному значению приплюсовывается
Тогда надо g[k] += a[k][v]*c[v];
Yandex
Объявления
25.06.2012, 12:52     Перемножение матриц
Ответ Создать тему
Опции темы

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