29 / 29 / 2
Регистрация: 17.12.2012
Сообщений: 493
1

Решение СЛАУ методом Гаусса

04.02.2014, 14:12. Показов 93585. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет))) Друзья, сколько я уже лазию по инету и по этому форуму, я никак не могу найти правильно работающей программки. Может кто нибудь поможет в реализации, программа должна работать в консольном приложении Visual Studio 2008.
А задача такая:
Написать программу, которая решает систему линейных уравнений методом Гаусса, а также вычисляет определитель матрицы этим же методом.
То есть, пользователь должен вводить коэффициенты при x1, x2, x3 и y1 и так далее (пусть будет система из 3-х уравнений). И затем программа должна выдавать значения иксов и значение определителя.
Буду очень признателен, если кто-нибудь поможет)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.02.2014, 14:12
Ответы с готовыми решениями:

Решение СЛАУ методом Гаусса
помогите разобраться!!ВЫдает 85 ошибок!!!! #include <stdio.h> #include <conio.h> #include...

Решение СЛАУ методом Гаусса
В институте задали написать программу решения СЛАУ методом Гаусса, но я абсолютный чайник (знаю,...

Решение СЛАУ методом Гаусса
У меня программа для решения слау методом Гаусса с выбором главного элемента по столбцам. Что-то...

Реализовать решение СЛАУ методом Гаусса
Не могу разобраться в чём проблема. Пытаюсь реализовать метод гаусса, вроде бы всё правильно, но...

17
2442 / 1840 / 406
Регистрация: 15.12.2013
Сообщений: 8,233
04.02.2014, 14:15 2
Что уже сделали?
0
Заблокирован
04.02.2014, 14:15 3
Цитата Сообщение от Alexandr1966 Посмотреть сообщение
Друзья, сколько я уже лазию по инету и по этому форуму, я никак не могу найти правильно работающей программки
1. Покажите код программы, который вы нашли.
2. Дайте тестовый пример, который показывает, что реализация неправильная.
0
29 / 29 / 2
Регистрация: 17.12.2012
Сообщений: 493
04.02.2014, 14:28  [ТС] 4
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
#include "stdafx.h"
#include "iostream"
#include "math.h"
#include "stdlib.h"
#include "locale.h"
#include "conio.h"
using namespace std;
 
int main()
{
   int i, j, n, m;
   setlocale(LC_ALL, "rus");
//создаем массив
   cout << "введи число уравнений: ";
         cin >> n;
         cout << "введи число неизвестных: ";
         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 << "Элемент " << "[" << 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[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;
 getch();
   return 0;
}
вот например, 46 строка ругается

Добавлено через 3 минуты
Методом Гаусса решить систему n линейных алгебраических уравнений
вот еще ссылка
1
Заблокирован
04.02.2014, 14:33 5
Цитата Сообщение от Alexandr1966 Посмотреть сообщение
вот например, 46 строка ругается
C++
1
float  tmp, *xx = new float[m];
Добавлено через 1 минуту
Цитата Сообщение от Alexandr1966 Посмотреть сообщение
вот еще ссылка
послушайте, ссылок можно сколько угодно накидать. Вместе с неправильно работающим кодом оставляйте тестовый пример, который показывает, что реализация неправильная..

Добавлено через 55 секунд
По вашему коду:
Код
введи число уравнений: 2
введи число неизвестных: 2
Элемент [1 , 1]: 1
Элемент [1 , 2]: 2
Элемент [1 , 3]: 3
Элемент [2 , 1]: 4
Элемент [2 , 2]: 5
Элемент [2 , 3]: 6
matrix:
1 2 3
4 5 6

-1 2
Для продолжения нажмите любую клавишу . . .
1
29 / 29 / 2
Регистрация: 17.12.2012
Сообщений: 493
04.02.2014, 14:51  [ТС] 6
Спасибо большое за решение))
а как выводить на экран значение определителя матрицы????
вот допустим, на вашем примере матрица:
1 2
4 5
Определитель равен: 1*5-4*2 = -3
0
Заблокирован
04.02.2014, 15:01 7
Alexandr1966,
https://www.cyberforum.ru/post2450455.html
вам нужен 2.6. (3 способ)
0
29 / 29 / 2
Регистрация: 17.12.2012
Сообщений: 493
04.02.2014, 15:06  [ТС] 8
да, мне нужен этот способ, а как его программно реализовать, как добавить код в этой программе?
0
Заблокирован
04.02.2014, 15:21 9
Alexandr1966, покажите как вы это понимаете(реализовываете)
0
29 / 29 / 2
Регистрация: 17.12.2012
Сообщений: 493
04.02.2014, 15:27  [ТС] 10
я вот именно не знаю, как это программно реализовать, так то на бумаге посчитать я конечно же смогу
0
Заблокирован
04.02.2014, 15:35 11
Alexandr1966, а с чем конкретно сложности? вы ведь даже не пробуете сами выполнить задачу. Опишите словами, как вы понимаете общую формулу нахождения определителя.
0
2 / 2 / 1
Регистрация: 13.09.2017
Сообщений: 20
27.09.2017, 01:08 12
Уважаемые программисты,прошу не бить больно новичка,я не программист,а мастер по ремонту бытовой техники,изучать си ++ начал только недавно.Набил на клавиатуре нечто похожее на решение системы линейных уравнений методом Гаусса,получилось слишком примитивно и коряво,но работает.Из-за примитивности программы комменты излишни

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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
#include <iostream>
using namespace std;
 
