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

Вычисление определителя Методом Гаусса - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.74
StalkerSmerch
1 / 1 / 2
Регистрация: 04.03.2012
Сообщений: 159
11.06.2012, 16:49     Вычисление определителя Методом Гаусса #1
Как сделать обмен строк в этом методе?
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
#include <stdio.h>
#include <conio.h>
#include <cstdlib>
#include <iostream>
#include <math.h>
#include <stdlib.h>
 
int main()
{
  setlocale(LC_ALL, "Russian");
  float a[50][51], t;
  int j, i, k, ra, n,pro=1;
  puts("Введите размерность матрицы:\n");
  scanf("%i",&n);
   for (i = 0; i < n; i++)
  {
    for (j = 0; j < n; j++){
     ra=rand()%10+1;
    a[i][j]=ra;
    }}
 
  printf("Матрица: \n \n");
  for (i = 0; i < n; i++)
  {
    for (j = 0; j < n; j++)
    printf("%6.2f\t", a[i][j]);
    printf("\n");
    }
 
  for (i = 0; i < n; i++){
    if (a[i][j] == 0)
    {
      k = i;
      while ((a[k][i] == 0) && (k < n))
    k++;}
      if (a[k][i] != 0)
    for (j = 0; j < n; j++)
    {
      t = a[i][j];
      a[i][j] = a[k][j];
      a[k][j] = t;
    }
    }
  for (k = 0; k < n - 1; k++)
    for (i = k + 1; i < n; i++)
    {
      if (a[k][k] !=0)
      {
    t = a[i][k] / a[k][k];
    for (j = 0; j < n + 1; j++)
      a[i][j] = (-1)*(a[k][j] * t) + a[i][j];
      }}
 
  printf("\nМатрица сводится к треугольной форме:\n\n");
  for (i = 0; i < n; i++)
  {
    for (j = 0; j < n ; j++)
      printf("%6.2f\t", a[i][j]);
    printf("\n");
  }
  for(i=0;i<n;i++){
  pro=a[i][i]*pro;
  }
  puts("\n Определитель = ");
  printf("%i",pro);
getch();
return 0;
}
Результат выводит нормальный, но если вбить самому матрицу
a[0][0]=1;
a[0][1]=2;
a[0][2]=3;
a[0][3]=4;
a[1][0]=1;
a[1][1]=2;
a[1][2]=3;
a[1][3]=3;
(все остальные элементы по старому рандому)
То решения нет, так как нету смены строк, помогите её сделать.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
11.06.2012, 16:54     Вычисление определителя Методом Гаусса #2
Цитата Сообщение от StalkerSmerch Посмотреть сообщение
Как сделать обмен строк в этом методе?
А зачем он там?
StalkerSmerch
1 / 1 / 2
Регистрация: 04.03.2012
Сообщений: 159
11.06.2012, 16:55  [ТС]     Вычисление определителя Методом Гаусса #3
taras atavin, Для того что бы решить определитель.(то есть что бы на диагонали не было нулей.)
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
11.06.2012, 16:58     Вычисление определителя Методом Гаусса #4
А откуда они там возьмутся? И в методе Гаусса ни каких перестановок нет.
StalkerSmerch
1 / 1 / 2
Регистрация: 04.03.2012
Сообщений: 159
11.06.2012, 17:13  [ТС]     Вычисление определителя Методом Гаусса #5
taras atavin, я знаю, но преподаватель сказал что надо.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
11.06.2012, 17:34     Вычисление определителя Методом Гаусса #6
Тогда модификацию метода в студию. Словами.
StalkerSmerch
1 / 1 / 2
Регистрация: 04.03.2012
Сообщений: 159
11.06.2012, 17:44  [ТС]     Вычисление определителя Методом Гаусса #7
taras atavin, Как я понял главное что бы на диагонали не получить нули.а для этого нужно проверять следующий елемен на то что бы он при вычитании не был нулём, если он будет нулём то строчки меняем местами и опять проверяем.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
11.06.2012, 17:47     Вычисление определителя Методом Гаусса #8
Какие строки? Уменьшаемое с вычитаемым? Это гарантия той же пакости. Опиши подробно, а то я уже не помню. Делал реализацию с однократной перестановкой аж в 2001-м.
StalkerSmerch
1 / 1 / 2
Регистрация: 04.03.2012
Сообщений: 159
11.06.2012, 17:53  [ТС]     Вычисление определителя Методом Гаусса #9
taras atavin, Нет, мы меняем вычитаемой со следующей строкой, и так пока не конец массива или пока при вычитании строк слудующий элемент будет равен нулю.

Добавлено через 2 минуты
например у нас есть матрица
1 2 3 4
1 2 4 5
4 6 1 2

Так как при вычитании первой строки и второй элемент [1][1](по си) будет равен нулю, тогда меняем строки 2 и 3 местами.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
11.06.2012, 18:56     Вычисление определителя Методом Гаусса #10
Кажется начинаю вспоминать. Была у меня и многкратная. В тот же день.
Код
1 2 3 4
1 2 4 5
4 6 1 2
3 2 2 8

4 6 1 2
1 2 3 4
1 2 4 5
3 2 2 8

4  6   1    2
0  0,5 2,75 3,5
0  0,5 3,75 4,5
0 -2,5 1,25 6,5

4  6   1    2
0 -2,5 1,25 6,5
0  0,5 2,75 3,5
0  0,5 3,75 4,5

4  6   1    2
0 -2,5 1,25 6,5
0  0   3    4,8
0  0   4    5,8

4  6   1    2
0 -2,5 1,25 6,5
0  0   4    5,8
0  0   3    4,8

4  6   1    2
0 -2,5 1,25 6,5
0  0   4    5,8
0  0   0    0,45
. Свободный член не показан. На каждом шаге выполняется та перестановка, при которой на главную диагональ встаёт максимальный по модулю из коэффициентов не выше главной диагонали и только потом эта строка вычитается из остальных. С пяти диагональными матрицами до 130*130 эта модификация была наиболее стабильной из всех опробованных. Крамер провалился на всех порядках строго больше шести, так как переполнял стек. Простой Гаусс вылетал по нолям всегда. Однократная перестановка помогала раз в час. А многократная ни разу не вылетела.

Добавлено через 1 минуту
За недельку вспомню исходник, потом переведу.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2012, 20:04     Вычисление определителя Методом Гаусса
Еще ссылки по теме:

Определитель матрицы методом Гаусса C++
C++ Вычисление определенного интеграла методом Гаусса СИ
СЛАУ методом Гаусса C++

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

Или воспользуйтесь поиском по форуму:
StalkerSmerch
1 / 1 / 2
Регистрация: 04.03.2012
Сообщений: 159
03.07.2012, 20:04  [ТС]     Вычисление определителя Методом Гаусса #11
taras atavin, Я конечно не к месту это говорю, но пора бы уже скинуть)
Yandex
Объявления
03.07.2012, 20:04     Вычисление определителя Методом Гаусса
Ответ Создать тему
Опции темы

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