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

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

Войти
Регистрация
Восстановить пароль
 
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
#1

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

03.06.2012, 19:08. Просмотров 1097. Ответов 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
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; }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.06.2012, 19:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перемножение матриц (C++):

Перемножение матриц - C++
Помогите решить проблему суть задачи проверить матрицу бинарного отношения на свойства. Все сделал кроме Транзитивности, суть того, что...

Перемножение матриц. - C++
Нужен код для перемножения матрицы и столбца за минимально возможное время. Порядок матрицы ( и столбца ) огромен - около 100000....

Перемножение матриц - C++
Народ помогите плиз!!! Не получается перемножить 2 матрици 3х3. Может у кого есть запрограммированый алгоритм? Очень нужно.

Перемножение матриц - C++
Доброго времени суток! У меня есть две матрицы: первая k x m и вторая u x s размерностей. Нужно их перемножить. Подскажите, пожалуйста, в...

Перемножение матриц - C++
Как сделать перегрузку *= для матриц ?! Был такой вариант: Matrix&amp; Matrix::operator *= (const Matrix &amp;rhs) { Matrix...

Перемножение матриц - C++
Привет. Помогите пожалуйста решить нетрудную задачу.Заранее спасибо. (если можно рабочую версию) Дано два двумерных массива ...

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

Не по теме:

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

0
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; }
0
-=ЮрА=-
Заблокирован
Автор 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];
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2012, 12:52
Привет! Вот еще темы с ответами:

Перемножение матриц - C++
Помогите исправить ошибки. //--------------------------------------------------------------------------- #include &lt;iostream&gt; ...

Перемножение матриц - C++
Даны две квадратные матрицы.Напишите программу перемножающую матрицы по правилам перемножения матриц. У меня есть программа. но мне...

Перемножение 2-х матриц - C++
Написал программу перемножения матриц, не понимаю в чем дело , выводит бред. Подскажите в чем проблема пожалуйста.Размеры матрицы...

Перемножение матриц - C++
Помогите пожалуйста написать программу в которой будет содержаться функция для перемножения двух прямоугольных матриц.


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.06.2012, 12:52
Ответ Создать тему
Опции темы

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