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

Системы линейных уравнений методом Гаусса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Передача данных между двумя приложениями. http://www.cyberforum.ru/cpp-beginners/thread571956.html
Суть проблемы такова: есть приложение на с#, производящее вычисления, результатом является массив данных. Есть прога на с++ + QT, умеющая визуализировать подобные данные. Вопрос: можно ли как-то...
C++ sdl отрисовка поля Хочется понять принцип отрисовки поля средствами sdl. Допустим нужно поле 3х3, ячейки поля квадратные поэтому использую SDL_Rect, где хранить координаты Х,Y в векторе или массиве? В конечном счете... http://www.cyberforum.ru/cpp-beginners/thread571934.html
Запись класса в файл C++
Приветствую. Я хочу записать битовую форму класса, но столкнулся с делемой. Насколько мне известно, есть две группы функций записи битов в файл: 1) _wsopen_s _read _write _filelength _tell...
C++ НЕконсольные приложения
Не умею создавать не консольные приложения. Ну совсем. Никто не учил, сам не понимаю. Где я могу почитать информацию о создании вин32 проектов. Можно пожалуйста литературу? И желательно более...
C++ Хеш-таблица методом цепочек http://www.cyberforum.ru/cpp-beginners/thread571891.html
Здравствуйте, помогите написать хеш таблицу методом цепочек. Не могу понять, как все это сделать, перечитал кучу информации, никак понять не могу. Мне нужно чтобы был класс хеш таблица. Если не...
C++ Закольцевать и отсортировать двунаправленный список создать двунаправленный список с числами из диапазона от - 50 до + 50. после создания списка преобразовать его в кольцо. предусмотреть возможность движения по кольцу в обе стороны с отображением... подробнее

Показать сообщение отдельно
KPN
4 / 4 / 1
Регистрация: 23.03.2012
Сообщений: 40

Системы линейных уравнений методом Гаусса - C++

12.05.2012, 16:48. Просмотров 47414. Ответов 10
Метки (Все метки)

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

вот что сделал:
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
#include<iostream>
using namespace std;
 
int main()
{
   int i, j, n, m;
//создаем массив
   cout << "введи число уравнений: ";
         cin >> n;
         cout << "введи число неизвестных: ";
         cin >> m;
         m+=1;
    int **matrix = new int *[n];
         for (i=0; i<n; i++)
             matrix[i] = new int [m];
 
//инициализируем
   cout << "vvedi element" << endl;
    for (i = 0; i<n; i++)
        for (j = 0; j<m; j++)
            cin >> matrix[i][j];
 
 //выводим массив
    cout << "matrix: " << endl;
      for (i=0; i<n; i++)
       {
          for (j=0; j<m; j++)
            cout << matrix[i][j] << " ";
        cout << endl;
       }
    cout << endl;
 
//Метод Гаусса
//Прямой ход, приведение к верхнетреугольному виду
 
 
/*Обратный ход,
методом исключения неизвестных
в обратном порядке решаем уравнения
*/
 
 
 
 
//Выводим решения
 
     delete[] matrix;
return 0;
}
на форуме нашел подобную тему, но там со статическим массивом( нужно с динамическим)
вот как там реализовано:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 for (i=0; i<N; i++)
   {
     tmp=matrix[i][i];
       for (j=N;j>=i;j--)
           matrix[i][j]/=tmp;
         for (j=i+1;j<N;j++)
        {
           tmp=matrix[j][i];
             for (k=N;k>=i;k--)
           matrix[j][k]-=tmp*matrix[i][k];
        }
    }
/*обратный ход*/
  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];
     }
пробовал это совсестить с тем что я написал, не работает... при выводе решений пишет одни нули.

хелп, что не так делаю???

Добавлено через 8 часов 0 минут
сделал вот так:
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
#include<iostream>
using namespace std;
 
int main()
{
   int i, j, n, m;
//создаем массив
   cout << "введи число уравнений: ";
         cin >> n;
         cout << "введи число неизвестных: ";
         cin >> m;
         m+=1;
    int **matrix = new int *[n];
         for (i=0; i<n; i++)
             matrix[i] = new int [m];
 
//инициализируем
   cout << "vvedi element" << endl;
    for (i = 0; i<n; i++)
        for (j = 0; j<m; j++)
            cin >> matrix[i][j];
 
//выводим массив
    cout << "matrix: " << endl;
      for (i=0; i<n; i++)
       {
          for (j=0; j<m; j++)
            cout << matrix[i][j] << " ";
        cout << endl;
       }
    cout << endl;
 
//Метод Гаусса
 
    float tmp, xx[m];
    int k;
 
    for (i=0; i<n; i++)
     {
       tmp=matrix[i][i];
         for (j=n;j>=i;j--)
             matrix[i][j]/=tmp;
           for (j=i+1;j<n;j++)
          {
             tmp=matrix[j][i];
               for (k=n;k>=i;k--)
             matrix[j][k]-=tmp*matrix[i][k];
          }
      }
  /*обратный ход*/
    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];
       }
 
       for (i=0; i<n; i++)
           cout << xx[i] << " ";
       cout << endl;
 
    delete[] matrix;
 
   return 0;
}
ответ выводится не верный.
где неправильно???

вот рабочий код:
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
#include<iostream>
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define N    3
#define N1    N+1
using namespace std;
float matrix[N][N1]={{2,-1,3,2},
                                  {1,-2,1,3},
                                  {3,-1,3,4}};
 
float epsilon=0.001;
 
void ShowMatrix(void)
{
cout << "SLAU:" << endl;
  int i,j;
    for (i=0 ;i<N; i++)
      {
        for (j=0; j<N; j++)
          printf("%+3.3f*x%d",matrix[i][j],i+1);
        printf("=%3.3f\n",matrix[i][N]);
      }
}
 
int main()
{
  float tmp, xx[N1];
  short int i, j, k;
 
  ShowMatrix();
 
/*Метод Гаусса*/
/*прямой ход*/
  for (i=0; i<N; i++)
   {
     tmp=matrix[i][i];
       for (j=N;j>=i;j--)
           matrix[i][j]/=tmp;
         for (j=i+1;j<N;j++)
        {
           tmp=matrix[j][i];
             for (k=N;k>=i;k--)
           matrix[j][k]-=tmp*matrix[i][k];
        }
    }
/*обратный ход*/
  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];
     }
/*вывод решения*/
printf("\nMetod Gaussa:\n");
  for (i=0; i<N; i++)
    printf("x%d=%3.3f\n", i+1, xx[i]);
 
 return 0;
}
но здесь со статическим массивом.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru