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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
fun
0 / 0 / 0
Регистрация: 01.04.2009
Сообщений: 27
#1

Проверка метода Гаусса - C++

08.03.2011, 15:07. Просмотров 1647. Ответов 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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include<iostream.h>
#include<conio.h>
int Matrix[10][10];
int Vector[10];
int i;
int j;
 
//Enter expanded matrix
int ReadSystem(int n, int a[10][10], int b[10]) 
{
      cout << "A    b"<<"\n";
      for (i=1; i<=n; i++)
        for (j=1; j<=n; j++)
            {   cin >> a[i][j];
                cin >> b[i];
            }
}
 
//Output result 
int WriteX(int n, int x[10])
 {
    for (i=1; i<=n; i++)
     {
       cout << "x"<<i<<" = "<<x[i]<<"\n";       
     }        
 }
 
//Method Gauss
bool Gauss(int n, int a[10][10], int b[10], int x[10])
{  
int k, int l;
   int  q,m,t;
   
     for (k=1; k<n; k++)
     {
       l=0;
       m=0;
       
         for (i=k; i<=n; i++)
           {
             if (abs(a[i][k])>m)
              {
                m=abs(a[i][k]);
                l=i;
                }
                    
/* If all rows from k to n have element in column k which equal 0 
that system has not solutions*/
          
           if (l=0)
            {
              Gauss()=false;
              exit;
             }
             }        
 //Change row 1 with row k
 if (l<>k)
 {
   for (j=1; j<=n; j++)
    {
      t=a[k][j];
      a[k][j]=a[l][j];
      a[l][j]=t;       
    }
    t=b[k];
    b[k]=b[l];
    b[l]=t;
    
 }
 
 //Transform matrix
 for (i=k+1; i<=n; i++)
 {
    q=a[i][k]/a[k][k];
  for (j=1; j<=n; j++)
  {
      if j==k
      { 
         a[i][j]=0;
       else 
         a[i][j]=a[i][j]-q*a[k][j];
         b[i]=b[i]-q*b[k];
              
       }
    }
      
 } //end of for k;
 
 //Calculate colutions
 x[n]=b[n]/a[n][n];
  for (i=n-1;i<n;i--)
    {
      t=0;               
     }
  for (j=1; j<n-i; j++)
      {
        t=t+a[i][i+j]*x[i+j];
        x[i]=(b[i]-t)/a[i][i];     
      }
  Gauss=true;    
 
   }
  }      
 
   
//=========================================================   
int main()
{
    int n; //size of matrix;
    int a[10][10]; //matrix;
    int b[10]; //free vector
    int x[10]; //solutions
{
    cout << "Solution system linear equation.\n";
    cout << "Enter size of matrix <= 10: ";
    while ((n>0)&&(n<=10))
    {
      cout << ">";
      cin >> n; 
      cout << "\n";
      
    }
  cout << "Enter expanded matrix: \n";
  Readsystem (n,a,b);
  cout << "\n";
  
  if Gauss (n, a, b, x)
  {
    cout << "Result by Gauss: ";
    WriteX(n,x);
    
    else cout << "System has not solutions\n";
         
  }
    
 }    
    
    
  getch();
  return 0;  
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2011, 15:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Проверка метода Гаусса (C++):

Метода Гаусса без перестановок - C++
Как решить СЛАУ(она у меня постоянная) методом Гаусса с выбором главного элемента по столбцам без перестановок. Я умею также, только с...

Реализации работы метода Гаусса - C++
Начал писать, писать программу и возникло несколько вопросов. 1) допустим есть матрица 3х3 0 0 2 0 2 4 1 1 0 Мне нужно чтобы...

Найти ошибку в реализации метода Гаусса - C++
Нужно решить матрицу методом гауза вот код: #include &quot;iostream&quot; #include &quot;math.h&quot; #include &quot;stdlib.h&quot; #include...

Решить СЛАУ многопоточным вариантом метода Гаусса - C++
Здравствуйте,прошу помощи по условию моего задания: Решить систему линейных уравнений параллельным вариантом метода Гаусса. Количество...

