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

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

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

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

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

Решить систему линейных уравнений методом Гаусса с выбором главного элемента в столбце.
Вот моя программа
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
У меня выводится что-то непонятное. Подскажите пожалуйста где ошибка
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2012, 16:16     Найти решение системы линейных уравнений методом Гаусса с выбором главного элемента в столбце
Посмотрите здесь:

C++ Решение линейных уравнений методом Гаусса (error C2664)
C++ Системы линейных уравнений методом Гаусса
Системы линейных уравнений методом Гаусса C++
C++ Решение системы линейных уравнений методом Гаусса
C++ Решение системы линейных уравнений матричным методом
Решение СЛОУ методом Гаусса с выбором главного элемента по строке C++
Решение систем линейных уравнений методом Гаусса C++
C++ Решение системы линейных алгебраических уравнений методом Гаусса
C++ Решение систем линейных алгебраических уравнений методом Гаусса с выбором главного элемента
Решение линейных уравнений методом Гаусса C++
СЛАУ методом Гаусса с выбором главного элемента в столбце C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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");
}
I_Masha_I
2 / 2 / 0
Регистрация: 14.10.2012
Сообщений: 53
10.11.2012, 16:51  [ТС]     Найти решение системы линейных уравнений методом Гаусса с выбором главного элемента в столбце #3
I.M., Спасибо большое! Вы мне очень помогли!
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");
}
Yandex
Объявления
26.12.2016, 19:57     Найти решение системы линейных уравнений методом Гаусса с выбором главного элемента в столбце
Ответ Создать тему
Опции темы

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