Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2019, 17:02   #1
Dr Blue
 
Регистрация: 03.11.2019
Сообщений: 4
Вопрос СЛАУ методом Гаусса

Написал комменты к имеющейся проге, и хочу понять, верно ли я понял её.
В общем и целом ход понятен, а построчно, или по блокам боюсь, что не так дошло.

Код:
#include <iostream>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <iomanip>
#define N    3
#define N1    N+2
using namespace std;
double matrix[N][N1]={{2.18, 2.44, 2.49, 4.34}, 
                      {2.17, 2.31, 2.49, 3.91},
                      {3.15, 0.22, 3.17, 5.27}};
 
double epsilon=0.001; // точность 
 
void ShowMatrix() //объявление матрицы
{
cout << "SLAU:" << endl;
  int i,j;
    for (i=0 ;i<N; i++) //присвоение i значения 0; проверка того, что i<n; увеличение i на 1;
      {
        for (j=0; j<N; j++) //присвоение j значения 0; проверка того, что j<n; увеличение j на 1;
          cout<<matrix[i][j]<<"   "; /* вывод матрицы, "   " - отступы; 
                                          матрикс используется в buf для получения матрицы В */
        cout<<endl;
      }
}
 
void matrix_copy(double matrA[N][N1], double matrB[N][N1]) 
{
    for(int i = 0; i < N; i++){
        for(int j = 0; j < N1; j++){
            matrB[i][j] = matrA[i][j];  //копирование матрицы для дальнейшего зануления элементов 
                                               
        }
    }
    return;
}
 
void checking(double matr[N][N1], double x[N]) //проверка
{
    double res[N] = {0.0};
    for(int i = 0; i < N ; i++)
        for(int j = 0; j < N; j++){
            res[i]+=matr[i][j]*x[j]; //к результату прибавляются последовательно значения 1_1, 1_2, 1_3 умноженные на коэффициент
    }
    for(int i = 0; i < N; i++)
        if (  abs(res[i] - matr[i][N]) < epsilon )
        {
            cout << "\n res[i] - b[i] = " << res[i] - matr[i][N]<< endl; //подставляем х в исходную матрицу и вычитаем исходный ответ
            cout << endl << endl;
            //printf("res[i] - b[i]= %f\n\n",res[i] - matr[i][N]);
 
        } else cout << "vse plokho" << endl;
}
 
 
 
int main()
{
  double buf, xx[N1];
  short int i, j, k;
 
  double is_matr[N][N1];
  matrix_copy(matrix, is_matr);
 
  ShowMatrix();
 
//metod gaussa(pr.hod)
  for (i=0; i<N; i++)
   {
     buf=matrix[i][i];
       for (j=N;j>=i;j--)
           matrix[i][j]/=buf; //поиск коэффициентов для зануления
         for (j=i+1;j<N;j++)
        {
           buf=matrix[j][i];
             for (k=N;k>=i;k--)
           matrix[j][k]-=buf*matrix[i][k]; //зануление
        }
    }
//ob.hod
  xx[N-1] = matrix[N-1][N];
   for (i=N-2; i>=0; i--)
     {
         xx[i] = matrix[i][N];
         for (j=i+1;j<N;j++) xx[i]-=matrix[i][j]*xx[j];//работа со второй матрицей, для того чтобы изменить и ей коэффициенты, чтоб получить матрицу В, которая нужна будет в поиске значений х
     }
 
cout<<("\nMetod Gaussa:\n");
  for (i=0; i<N; i++)
    cout<<"x("<< i+1 << ")="<< xx[i]<<endl;
 
 checking(is_matr, xx);
 return 0;
}
Dr Blue вне форума Ответить с цитированием
Старый 03.11.2019, 18:08   #2
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Ошибка: N1 = N + 2 = 3 + 2 = 5, а столбцов 4.
Cuprum5 вне форума Ответить с цитированием
Старый 03.11.2019, 18:11   #3
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Цитата:
Сообщение от Dr Blue Посмотреть сообщение
//присвоение i значения 0; проверка того, что i<n;
- в C++ регистр имеет значение.
Cuprum5 вне форума Ответить с цитированием
Старый 03.11.2019, 18:11   #4
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Цитата:
Сообщение от Dr Blue Посмотреть сообщение
Код:
for(j = 0; j < N; j++)
- у Вас N1 столбцов, а не N.
Cuprum5 вне форума Ответить с цитированием
Старый 04.11.2019, 08:23   #5
Dr Blue
 
Регистрация: 03.11.2019
Сообщений: 4
По умолчанию

Спасибо, исправил:
1) N1 = N + 1;
2) Регистр имеет значение, да, поторопился, написав строчную букву;
3) Исправил на N1.
В остальном, в плане кода и комментариев, всё верно?
Dr Blue вне форума Ответить с цитированием
Старый 04.11.2019, 10:42   #6
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Удалено.
Cuprum5 вне форума Ответить с цитированием
Старый 04.11.2019, 12:22   #7
Dr Blue
 
Регистрация: 03.11.2019
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
Удалено.
Не понял..
Dr Blue вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
СЛАУ методом Гаусса-Жордано. Локы Фриланс 3 26.04.2017 10:24
решение СЛАУ методом гаусса al172 Помощь студентам 0 12.11.2013 17:08
Решение СЛАУ методом Гаусса и методом Крамера. R1k1 Помощь студентам 0 24.03.2012 19:17
Решение СЛАУ методом Гаусса Денис999 Помощь студентам 2 27.11.2011 18:31
Решение СЛАУ методом Гаусса Medvedko0116 Помощь студентам 0 27.06.2011 11:15