Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.81/16: Рейтинг темы: голосов - 16, средняя оценка - 4.81
Форумчанин
Эксперт CЭксперт С++
8157 / 5005 / 1436
Регистрация: 29.11.2010
Сообщений: 13,458
1

Решение системы уравнений методом Гауса

09.12.2010, 10:02. Просмотров 3087. Ответов 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
77
78
79
80
81
82
83
84
#include<iostream>
#include<conio.h>
#include<clocale>
#include<iomanip>
using namespace std;
 
int main(){
    setlocale(LC_ALL,"Russian");
    int N,x,y,qwerty=2,m,n;
    double mas[128][128],max;
    cout<<"Введите m: ";
    cin>>m;
    cout<<"Введите n: ";
    cin>>n;
    cout<<"Введите матрицу построчно\n";    
      
    for (x=1,y=1;y<=n;x++){ 
        cin>> mas[x][y];
        if(x==m){
                 y++;
                 x=0;
        }
    }
    cout<<endl; 
    
    for(x=1,y=1;y<=n;x++){ // ищем максимальный эллемент матрицы
                          if(x==m){
                                   y++;
                                   x=0;
                                   }
                          if(x!=0 && x<m && mas[x+1][y]>=mas[x][y])
                                  max=mas[x+1][y];
                          }
    if(max<=abs(99)&&max>=abs(9)) // чтобы было красиво(setw)
    qwerty=2;
    else if(max>=abs(99)) 
    qwerty=3;
    
    for (x=1,y=1;y<=n;x++){ // выводим матрицу на экран
        cout<<setw(qwerty)<<mas[x][y]<<" ";
        if(x==m){
                 x=0;
                 y++;
                 cout<<endl;
                 }
        }
cout<<endl<<endl;
 
int zz=2; // переводит y
int zzz=1; // переводит х <<<<<<<<<<<<Вот тут косяки начинаются
x=1,y=2;
//while(x<=m-1){   // этот цикл должен переводить х на позицию вправо если есть еще строки или кол-во столбцов не закончилось
            while(y>zz-1 && y<=n) // удаляем из строки первую * n
            {
                      if(mas[zzz][zz]!=0){
                      double umn=mas[zzz][y]/mas[zzz][1];
                      for(x=zzz;x<=m;x++) // удаляем строки
                      mas[x][zz]=mas[x][zz]-mas[x][1]*umn;
                      }                 
                 zz++;
                 y++;
            }
                 if(y==n){ // перводим на новое начало
                          x=1;
                          y=3;
                         }                 
//            x++;
//            zzz++;
//}
 
 
 
for (x=1,y=1;y<=n;x++){ // выводим вторую матрицу на экран
cout<<setw(qwerty)<<mas[x][y]<<" ";
         
        if(x==m){
                 x=0;
                 y++;
                 cout<<endl;
                 }
        }
getch();
return 0;
}
Если кто поможет-спасибо. Нет - понимаю. То что я написал наверное хрен прочтешь)
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2010, 10:02
Ответы с готовыми решениями:

Решение системы уравнений методом итераций
Всем Привет! Метод итерация. У меня ответы не совпадает. помогите пожалуйста где я ошибся...

Решение системы уравнений методом Гаусса
Всем доброго времени суток. Нужно написать программу для решения СЛАУ методом Гаусса. #include...

Решение системы дифференциальных уравнений методом Эйлера
В интернете нашел похожий код, но для 1 уравнения, может кто помочь сделать для 2? Тоесть для...

Решение системы линейных уравнений методом Крамера
Написать программу решения системы линейных уравнений методом Крамера. Количество переменных до 20....

1
667 / 195 / 29
Регистрация: 10.05.2012
Сообщений: 595
29.04.2013, 17:39 2
MrGluck, Если система имеет ровно 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
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <map>
#include <stack>
#include <deque>
#include <set>
#include <string>
#include <limits>
#include <fstream>
 
using namespace std;
 
int main(){
    freopen("input.txt", "rt", stdin);
    freopen("output.txt", "wt", stdout);
    int n;
    cin >> n;
    vector < vector <double> > a(n, vector <double> (n+1, 0));  
    for (int i = 0; i < n; i++){
        for (int j = 0; j <= n; j++){
            cin >> a[i][j];
        }
    }   
    for (int i = 0; i < n; i++){
        int row = i;
        int mx = a[i][i];
        for(int k = i+1; k < n; k++){
            if (abs(a[k][i]) > mx){
                row = k;
                mx = abs(a[k][i]);
            }
        }
        swap(a[row], a[i]);
        for (int j = i+1; j < n; j++){
            double e = a[j][i]/a[i][i];
            for (int k = i; k <= n; k++){
                a[j][k] -= e*a[i][k];
            }
        }
    }
    vector <double> ans(n);
    for (int i = n-1; i >= 0; i--){
        double sum = a[i][n];
        for (int j = i; j < n; j++){
            sum -= a[i][j]*ans[j];
        }
        ans[i] = sum/a[i][i];
    }
    for (int i = 0; i < n; i++){
        printf("%.20lf ", ans[i]);
    }
    return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.04.2013, 17:39

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Решение системы нелинейных уравнений методом ньютона
Доброго времени суток.В общем, нужно решить систему нелинейных уравнений методом ньютона: sin(x -...

Решение системы линейных уравнений методом Гаусса
помогите найти ошибку, выводит результат, но не точный. Например в системе 10 9 19 9 8 17...

Решение системы нелинейных уравнений методом Ньютона (С/С++)
Здравствуйте! Помогите пожалуйста написать программу :cry: У меня есть система из 2х уравнений...

Решение системы линейных уравнений методом Гаусса
необходимо решить данную задачу в visual studio c++, если можно с комментариями, в консольном...


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

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

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