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

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

Войти
Регистрация
Восстановить пароль
 
Beizil
0 / 0 / 0
Регистрация: 19.05.2010
Сообщений: 12
#1

метод Гауса - C++

26.05.2010, 21:39. Просмотров 491. Ответов 0
Метки нет (Все метки)

только осваиваю C++ С программой вроде разобрался, но не могу разобраться как дописать вычисление матрицы путём перемножения диагональных элементов((((
вот собсно сам код:
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
//Решение системы лин. уравнений методом Гаусса
//с выбором главного элемента
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include<stdlib.h>
#define N 50
void glavelem( int k, double mas[] [N + 1], int n, int otv[] );
 
int main( void )
{
    printf("Reshenie sistemi lineinix yravnenii metodom Gausa\ns viborom glavnogo elementa\n\n");
    printf("Vipolnil: Miroshnichenko Alexandr gruppa M-095\n\n");
    printf("---------------------------------------------------------\n\n");
  double mas[N] [N + 1],mas2[N][N+1],prov[N];
  double x[N], y[N]; //решения системы
  int otv[N]; //Отвечает за порядок корней
  int i, j, k, n, b;
  //Ввод данных
  do
  {
    printf( "Vvedite chislo yravnenii sistemi: " );
    scanf( "%d", & n );
    if ( N < n )
      printf( "slishkom bol'shoe chislo, povtorite vvod\n" );
  }
  while ( N < n );
  printf( "Postrochno Vvedite sistemy vmeste s pravoi chast'u:\n" );
  for ( i = 0; i < n; i++ )
    for ( j = 0; j < n + 1; j++ )
      scanf( "%lf", & mas[i] [j] );
for ( i = 0; i < n; i++ )
    for ( j = 0; j < n; j++ )
        mas2[i][j]=mas[i][j];// запоминаем исходную матрицу
  //Вывод введенной системы
//  clrscr();
  printf( "\n\nSistema:\n" );
  for ( i = 0; i < n; i++ )
  {
    for ( j = 0; j < n + 1; j++ )
      printf( "%7.2f ", mas[i] [j] );
 
    printf( "\n" );
 
  }
  //Сначала все корни по порядку
  for ( i = 0; i < n + 1; i++ )
    otv[i] = i;
  //Прямой ход метода Гаусса
  for ( k = 0; k < n; k++ )
  { //На какой позиции должен стоять главный элемент
    glavelem( k, mas, n, otv ); //Установка главного элемента
    if ( fabs( mas[k] [k] ) < 0.0001 )
    {
      printf( "Sistema ne imeet edinstvennogo resheniya" );
      return ( 0 );
    }
    for ( j = n; j >= k; j-- )
      mas[k] [j] /= mas[k] [k];
    for ( i = k + 1; i < n; i++ )
      for ( j = n; j >= k; j-- )
        mas[i] [j] -= mas[k] [j] * mas[i] [k];
  }
  //Обратный ход
  for ( i = 0; i < n; i++ )
    x[i] = mas[i] [n];
  for ( i = n - 2; i >= 0; i-- )
    for ( j = i + 1; j < n; j++ )
      x[i] -= x[j] * mas[i] [j];
  //Вывод результата
  printf( "\n\nOtvet:\n" );
  for ( i = 0; i < n; i++ )
    for ( j = 0; j < n; j++ )
      if ( i == otv[j] )
      { //Расставляем корни по порядку
        printf( "%f\n", x[j] );
        y[i]=x[j];
 
        /*for(i=0;i<n;i++)
            mas[j]=0;
            for(j=0;j<n;j++)
                b[i][j]=mas[i][j]*x[i];*/
        
        break;
        
 
      }
      printf("\nProverka:\n");
      for (i=0;i<n;i++)
          {
                prov[i]=0;
                    for (j=0;j<n;j++)
                      prov[i]=prov[i]+mas2[i][j]*y[j];// проверка
          }
        for (i=0;i<n;i++)
            printf("\n%f ",prov[i]);
        printf("\n\n\n");
  return ( 0 );
}
//----------------------------------------------
//Описание  функции
//----------------------------------------------
void glavelem( int k, double mas[] [N + 1], int n, int otv[] )
{
  int i, j, i_max = k, j_max = k;
  double temp;
  //Ищем максимальный по модулю элемент
  for ( i = k; i < n; i++ )
    for ( j = k; j < n; j++ )
      if ( fabs( mas[i_max] [j_max] ) < fabs( mas[i] [j] ) )
      {
        i_max = i;
        j_max = j;
      }
  //Переставляем строки
  for ( j = k; j < n + 1; j++ )
  {
    temp = mas[k] [j];
    mas[k] [j] = mas[i_max] [j];
    mas[i_max] [j] = temp;
  }
  //Переставляем столбцы
  for ( i = 0; i < n; i++ )
  {
    temp = mas[i] [k];
    mas[i] [k] = mas[i] [j_max];
    mas[i] [j_max] = temp;
  }
  //Учитываем изменение порядка корней
  i = otv[k];
  otv[k] = otv[j_max];
  otv[j_max] = i;
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2010, 21:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос метод Гауса (C++):

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

Метод Гауса есть? - C++
Поделитесь плиз програмкой для решения СЛАУ методом гауса=)

Метод Гауса, Visual 2008 - C++
Не могу понять, что происходит с программой..только осваиваю visual...запускаю, происходит выполнение и консольное окно закрывается, ошибок...

Метод гауса система ленейных уравнений - C++
Когда система линейных уравнений решенная методом Гаусса имеет бесконечное мноджество решений? какое должно быть условие?

метод гауса..обьясните как работает программа - C++
ipMatr(); for(opMatr(),k=0;k&lt;=n;k++) //прямой ход метода Гаусса; {for(aa=fabs(a),i=k,j=k+1;j&lt;=n;j++)//поиск макс....

Ошибка - Матрица гауса - C++
Ошибка заключается что он не вычесляет дальше. Что делать//Матрица гауса. #include &lt;iostream&gt; #include&lt;stdio.h&gt; using namespace std; ...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2010, 21:39
Привет! Вот еще темы с ответами:

СЛАУ. Метод обратной матрицы, метод Гаусса, метод Крамера, метод Зейделя - C++
Помогите ребят. Не могу построить алгоритмы для этих методов Язык C++

Решение системы уравнений методом Гауса - C++
Вот, ради интереса попробовал написать программу (С++). Сейчас она работает, но выполняет лишь первый шаг. Нужно чтобы программа выполняла...

Как найти систему методом гауса - C++
Здравствуйте может кто подсказать как используя метод гаусса найти решение системы А*у=b ______a(i,1)___a(i,2)__...

Как привести матрицу к треугольному виду по методу гауса? - C++
Может у кого есть прога? Нужна срочно!


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

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

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