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

Найти ошибку в реализации метода Гаусса - C++

Восстановить пароль Регистрация
 
qwer1234
12 / 12 / 3
Регистрация: 30.10.2012
Сообщений: 463
22.03.2016, 12:47     Найти ошибку в реализации метода Гаусса #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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include "iostream" 
#include "math.h" 
#include "stdlib.h" 
#include "locale.h" 
 
using namespace std; 
 
int main() 
{ 
    int i, j, n, m; 
    setlocale(LC_ALL, "rus"); 
    
    cout << "Veditb 4uslo r9dkiv: "; 
    cin >> n; 
    cout << "Vveditb 4uslo stovpciv: "; 
    cin >> m; 
    m+=1; 
    float **matrix = new float *[n]; 
    for (i=0; i<n; i++) 
        matrix[i] = new float [m]; 
    
    
    
    for (i = 0; i<n; i++) 
        
        for (j = 0; j<m; j++) 
        { 
            cout << "Element " << "["<< i+1 << " , " << j+1 << "]: " ; 
            
            cin >> matrix[i][j]; 
        } 
    
    
    cout << "matrix: " << endl; 
    for (i=0; i<n; i++) 
    { 
        for (j=0; j<m; j++) 
            cout << matrix[i][j] << " "; 
        cout << endl; 
    } 
    cout << endl; 
    
    float tmp, *xx = new float[m]; 
    
    int k; 
    
    for (i=0; i<n; i++) 
    { 
        tmp=matrix[i][i]; 
        for (j=n;j>=i;j--) 
            matrix[i][j]/=tmp; 
        for (j=i+1;j<n;j++) 
        { 
            tmp=matrix[j][i]; 
            for (k=n;k>=i;k--) 
                matrix[j][k]-=tmp*matrix[i][k]; 
        } 
    } 
    
    xx[n-1] = matrix[n-1][n]; 
    
    for (i=n-2; i>=0; i--) 
    { 
        xx[i] = matrix[i][n]; 
        for (j=i+1;j<n;j++) xx[i]-=matrix[i][j]*xx[j]; 
    } 
    
    
    for (i=0; i<n; i++) 
        cout << xx[i] << " "; 
    cout << endl; 
    
    delete[] matrix; 
    
    return 0; 
}
вот то что она выводит:
Veditb 4uslo r9dkiv: 4
Vveditb 4uslo stovpciv: 3
Element [1 , 1]: 9
Element [1 , 2]: 11
Element [1 , 3]: 11
Element [1 , 4]: 12
Element [2 , 1]: 12
Element [2 , 2]: 24
Element [2 , 3]: 2
Element [2 , 4]: 9
Element [3 , 1]: 20
Element [3 , 2]: 4
Element [3 , 3]: 41
Element [3 , 4]: 16
Element [4 , 1]: 7
Element [4 , 2]: 13
Element [4 , 3]: 9
Element [4 , 4]: 3
matrix:
9 11 11 12
12 24 2 9
20 4 41 16
7 13 9 3

0 0 0 -0

Подскажите почему решение сводит до нулей?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
22.03.2016, 12:56     Найти ошибку в реализации метода Гаусса #2
C++
1
2
3
for (j=n;j>=i;j--) 
    matrix[i][j]/=tmp; // при j=n matrix[i][j] несуществует
 for (j=i+1;j<n;j++) // при i=n-1 j будет равна [B]n[/B]
qwer1234
12 / 12 / 3
Регистрация: 30.10.2012
Сообщений: 463
22.03.2016, 13:01  [ТС]     Найти ошибку в реализации метода Гаусса #3
А как исправить?
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
22.03.2016, 13:10     Найти ошибку в реализации метода Гаусса #4
Повнимательнее отнеситесь к индексам.
Возможно ли в принципе решить требуемую задачу,
если матрица не квадратная?
qwer1234
12 / 12 / 3
Регистрация: 30.10.2012
Сообщений: 463
22.03.2016, 13:12  [ТС]     Найти ошибку в реализации метода Гаусса #5
Мне нужно только по квадратной, и я не понимаю как подправить, запутался уже
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
22.03.2016, 14:03     Найти ошибку в реализации метода Гаусса #6
Значит нужно сделать m=n и уменьшить на 1 индексы в указанных местах.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.03.2016, 20:16     Найти ошибку в реализации метода Гаусса
Еще ссылки по теме:

Метода Гаусса без перестановок C++
C++ Реализации работы метода Гаусса
Неясности в реализации метода Адамса C++

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

Или воспользуйтесь поиском по форуму:
qwer1234
12 / 12 / 3
Регистрация: 30.10.2012
Сообщений: 463
28.03.2016, 20:16  [ТС]     Найти ошибку в реализации метода Гаусса #7
zss, я понял где ошибка, на самом деле все очень банально - я забыл про 5-й столбец

Veditb 4uslo r9dkiv: 4
Vveditb 4uslo stovpciv: 4
Element [1 , 1]: 9
Element [1 , 2]: 11
Element [1 , 3]: 11
Element [1 , 4]: 12
Element [1 , 5]: 214
Element [2 , 1]: 12
Element [2 , 2]: 24
Element [2 , 3]: 2
Element [2 , 4]: 9
Element [2 , 5]: 186
Element [3 , 1]: 20
Element [3 , 2]: 4
Element [3 , 3]: 41
Element [3 , 4]: 16
Element [3 , 5]: 470
Element [4 , 1]: 7
Element [4 , 2]: 13
Element [4 , 3]: 9
Element [4 , 4]: 3
Element [4 , 5]: 140
matrix:
9 11 11 12 214
12 24 2 9 186
20 4 41 16 470
7 13 9 3 140

5.99999 2 6 6
Yandex
Объявления
28.03.2016, 20:16     Найти ошибку в реализации метода Гаусса
Ответ Создать тему
Опции темы

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