int main(int argc, char* argv[])
{
    
int n,m;
cout << "Vvedite razmer matrizi n: ";
cin >> n;
m=n+1;
 
float array1[n][m];
float array2[n][m];
float y[n];
float a,b;
int i,j,k,l;
 
for (i = 1; i <= n; i++)  
      {
        for (j = 1; j <= m; j++)
           {    
              cout << "array[" << i << "," << j << "]=" ;
              cin >> array1[i][j];
              array2[i][j]=array1[i][j];
            }
       }
 
 
for (k = 1; k < n; k++)  
  {
             while (array1[k][k]==0)
          {
                 l=k;
                    do
                       {
                         l=k+1;  
                         if (l>n) goto end;
                       }  
                    while (array1[l][k]==0);
         
            for (j = k; j <= m; j++)
               {
                     b = array1[k][j];
                     array1[k][j]=array1[l][j];
                     array1[l][j]= b;
                }     
            }       
                     
     a=array1[k][k];
          for (i = k+1; i <= n; i++)
            {  
               b=array1[i][k]/a;
                  for (j = k; j <= m; j++)
                    {
                       array1[i][j]= array1[i][j] - (b*array1[k][j]);
                    }
            }
  }       
       
   for (j = n; j >= 1; j--)
     {   
        if (array1[j][j]==0) goto end;
        a=array1[j][m] / array1[j][j];  
        b=array1[j][j] / array1[j][j];
           for (i = j-1; i >= 1; i--)
             {
                array1[i][m]= array1[i][m]-(array1[i][j]*a);
                array1[i][j]= array1[i][j]-(array1[i][j]*b);
             }
      }
// cout << "test" << endl;
//for (i = 1; i <= n; i++)  
//{
//for (j = 1; j <= m; j++)
//{    
//cout << "array[" << i << "," << j << "]=" << array1[i][j]<< endl;
 
//}
//}      
//cout << "reshenie" << endl; 
 
     for (i = 1; i <= n; i++)
     {  
        
      array1[i][m]=array1[i][m]/array1[i][i];
      array1[i][i]=array1[i][i]/array1[i][i];
      
     }
     
     cout << "reshenie" << endl;
     
     for (i = 1; i <= n; i++)  
     {
     cout << "X[" << i << "]="<< array1[i][m]<< endl;
     }
     
     cout << "test" << endl;
     
     for (i = 1; i <= n; i++)
       {  
          y[i]=0;
       
               for (j = 1; j <= n; j++)
               {
                 y[i]=y[i]+(array2[i][j]*array1[j][m]);
                  
                }
       }
     
     for (i = 1; i <= n; i++)  
     {
     cout << "test[" << i << "]="<< array2[i][m]-y[i] << endl;
     }
 
  end:  system("pause");
        return 0;
}
0
2 / 2 / 1
Регистрация: 13.09.2017
Сообщений: 20
29.09.2017, 13:27 13
доработал предыдущую программу-добавил модуль вычисления определителя и небольшие комментарии

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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include <iostream>
using namespace std;
 
