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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 104, средняя оценка - 4.93
I_Masha_I
2 / 2 / 0
Регистрация: 14.10.2012
Сообщений: 53
#1

Найти решение системы линейных уравнений методом Гаусса с выбором главного элемента в столбце - C++

10.11.2012, 16:16. Просмотров 15460. Ответов 6
Метки нет (Все метки)

Решить систему линейных уравнений методом Гаусса с выбором главного элемента в столбце.
Вот моя программа
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
#include "stdafx.h"
#include <locale>
#include <iostream>
using namespace std;
const int n=4;
int i, j, m, k;
double aa, bb;
 
double a[n][n+1]={{  3,   4, -9,   5, -14},   //матрица коэффициентов, где последний столбец - правая часть системы
               {-15, -12,  50, -16, 44}, 
               {-27, -36,  73,   8, 142},
               {  9,  12, -10, -16, -76}};
 
void main()
{
    setlocale(LC_ALL, "Russian");
    double* x; 
    x = (double *)malloc(n* sizeof(double));
 
    for (k = 0; k<n; k++) //Поиск максимального элемента в первом столбце
    {
        aa = abs(a[k][k]);
        i = k;
        for(m = k+1; m<n; m++)
            if(abs(a[m][k])>aa)
            {
                i = m;
                aa = abs(a[m][k]);
            }
 
            if (aa == 0)   //проверка на нулевой элемент
            {
                cout<<"Система не имеет решений"<<endl;
            }
 
        if (i != k)  //  перестановка i-ой строки, содержащей главный элемент k-ой строки
        {
         for (j=k; j < n+1; j++)
         {
            bb = a[k][j];
            a[k][j] = a[i][j];
            a[i][j] = bb;
         }
        }
        aa = a[k][k];//преобразование k-ой строки (Вычисление масштабирующих множителей)
        a[k][k] = 1;   
        for (j=k+1;j<n;j++) 
            a[k][j] = a[k][j]/aa;
        for (i = k+1; i < n; i++)//преобразование строк с помощью k-ой строки
        {
         bb = a[i][k];
         a[i][k] = 0;
         if (bb!=0)
            for (j=k+1; j< n+1; j++)
              a[i][j]=a[i][j]-bb*a[k][j];
        }
    }
 
    for (i=n; i>0; i--)   //Нахождение решений СЛАУ
    {
      x[i] = 0;
      aa = a[i][n+1];
      for (j = n; j>i; j--) 
         aa = aa-a[i][j]*x[j];
      x[i] = aa;
    }
 
   cout<<"Решение системы:"<<endl;  //вывод решений
   for (i = 1; i< n+1; i++)
   {
      cout<<"x["<<i<<"]="<<x[i];
      cout<<endl;
   }
   system("PAUSE");
}
на выходе должно получиться: х1 = -8; х2 = -2; х3 = -2; х4 = 0
У меня выводится что-то непонятное. Подскажите пожалуйста где ошибка
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2012, 16:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти решение системы линейных уравнений методом Гаусса с выбором главного элемента в столбце (C++):

Решение систем линейных алгебраических уравнений методом Гаусса с выбором главного элемента - C++
Помогите пожалуйста найти решение системы линейных уравнений с матричными элементами. Условия задания матрицы в файле.

СЛАУ методом Гаусса с выбором главного элемента в столбце - C++
СЛАУ методом Гаусса с выбором главного элемента по столбцу.Помогите пожалуйста с кодом программы,ошибки выдает #include &lt;locale&gt; ...

Решение СЛОУ методом Гаусса с выбором главного элемента по строке - C++
Задание:Решение СЛОУ методом Гаусса с выбором главного элемента по строке.Для тестирования решить систему. Запускается,но вывод...

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

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

Системы линейных уравнений методом Гаусса - C++
День(ночь, утро, вечер) добрый(-ая, -ое) вопрос про метод Гаусса, как его реализовать на С++??? что-то совсем запутался... вот что...

6
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
10.11.2012, 16:36 #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
#include <locale>
#include <iostream>
using namespace std;
const int n=4;
int i, j, m, k;
double aa, bb;
 
double a[n][n+1]={{  3,   4, -9,   5, -14},   //матрица коэффициентов, где последний столбец - правая часть системы
{-15, -12,  50, -16, 44}, 
{-27, -36,  73,   8, 142},
{  9,  12, -10, -16, -76}};
 
