Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/14: Рейтинг темы: голосов - 14, средняя оценка - 4.57
MrGluck
Модератор
Эксперт CЭксперт С++
8105 / 4956 / 1436
Регистрация: 29.11.2010
Сообщений: 13,451
1

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

09.12.2010, 10:02. Просмотров 2654. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2010, 10:02
Ответы с готовыми решениями:

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

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

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

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

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

1
Ternsip
664 / 192 / 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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2013, 17:39

Решение системы линейных уравнений матричным методом
Друзья, помогите пожалуйста с кодом. Нужен простой, работающий простенький код на С++ позволяющий...

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

Решение системы уравнений компактным методом исключений
На С++ надо решить систему уравнений компактным методом исключений. Элементы матрицы-...


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

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

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