int main(int argc, char* argv[])
{
// ввод элементов матрицы n*n+1    
int n,m; 
cout << "Vvedite razmer matrizi n: ";
cin >> n;
m=n+1;
 
float array1[n][m];
float array2[n][m];
float y[n];
float a,b;
int i,j,k,l;
 
for (i = 1; i <= n; i++)  
      {
        for (j = 1; j <= m; j++)
           {    
              cout << "array[" << i << "," << j << "]=" ;
              cin >> array1[i][j];
              array2[i][j]=array1[i][j]; //копирование для последующей проверки
            }
       }
 
// прямой ход
for (k = 1; k < n; k++)  
  {
// поиск и перестановка ненулевых элементов            
             while (array1[k][k]==0)
          {
                 l=k;
                    do
                       {
                         l=k+1;  
                         if (l>n) goto end; //выход если в столбце все нули
                       }  
                    while (array1[l][k]==0);
         
            for (j = k; j <= m; j++)
               {
                     b = array1[k][j];
                     array1[k][j]=array1[l][j];
                     array1[l][j]= b;
                }     
            }       
// приведение к "треугольному" виду                     
     a=array1[k][k];
          for (i = k+1; i <= n; i++)
            {  
               b=array1[i][k]/a;
                  for (j = k; j <= m; j++)
                    {
                       array1[i][j]= array1[i][j] - (b*array1[k][j]);
                    }
            }
  }       
      
// обратный ход      
       
   for (j = n; j >= 1; j--)
     {   
        if (array1[j][j]==0) goto end; // выход если система не имеет решения
        a=array1[j][m] / array1[j][j];  
        b=array1[j][j] / array1[j][j];
           for (i = j-1; i >= 1; i--)
             {
                array1[i][m]= array1[i][m]-(array1[i][j]*a);
                array1[i][j]= array1[i][j]-(array1[i][j]*b);
             }
      }
// cout << "test" << endl;
//for (i = 1; i <= n; i++)  
//{
//for (j = 1; j <= m; j++)
//{    
//cout << "array[" << i << "," << j << "]=" << array1[i][j]<< endl;
 
//}
//}      
//cout << "reshenie" << endl; 
 
// вычисление определителя основной матрицы
 
     a=1;
     for (i = 1; i <= n; i++)
     {  
      a=a*array1[i][i]; 
     }
     
     cout << "det=" << a << endl;
 
// нормировка
 
     for (i = 1; i <= n; i++)
     {  
        
      array1[i][m]=array1[i][m]/array1[i][i];
      array1[i][i]=array1[i][i]/array1[i][i];
      
     }
     
     // вывод решения
     
     cout << "reshenie" << endl;
     
     for (i = 1; i <= n; i++)  
     {
     cout << "X[" << i << "]="<< array1[i][m]<< endl;
     }
     
     cout << "test" << endl;
        
    // проверка правильности вычисления подстановкой решений в исходную систему    
        
     for (i = 1; i <= n; i++)
       {  
          y[i]=0;
       
               for (j = 1; j <= n; j++)
               {
                 y[i]=y[i]+(array2[i][j]*array1[j][m]);
                  
                }
       }
     
     //если все нули,то решение правильное
     
     for (i = 1; i <= n; i++)  
     {
     cout << "test[" << i << "]="<< array2[i][m]-y[i] << endl;
     }
 
// конец
 
  end:  system("pause");
        return 0;
}
0
2 / 2 / 1
Регистрация: 13.09.2017
Сообщений: 20
07.10.2017, 16:19 14
Нахождение обратной матрицы методом Гаусса

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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
#include <iostream> 
using namespace std; 
 