void main()
{
    setlocale(LC_ALL, "Russian");
    double* x; 
    x = (double *)malloc(n* sizeof(double));
 
    for (k = 0; k<n; k++) //Поиск максимального элемента в первом столбце
    {
        aa = abs(a[k][k]);
        i = k;
        for(m = k+1; m<n; m++)
            if(abs(a[m][k])>aa)
            {
                i = m;
                aa = abs(a[m][k]);
            }
 
            if (aa == 0)   //проверка на нулевой элемент
            {
                cout<<"Система не имеет решений"<<endl;
            }
 
            if (i != k)  //  перестановка i-ой строки, содержащей главный элемент k-ой строки
            {
                for (j=k; j < n+1; j++)
                {
                    bb = a[k][j];
                    a[k][j] = a[i][j];
                    a[i][j] = bb;
                }
            }
            aa = a[k][k];//преобразование k-ой строки (Вычисление масштабирующих множителей)
            a[k][k] = 1;   
            for (j=k+1;j<n+1;j++) 
                a[k][j] = a[k][j]/aa;
            for (i = k+1; i < n; i++)//преобразование строк с помощью k-ой строки
            {
                bb = a[i][k];
                a[i][k] = 0;
                if (bb!=0)
                    for (j=k+1; j< n+1; j++)
                        a[i][j]=a[i][j]-bb*a[k][j];
            }
    }
 
    for (i=n-1; i>=0; i--)   //Нахождение решений СЛАУ
    {
        x[i] = 0;
        aa = a[i][n];
        for (j = n; j>i; j--) 
            aa = aa-a[i][j]*x[j];
        x[i] = aa;
    }
 
    cout<<"Решение системы:"<<endl;  //вывод решений
    for (i = 0; i< n; i++)
    {
        cout<<"x["<<i+1<<"]="<<x[i];
        cout<<endl;
    }
    system("PAUSE");
}
1
I_Masha_I
2 / 2 / 0
Регистрация: 14.10.2012
Сообщений: 53
10.11.2012, 16:51  [ТС] #3
I.M., Спасибо большое! Вы мне очень помогли!
0
BEKH
0 / 0 / 0
Регистрация: 26.12.2016
Сообщений: 5
26.12.2016, 19:57 #4
I.M.,
Привет,мог бы ты мне помочь доделать код,который ты раньше делал,он выдает ошибки.

Решить систему линейных уравнений методом Гаусса с выбором главного элемента в столбце:
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
#include <locale>
#include <iostream>
using namespace std;
const int n=4;
int i, j, m, k;
double aa, bb;
 
double a[n][n+1]={{  3,   4, -9,   5, -14},   //матрица коэффициентов, где последний столбец - правая часть системы
{-15, -12,  50, -16, 44}, 
{-27, -36,  73,   8, 142},
{  9,  12, -10, -16, -76}};
 
void main()
{
    setlocale(LC_ALL, "Russian");
    double* x; 
    x = (double *)malloc(n* sizeof(double));
 
    for (k = 0; k<n; k++) //Поиск максимального элемента в первом столбце
    {
        aa = abs(a[k][k]);
        i = k;
        for(m = k+1; m<n; m++)
            if(abs(a[m][k])>aa)
            {
                i = m;
                aa = abs(a[m][k]);
            }
 
            if (aa == 0)   //проверка на нулевой элемент
            {
                cout<<"Система не имеет решений"<<endl;
            }
 
            if (i != k)  //  перестановка i-ой строки, содержащей главный элемент k-ой строки
            {
                for (j=k; j < n+1; j++)
                {
                    bb = a[k][j];
                    a[k][j] = a[i][j];
                    a[i][j] = bb;
                }
            }
            aa = a[k][k];//преобразование k-ой строки (Вычисление масштабирующих множителей)
            a[k][k] = 1;   
            for (j=k+1;j<n+1;j++) 
                a[k][j] = a[k][j]/aa;
            for (i = k+1; i < n; i++)//преобразование строк с помощью k-ой строки
            {
                bb = a[i][k];
                a[i][k] = 0;
                if (bb!=0)
                    for (j=k+1; j< n+1; j++)
                        a[i][j]=a[i][j]-bb*a[k][j];
            }
    }
 
    for (i=n-1; i>=0; i--)   //Нахождение решений СЛАУ
    {
        x[i] = 0;
        aa = a[i][n];
        for (j = n; j>i; j--) 
            aa = aa-a[i][j]*x[j];
        x[i] = aa;
    }
 
    cout<<"Решение системы:"<<endl;  //вывод решений
    for (i = 0; i< n; i++)
    {
        cout<<"x["<<i+1<<"]="<<x[i];
        cout<<endl;
    }
    system("PAUSE");
}
0
Penattt
0 / 0 / 0
Регистрация: 01.06.2017
Сообщений: 11
03.06.2017, 01:05 #5
I.M., I.M., Простите за глупый вопрос, как скопировать ее себе? у меня не компилируется после void main() ошибка
0
Antikl
169 / 164 / 49
Регистрация: 15.07.2015
Сообщений: 898
Завершенные тесты: 5
03.06.2017, 07:28 #6
Цитата Сообщение от Penattt Посмотреть сообщение
void main() ошибка
так должно же быть int main(){return 0;}
0
Penattt
0 / 0 / 0
Регистрация: 01.06.2017
Сообщений: 11
03.06.2017, 12:20 #7
Все равно не получилось, мне вместо
C++
1
void main()
поставить
C++
1
int main()
а в конце return 0;
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.06.2017, 12:20
Привет! Вот еще темы с ответами:

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

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

Решение линейных уравнений методом Гаусса - C++
Доброе утро! Вы могли бы помочь мне решить вариант №29

Решение систем линейных уравнений методом Гаусса - C++
Такая вот проблема вышла, не работает один случай и никак не могу найти - в чем ошибка. Возьмем к примеру такое уравнение: 0 0 0 1 2 ...


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

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
03.06.2017, 12:20
Ответ Создать тему
Опции темы

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