Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/76: Рейтинг темы: голосов - 76, средняя оценка - 5.00
167 / 106 / 30
Регистрация: 19.01.2013
Сообщений: 847

Обратная матрица

17.05.2013, 11:33. Показов 14306. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Блин народ киньте метод. Я уже не знаю почему мой метод не вычисляет(((.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.05.2013, 11:33
Ответы с готовыми решениями:

Обратная матрица
Люди добрые! Прошу у вас помощи, для курсовой осталось сделать последнее задание, нужно найти обратную матрицу для заданной. Может есть у...

Обратная матрица
Добрый день! Подскажите пожалуйста код нахождения обратной матрицы n на n.

Обратная матрица
Нужно написать обратную матрицу, начал искать определитель, но появилась ошибка и не могу ее исправить. Матрица P это бинарная матрица...

10
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
17.05.2013, 11:53
Покажи свой метод
0
167 / 106 / 30
Регистрация: 19.01.2013
Сообщений: 847
17.05.2013, 11:57  [ТС]
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
 public  double[][] MatrixDuplicate(double[][] matrix)
        {
            
            // Предполагается, что матрица не нулевая
            double[][] result = MatrixCreate(matrix.Length, matrix[0].Length);
            for (int i = 0; i < matrix.Length; ++i) // Копирование значений
                for (int j = 0; j < matrix[i].Length; ++j)
                    result[i][j] = matrix[i][j];
            return result;
        }
       public double[][] MatrixDecompose(int rows, int cols)
      {
          double[][] matrix;
           int[] perm;
           int toggle;
  // Разложение LUP Дулитла. Предполагается,
  // что матрица квадратная.
   // для удобства
  double[][] result = MatrixCreate(rows,cols);
  int n = result.Length;
  Print1(result,rows,cols);
  perm = new int[n];
  for (int i = 0; i < n; ++i) { perm[i] = i; }
  toggle = 1;
  for (int j = 0; j < n - 1; ++j) // каждый столбец
  {
    double colMax = Math.Abs(result[j][j]); // Наибольшее значение в столбце j
    int pRow = j;
    for (int i = j + 1; i < n; ++i)
    {
      if (result[i][j] > colMax)
      {
        colMax = result[i][j];
        pRow = i;
      }
    }
    if (pRow != j) // перестановка строк
    {//тут начинается перенумерация столбцов на обратный порядок
      double[] rowPtr = result[pRow];
      result[pRow] = result[j];
      result[j] = rowPtr;
      int tmp = perm[pRow]; // Меняем информацию о перестановке
      perm[pRow] = perm[j];
      perm[j] = tmp;
      toggle = -toggle; // переключатель перестановки строк
    }
    if (Math.Abs(result[j][j]) < 1.0E-20)
      return null;
    for (int i = j + 1; i < n; ++i)
    {
      result[i][j] /= result[j][j];
      for (int k = j + 1; k < n; ++k)
        result[i][k] -= result[i][j] * result[j][k];
    }
  } // основной цикл по столбцу j
  return result;
}
Добавлено через 1 минуту
кароче код вообще фигня полнейшая. он первую строчку как-то целыми числами оставляет. остальные дробные
0
167 / 106 / 30
Регистрация: 19.01.2013
Сообщений: 847
17.05.2013, 11:58  [ТС]
Вот весть поект
Вложения
Тип файла: rar моя.rar (149.1 Кб, 170 просмотров)
0
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
17.05.2013, 12:05
http://msdn.microsoft.com/ru-r... 63137.aspx
Смотрите как сделано тут
0
167 / 106 / 30
Регистрация: 19.01.2013
Сообщений: 847
17.05.2013, 12:20  [ТС]
блин да Вы издеваетесь? Я оттуда и взял) непашет.
0
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
17.05.2013, 12:25
очень жаль тогда

Добавлено через 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
    static double[][] MatrixInverse(double[][] matrix)
    {
      int n = matrix.Length;
      double[][] result = MatrixDuplicate(matrix);
      int[] perm;
      int toggle;
      double[][] lum = MatrixDecompose(matrix, out perm, out toggle);
      if (lum == null)
        throw new Exception("Unable to compute inverse");
      double[] b = new double[n];
      for (int i = 0; i < n; ++i)
      {
        for (int j = 0; j < n; ++j)
        {
          if (i == perm[j])
            b[j] = 1.0;
          else
            b[j] = 0.0;
        }
        double[] x = HelperSolve(lum, b);
        for (int j = 0; j < n; ++j)
          result[j][i] = x[j];
      }
      return result;
    }
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
    static double[] HelperSolve(double[][] luMatrix,
     double[] b)
    {
      // Решаем luMatrix * x = b
      int n = luMatrix.Length;
      double[] x = new double[n];
      b.CopyTo(x, 0);
      for (int i = 1; i < n; ++i)
      {
        double sum = x[i];
        for (int j = 0; j < i; ++j)
          sum -= luMatrix[i][j] * x[j];
        x[i] = sum;
      }
      x[n - 1] /= luMatrix[n - 1][n - 1];
      for (int i = n - 2; i >= 0; --i)
      {
        double sum = x[i];
        for (int j = i + 1; j < n; ++j)
          sum -= luMatrix[i][j] * x[j];
        x[i] = sum / luMatrix[i][i];
      }
      return x;
    }
1
167 / 106 / 30
Регистрация: 19.01.2013
Сообщений: 847
17.05.2013, 13:46  [ТС]
кароче если там разобраться то там надо вообще всё что выше этой темы копировать.

Добавлено через 45 минут
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
        static double[,] One(double[,] hhh )
        { //'единичная матрица
            int h = 2;
            double[,] ggg = new double[h+1, h+1];// еденичная матрица
           
 
 
 
            //   Dim A_edin(k + 1, k + 1) As Double 'затем она перейдёт в обратную
            for (int g = 0; g < h+1 ; g++)
            {
                for (int j = 0; j < h+1 ; j++)
                {
                    if (g == j)
                    { ggg[g, j] = 1; }
                    else
                    { ggg[g, j] = 0; }
                }
            }
 
            //  'единичная матрица
 
            //'обратная матрица
 
 
            double arg=0 ;
            int i1=0;
            //  Dim arg As Double
            //   Dim i1 As Integer
            for (int j = 0; j < h ; )
            {
                for (int i = 0; i < h ; )
                {
                    if (i == j)
                    { j++; i++; }                   
                        arg = hhh[i, j] / hhh[j, j];
                 
                    //   If i = j Then GoTo 50
 
                    for (i1 = 1; i1 < h; )
                    {
                        //  For i1 = 1 To k + 1
                        hhh[i, i1] = hhh[i, i1] - hhh[j, i1] * arg;
                        //          A(i, i1) = A(i, i1) - A(j, i1) * arg
                        ggg[i, i1] = ggg[i, i1] - ggg[j, i1] * arg;
                        i1++;
                    }
                    //        A_edin(i, i1) = A_edin(i, i1) - A_edin(j, i1) * arg
                    //  Next i1
                    i++;
                    j++;
                }
            }
            //    50:         Next i                      Next j
            for (int j = 0; j < h ; )
            {
                for (int i = 0; i < h ; )
                { //  For j = 1 To k + 1
                    //     For i = 1 To k + 1
                    //       Dim arg_2 As Double
                    double arg_2 = 1;
                    if (i == j)
                    {
                        arg_2 = hhh[i, j];
                        for (i1 = 1; i1 < h + 1; )
                        {
                            hhh[i, i1] = hhh[i, i1] / arg_2;
                            ggg[i, i1] = ggg[i, i1] / arg_2;
                            i1++;
 
                        }
                    }
                    i++;
                    j++;
                }
 
 
                /*     If i = j Then
                         arg_2 = A(i, j)
                         For i1 = 1 To k + 1
                             A(i, i1) = A(i, i1) / arg_2 'стала единичной
                             A_edin(i, i1) = A_edin(i, i1) / arg_2 'стала обратной матрице А
                         Next i1
                     End If
 
                 Next i
             Next j
             'обратная матрица
 
     */
 
            }
            return ggg;
        }
ВОт код с СИ переделаный , но нерабочий. Я торопился и не успел сделать(
0
192 / 192 / 29
Регистрация: 03.12.2009
Сообщений: 853
17.05.2013, 13:51
В чём сложность запустить работающий код?
0
167 / 106 / 30
Регистрация: 19.01.2013
Сообщений: 847
17.05.2013, 21:56  [ТС]
Да тот код невозможно запустить. он обращается к методам написанным выше. В одном из них вообще есть обращение на создание новой матрицы. Поэтому первое время я реально считал, что оно считает всё как надо, но это только обман. На самом деле создаётся просто новая таблица. Если же довести до ума, то он ничего не считает.
А именно МатриксДупликат запрашивает метод создания новой матрицы СреэйтМатрикс. Ну, кароче вообще не вариант(((.

Добавлено через 1 час 56 минут
Кароче ща выложу весть поект с объяснением. 100% рабочий код. 100% простой. 100% лучший. 100% первый подобный код на C#.
0
167 / 106 / 30
Регистрация: 19.01.2013
Сообщений: 847
17.05.2013, 22:27  [ТС]
Ловим. Качаем. Выкладываем улучшенную версию. Не скупимся на "+1".
Вложения
Тип файла: rar обратная матрица.rar (53.0 Кб, 931 просмотров)
14
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.05.2013, 22:27
Помогаю со студенческими работами здесь

Обратная матрица
помогите, пожалуйста как найти обратную матрицу?

Обратная матрица
1 элемент считает а дальше нули(проверял по калькулятору 1 элемент сходиться) вот код using System; using System.Collections.Generic; ...

обратная матрица
помогите написать опрограмму обратной матрицы!!! плиз!!!! никак не получается

Жордановы исключения-обратная матрица
Вот написала код для нахождения обратной матрицы способом Жордановых исключений. РАБОТАЕТ, но как то не тааак.... Помогите пожалуйста..,...

Обратная матрица методом Гаусса, исправить код
Помогите пожалуйста..всю ночь просидел не могу найти ошибку,возвращает NaN- понимаю что идет деление нулей, но по идее там их не должно...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru