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

Определитель матрицы(разобраться в коде) - C++

Восстановить пароль Регистрация
 
SuperVarenik
0 / 0 / 0
Регистрация: 26.04.2013
Сообщений: 24
17.05.2013, 09:12     Определитель матрицы(разобраться в коде) #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
#include <iostream>
#include <math.h>
#include <stdio.h>
using namespace std;
int main()
{
  int n;
  double** a;
  cout<<"Write Razm Matrix: ";
  cin >> n;
  a=new double*[n];
  for (int i = 0; i < n; i++)
     {
      a[i]=new double[n];
     }
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
   {
    cin>>a[i][j];
   }
} 
double det = 1;
for (int i = 0; i < n; i++)
{
 int row = i;          // Зачем нужна эта часть кода, начиная отсюда.__________
 int mx = a[i][i];
 for(int k = i+1; k < n; k++)        
 {
  if (fabs(a[k][i]) > mx)    //Здесь как я понял, проверяется какое то условие, но какое?свиду я вижу а смысл её
   {
    row = k;
    mx = fabs(a[k][i]);      // Согласно этому условию он тут присвание делает 
   }
 }
if (row != i)                  // Тут он отвечает за знак определителя и меняет значение a[row] с a[i], но зачем это вообще?
  {
   det *= -1;
   swap(a[row], a[i]);
  }                                // Заканчивая здесь._____________
for (int j = i+1; j < n; j++)  // Здесь мы обнуляем элементы матрицы под главной диагональю
  {
   double e = a[j][i]/a[i][i];
   for (int k = i; k < n; k++)
    {
     a[j][k] -= e*a[i][k];
    }
  }
}
for (int i = 0; i < n; i++) //Здесь считает произведение элементов главной диагонали
{
det *= a[i][i];
}
cout<<"Determinant= ";
printf("%lf", det);
return 0;
}
Кто понял там в середине кода часть одну, отпишитесь плиз непонятно зачем он, а так в данном коде снчала вводится матрица, потом приводим к треугольному виду обнулив всё под диагональю главной и умножить элементы получившейся главноё диагонали. Вообщем между линий кто может объяснить зачем код! Её цель хотябы понять.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2013, 09:12     Определитель матрицы(разобраться в коде)
Посмотрите здесь:

C++ Найти определитель матрицы
Определитель Матрицы C++
Определитель матрицы C++
C++ Вычислить определитель квадратной матрицы
C++ Определитель матрицы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
17.05.2013, 10:50     Определитель матрицы(разобраться в коде) #2
SuperVarenik, забавно видеть свой код, только сильно переделанный Тут строится треугольная матрица методом равносильных преобразований, затем берётся произведение элементов на главной диагонали. Кстати, вот оригинал http://pastebin.com/c94iuBqd
SuperVarenik
0 / 0 / 0
Регистрация: 26.04.2013
Сообщений: 24
17.05.2013, 11:53  [ТС]     Определитель матрицы(разобраться в коде) #3
Да и ты мне код прислал. Спасибо. Мне в целом метод понятен но не понятна вот та часть . Которую я писал. Как можно догадаться в смысле этой части кода . Зачем там свап и зачем нужно менять знак определителя?
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
17.05.2013, 15:44     Определитель матрицы(разобраться в коде) #4
SuperVarenik, там свап строк, я ищу строку, ниже данной, с max значением по модулю в j-ом столбце, каждый раз, чтобы на главной диагонали не появлялись нули, на j-м шаге вычисления. Знак меняется при свапе по свойствам определителя, когда строки меняются.
Yandex
Объявления
17.05.2013, 15:44     Определитель матрицы(разобраться в коде)
Ответ Создать тему
Опции темы

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