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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.83
MrGluck
Модератор
Эксперт CЭксперт С++
7211 / 4377 / 638
Регистрация: 29.11.2010
Сообщений: 11,887
#1

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

09.12.2010, 10:02. Просмотров 2434. Ответов 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;
}
Если кто поможет-спасибо. Нет - понимаю. То что я написал наверное хрен прочтешь)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.12.2010, 10:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Решение системы уравнений методом Гауса (C++):

Решение системы уравнений методом Гаусса - C++
Всем доброго времени суток. Нужно написать программу для решения СЛАУ методом Гаусса. #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #define...

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

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

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

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

Решение системы дифференциальных уравнений методом Эйлера - C++
В интернете нашел похожий код, но для 1 уравнения, может кто помочь сделать для 2? Тоесть для системы #include &quot;stdafx.h&quot; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ternsip
660 / 188 / 6
Регистрация: 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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.04.2013, 17:39
Привет! Вот еще темы с ответами:

Решение системы линейных уравнений методом главных элементов - C++
программа на С++ решения системы линейных уравнений методом главных элементов

Решение системы из двух нелинейных уравнений методом Ньютона - C++
Помогите,мне надо создать программу для решения системы из двух нелинейных уравнений методом Ньютона в с++...не могу найти нигде нормальный...

Решение системы линейных алгебраических уравнений методом Гаусса - C++
Решить систему n линейных алгебраических уравнений методом Гаусса. Использовать указатели.

Решение системы линейных уравнений методом простых итераций - C++
Здравствуйте! Нужна вот такая помощь, незнаю как написать такую программу.


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

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

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