Метод Гаусса. Не работает проверка - C++
#include &lt;locale&gt; #include &lt;cmath&gt; #include &lt;malloc.h&gt; #include &lt;iostream&gt; using namespace std; Значения х находит верно,...

Для матриц I=2P-E, где Е-единичная матрица,а Р=Р(n,n), проверить св-во I^2=Е.При помощи метода Гаусса решить СЛАУ Ix=y, где вектор состоит из единиц. - C++
Добрый день!Помогите пожалуйста с решением данной задачи: Задание: Необходимо написать и отладить программу в среде Borland C++ 3.1 по...

2
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
08.03.2011, 16:16 #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
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream>
 
void ReadSys(double **A, double *B, size_t dim)
{
    for(size_t i = 0; i < dim; i++)
    {
    for(size_t j = 0; j < dim; j++)
    {
        std::cout << "A[" << i << "][" << j << "] = ";
        std::cin >> A[i][j];
    }
    std::cout << "B[" << i << "] = ";
    std::cin >> B[i];
    }
}
 
void swap(double &a, double &b)
{
    double tmp = a;
    a = b;
    b = tmp;
}
 
void Gauss(double **A, double *B, size_t dim)
{
    for (size_t k = 0; k < dim; ++k)
    {
        if (A[k][k] == 0.0)
        {
            for (size_t i = k + 1; i < dim; ++i)
            {
                if (A[i][k] != 0.0)
                {
                    for (size_t j = 0; j < dim; ++j)
                        swap(A[i][j], A[k][j]);
                    swap(B[i], B[k]);
                    break;
                }
            }
        }
        double t = A[k][k];
        for (size_t j = 0; j < dim; ++j)
            A[k][j] /= t;
        B[k] /= t;
        for (size_t i = k + 1; i < dim; ++i)
        {
            double tmp = A[i][k];
            for (size_t j = 0; j < dim; ++j)
                A[i][j] -= tmp * A[k][j];
            B[i] -= tmp * B[k];
        }
    }
    for (size_t k = dim - 1; k > 0; --k)
    {
        for (size_t i = k - 1; i + 1 > 0; --i)
        {
            double tmp = A[i][k];
            for (size_t j = 0; j < dim; ++j)
                A[i][j] -= tmp * A[k][j];
            B[i] -= tmp * B[k];
        }
    }
}
 
int main()
{
    const size_t N = 10;
    double ** A = new double* [N];
    for(size_t i = 0; i < N; i++)
        A[i] = new double [N];
    double * B = new double [N];
 
    ReadSys(A, B, N);
    Gauss(A, B, N);
 
    for(size_t i = 0; i < N; i++)
        std::cout << "X[" << i << "] = " << B[i] << std::endl;
 
    std::cin.get();
    std::cin.get();
    for (int i = 0; i < N; ++i)
        delete [] A[i];
    delete [] A;
    delete [] B;
    return 0;
}
1
fun
0 / 0 / 0
Регистрация: 01.04.2009
Сообщений: 27
08.03.2011, 21:34  [ТС] #3
Я очень благодарна! Спасибо Вам!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.03.2011, 21:34
Привет! Вот еще темы с ответами:

Программирование метода градиентного спуска - проверка кода на корректность - C++
Здравствуйте! мне необходимо сдать лабораторную работу по методу градиентного спуска. я запрограммировал этот метод поиска минимума...

Передача метода класса в качестве параметра для метода другого класса - C++
Здравствуйте, Передо мной стоит такая задача. Необходимо разработать механизм, который бы мог прервать любую функцию, при этом абсолютна...

Вызов метода из метода - C++
Можно ли вызвать метод из метода. Это программа не работает #include&lt;iostream&gt; using namespace std; class a {private: int b,c,d;...

Вызов метода класса из метода другого класса - C++
Помогите школнегу Имеется несколько классов class Com { protected: unsigned char bufrd, bufwr; unsigned char tx_index,...


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

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

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