Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/17: Рейтинг темы: голосов - 17, средняя оценка - 5.00
StalkerSmerch
1 / 1 / 2
Регистрация: 04.03.2012
Сообщений: 159
1

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

11.06.2012, 16:49. Просмотров 3173. Ответов 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
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;
(все остальные элементы по старому рандому)
То решения нет, так как нету смены строк, помогите её сделать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2012, 16:49
Ответы с готовыми решениями:

Нахождение определителя матрицы методом гаусса
Нахождение определителя методом гауса #include &lt;stdio.h&gt; #include&lt;locale.h&gt;...

Вычисление определенного интеграла методом Гаусса СИ
хелп

Метод Гаусса для вычисления определителя
Вычисляю обратную матрицу методом Гаусса. После приведения к верхнетреугольному...

Вычисление определителя
Здравствуйте, дорогие форумчане! Помогите, пожалуйста, отладить программу...

Вычисление определителя матрицы N*N
Дорогие форумчане, никто не подскажет как вычислить определитель квадратной...

10
taras atavin
4204 / 1766 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
11.06.2012, 16:54 2
Цитата Сообщение от StalkerSmerch Посмотреть сообщение
Как сделать обмен строк в этом методе?
А зачем он там?
0
StalkerSmerch
1 / 1 / 2
Регистрация: 04.03.2012
Сообщений: 159
11.06.2012, 16:55  [ТС] 3
taras atavin, Для того что бы решить определитель.(то есть что бы на диагонали не было нулей.)
0
taras atavin
4204 / 1766 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
11.06.2012, 16:58 4
А откуда они там возьмутся? И в методе Гаусса ни каких перестановок нет.
0
StalkerSmerch
1 / 1 / 2
Регистрация: 04.03.2012
Сообщений: 159
11.06.2012, 17:13  [ТС] 5
taras atavin, я знаю, но преподаватель сказал что надо.
0
taras atavin
4204 / 1766 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
11.06.2012, 17:34 6
Тогда модификацию метода в студию. Словами.
0
StalkerSmerch
1 / 1 / 2
Регистрация: 04.03.2012
Сообщений: 159
11.06.2012, 17:44  [ТС] 7
taras atavin, Как я понял главное что бы на диагонали не получить нули.а для этого нужно проверять следующий елемен на то что бы он при вычитании не был нулём, если он будет нулём то строчки меняем местами и опять проверяем.
0
taras atavin
4204 / 1766 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
11.06.2012, 17:47 8
Какие строки? Уменьшаемое с вычитаемым? Это гарантия той же пакости. Опиши подробно, а то я уже не помню. Делал реализацию с однократной перестановкой аж в 2001-м.
0
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 местами.
0
taras atavin
4204 / 1766 / 211
Регистрация: 24.11.2009
Сообщений: 27,565
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 минуту
За недельку вспомню исходник, потом переведу.
0
StalkerSmerch
1 / 1 / 2
Регистрация: 04.03.2012
Сообщений: 159
03.07.2012, 20:04  [ТС] 11
taras atavin, Я конечно не к месту это говорю, но пора бы уже скинуть)
0
03.07.2012, 20:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2012, 20:04

Вычисление следа матрицы и определителя
воббщем надо реализовать вычисление следа матрицы и определителя алгоритм для...

Функция класса(вычисление определителя произвольной матрицы) работает не правильно(постоянно определитель 0)
void deterMatr(matr matrx) { if (matrx.rows == matrx.columns){ ...

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


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

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

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