int main(int argc, char* argv[]) 
{ 
// vvod razmernosti n 
int n,m; 
cout << "Vvedite razmer matrizi n: ";
cin >> n; 
m=n+n; 
 
float array1[n][m]; 
float array2[n][n]; 
 
float a,b; 
int i,j,k,l; 
 
// vvod elementov matrizi n*n
for (i = 1; i <= n; i++)  
      {
        for (j = 1; j <= n; j++)
           {    
             cout << "array[" << i << "," << j << "]=" ;
              cin >> array1[i][j];
              
              array2[i][j]=array1[i][j]; 
              
           }
       }
  
 
//dopolnenie k osnovnoi matrize
for (i = 1; i <= n; i++) 
  { 
       for (j = 1; j <= n; j++) 
          { 
             if (j==i) 
               {
                array1[i][j+n]=1;
               }
                 else
                    {
                         array1[i][j+n]=0;    
                    } 
          }
  }
 
 
// pruamoi hod
for (k = 1; k < n; k++) 
    { 
//poisk i perestanovka nenulevih elementov
        while (array1[k][k]==0) 
            { 
               l=k; 
               do 
               { 
               l=k+1; 
               if (l>n) goto end; //vihod esli v stolbze vse nuli
               } 
               while (array1[l][k]==0); 
 
                    for (j = k; j <= m; j++) 
                       { 
                         b = array1[k][j]; 
                         array1[k][j]=array1[l][j]; 
                         array1[l][j]= b; 
                       } 
            } 
            
// privedenie k treugolnomu vidu
      a=array1[k][k]; 
      for (i = k+1; i <= n; i++) 
         { 
           b=array1[i][k]/a; 
              for (j = k; j <= m; j++) 
                 { 
                   array1[i][j]= array1[i][j] - (b*array1[k][j]); 
                 } 
         } 
    } 
 
// obratniy hod
 
    for (k = n; k >= 1; k--) 
       { 
          if (array1[k][k]==0) goto end; // vihod esli sistema he imeet reshenia
                b=array1[k][k] / array1[k][k]; 
                   for (i = k-1; i >= 1; i--) 
                          { 
                             a=array1[i][k] / array1[k][k];
                                 for (j = n+1; j <= m; j++)   
                                   {
                                   array1[i][j]= array1[i][j]-(array1[k][j]*a); 
                                   }
                           array1[i][k]= array1[i][k]-(array1[i][k]*b);
                          } 
       } 
 
 
 
// vichislenie opredelitelua osnovnoy matrizi
 
a=1; 
     for (i = 1; i <= n; i++) 
           { 
              a=a*array1[i][i]; 
           } 
 
cout << "det=" << a << endl; 
 
 
// normirovka
 
for (i = 1; i <= n; i++) 
    { 
        for (j = n+1; j <= m; j++)
          {
            array1[i][j]=array1[i][j]/array1[i][i]; 
          }
          array1[i][i]=array1[i][i]/array1[i][i]; 
    } 
 
 
// peremeshenie
 
for (i = 1; i <= n; i++) 
       { 
         for (j = 1; j <= n; j++) 
         {
          a=array1[i][j];
          array1[i][j]=array1[i][j+n];  
          array1[i][j+n]=a; 
         }
       }
 
 
 
// vivod reshenia
 
cout << "reshenie" << endl;
 
   for (i = 1; i <= n; i++) 
     { 
        for (j = 1; j <= n; j++) 
           { 
             cout << "array*[" << i << "," << j << "]=" << array1[i][j] << endl; 
           } 
     } 
 
 
cout << "test" << endl; 
 
for (i = 1; i <= n; i++) 
     { 
        for (j = 1; j <= n; j++) 
               { 
                a=0;    
                  for (k = 1; k <= n; k++) 
                  {
                     a=a+array2[i][k]*array1[k][j];
                  }    
                  
                  b=array1[i][j+n]-a;  
                  cout << "test[" << i << "," << j << "]=" << b << endl;
                }
     }                      
                      
 
 
//cout << "test" << endl; 
 
//for (i = 1; i <= n; i++) 
//{ 
//for (j = 1; j <= n; j++) 
//{ 
//cout << "array1[" << i << "," << j << "]=" << array1[i][j] << endl; 
//} 
//} 
 
// konez
 
end: system("pause"); 
return 0; 
}
0
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
08.10.2017, 07:35 15
alexey72033, и как, если не секрет, вот эта часть кода работает? (И выделяйте код тэгами)
C++
1
2
3
4
5
6
7
8
9
10
11
// ввод элементов матрицы n*n+1 
int n,m; 
cout << "Vvedite razmer matrizi n: ";
cin >> n;
m=n+1;
 
