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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.74
StalkerSmerch
1 / 1 / 2
Регистрация: 04.03.2012
Сообщений: 159
#1

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

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

Нахождение определителя матрицы методом гаусса - C++
Нахождение определителя методом гауса #include &lt;stdio.h&gt; #include&lt;locale.h&gt; #include&lt;math.h&gt; #include&lt;conio.h&gt; int main() { ...

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

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

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

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

Вычисление следа матрицы и определителя - C++
воббщем надо реализовать вычисление следа матрицы и определителя алгоритм для следа : #include &lt;stdio.h&gt; typedef int *pInt; ...

Функция класса(вычисление определителя произвольной матрицы) работает не правильно(постоянно определитель 0) - C++
void deterMatr(matr matrx) { if (matrx.rows == matrx.columns){ //приведение матрицы к треугольному виду int maxl, k; ...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
Ушёл с форума.
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
Ушёл с форума.
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
Ушёл с форума.
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
Ушёл с форума.
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++
Был создан двухмерный динамический пассив, где указываем кол-во строк и столбцов, а затем записываем значение каждого числа всех строк...

Написать код в с++ Методом Гаусса - C++
Код должен быть очень простыМ, не замудренным=)

Решение СЛУ методом Гаусса - C++
Напишите плз прогу, которая будет решать слу методом Гаусса. #include &quot;stdafx.h&quot; #include &quot;iostream&quot; #include &quot;conio.h&quot; using...


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

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

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