float array1[n][m];
float array2[n][m];
float y[n];
float a,b;
int i,j,k,l;
0
2 / 2 / 1
Регистрация: 13.09.2017
Сообщений: 20
08.10.2017, 17:35 16
этот код работает с компиллятором Dev-C++ 4.9.9.2 (скачал отсюда http://www.bloodshed.net ) ,если честно-компиллятор очень глючный и проблемный,может что приличнее посоветуете?
0
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
08.10.2017, 17:56 17
Бесплатные среды (IDE) для программирования на С/С++
Сам на Microsoft Visual Studio 2015 и не парюсь. А массивы объявите динамическими или в vector. О float забудьте, (используйте double) как и о конструкциях типа goto end.
1
2 / 2 / 1
Регистрация: 13.09.2017
Сообщений: 20
08.10.2017, 20:51 18
Согласен,с Dev-C++ придётся расставаться,пытался объявить переменные как double вместо float ,компилляция прошла,но на экзешник виндоуз начал ругаться,думаю это связано с неправильным использованием оперативной памяти компиллятором. Обнаружил ещё один глюк Dev-C++ 4.9.9.2 : если используешь в программе больше двух массивов,виндоуз тоже начинает ругаться на скомпилированный экзешник,поэтому пришлось использовать свободные места в уже созданных массивах.
Это последняя программа,написанная под этим компиллятором,она решает систему линейных уравнений,используя обратную матрицу,вычисленную методом Гаусса.

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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
#include <iostream> 
using namespace std; 
 
int main(int argc, char* argv[]) 
{ 
// vvod razmernosti n 
int n,m,w; 
cout << "Vvedite razmer matrizi n: ";
cin >> n; 
m=n+n; 
w=n+1;
 
float array1[n][m]; 
float array2[n][w]; 
 
float a,b; 
int i,j,k,l; 
 
// vvod elementov matrizi n*n
for (i = 1; i <= n; i++)  
      {
        for (j = 1; j <= n+1; j++)
           {    
             cout << "array[" << i << "," << j << "]=" ;
             cin >> array1[i][j];
             array2[i][j]=array1[i][j];
           }
       }
       
//dopolnenie k osnovnoi matrize
for (i = 1; i <= n; i++) 
  { 
       for (j = 1; j <= n; j++) 
          { 
             if (j==i) 
               {
                array1[i][j+n]=1;
               }
                 else
                    {
                         array1[i][j+n]=0;    
                    } 
          }
  }
 
 
// pruamoi hod
for (k = 1; k < n; k++) 
    { 
//poisk i perestanovka nenulevih elementov
        while (array1[k][k]==0) 
            { 
               l=k; 
               do 
               { 
               l=k+1; 
               if (l>n) goto end; //vihod esli v stolbze vse nuli
               } 
               while (array1[l][k]==0); 
 
                    for (j = k; j <= m; j++) 
                       { 
                         b = array1[k][j]; 
                         array1[k][j]=array1[l][j]; 
                         array1[l][j]= b; 
                       } 
            } 
            
// privedenie k treugolnomu vidu
      a=array1[k][k]; 
      for (i = k+1; i <= n; i++) 
         { 
           b=array1[i][k]/a; 
              for (j = k; j <= m; j++) 
                 { 
                   array1[i][j]= array1[i][j] - (b*array1[k][j]); 
                 } 
         } 
    } 
 
// obratniy hod
 
    for (k = n; k >= 1; k--) 
       { 
          if (array1[k][k]==0) goto end; // vihod esli sistema he imeet reshenia
                b=array1[k][k] / array1[k][k]; 
                   for (i = k-1; i >= 1; i--) 
                          { 
                             a=array1[i][k] / array1[k][k];
                                 for (j = n+1; j <= m; j++)   
                                   {
                                   array1[i][j]= array1[i][j]-(array1[k][j]*a); 
                                   }
                           array1[i][k]= array1[i][k]-(array1[i][k]*b);
                          } 
       } 
 
 
 
// vichislenie opredelitelua osnovnoy matrizi
 
a=1; 
     for (i = 1; i <= n; i++) 
           { 
              a=a*array1[i][i]; 
           } 
 
cout << "det=" << a << endl; 
 
 
// normirovka
 
for (i = 1; i <= n; i++) 
    { 
        for (j = n+1; j <= m; j++)
          {
            array1[i][j]=array1[i][j]/array1[i][i]; 
          }
          array1[i][i]=array1[i][i]/array1[i][i]; 
    } 
 
 
 
// peremeshenie
 
for (i = 1; i <= n; i++) 
       { 
         for (j = 1; j <= n; j++) 
         {
          a=array1[i][j];
          array1[i][j]=array1[i][j+n];  
          array1[i][j+n]=a; 
         }
       }
 
// umnozenie
 
for (i = 1; i <= n; i++)
   { 
      a=0; 
      for (j = 1; j <= n; j++) 
         {
          a=a+array1[i][j]*array2[j][n+1];
         }
       array1[i][n+1]=a;
   }         
            
 
// vivod reshenia
 
cout << "reshenie" << endl;
 
   for (i = 1; i <= n; i++) 
     { 
       cout << "x[" << i << "]=" <<  array1[i][n+1] << endl; 
     } 
 
//proverka-esli vse nuli to pravilno
cout << "test" << endl; 
 
for (i = 1; i <= n; i++) 
     { 
       a=0; 
          for (j = 1; j <= n; j++) 
               { 
                 a=a+array2[i][j]*array1[j][n+1];
               }
              b=a-array2[i][n+1];
            cout << "test[" << i << "]=" << b << endl;    
    }                      
          
        
//cout << "test" << endl; 
 
//for (i = 1; i <= n; i++) 
//{ 
//for (j = 1; j <= n; j++) 
//{ 
//cout << "array1[" << i << "," << j << "]=" << array1[i][j] << endl; 
//} 
//} 
 
// konez
 
end: system("pause"); 
return 0; 
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.10.2017, 20:51
Помогаю со студенческими работами здесь

Решение СЛАУ методом Гаусса, индексы
Собственно программа решает слау методом гаусса. Как найти индексы главного элемента на второй...

Решение СЛАУ методом Гаусса с выбором ведущего элемента
1) Написать вычислительную программу на языке программирования С++ для решения СЛАУ методом Гаусса...

Найти решение СЛАУ методом Гаусса (без перестановки строк)
Итак, требуется найти решение СЛАУ методом Гаусса (без перестановки строк). Проще говоря, есть...

Почему программа прерывается с ошибкой? Реализовывал решение СЛАУ методом Гаусса
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std; int main() { int n=0; int...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

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