0 / 0 / 0
Регистрация: 13.12.2019
Сообщений: 3
1

Рекурсивное вычисление определителя матрицы разложением по указанному столбцу

07.05.2020, 15:57. Показов 3103. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как изменить код, чтобы определитель матрицы вычислялся правильно не только по первому столбцу разложения, а по любому указанному?

Само задание:
Рекурсивное вычисление определителя матрицы разложением по указанному столбцу по формуле:
Det A = Σ A[i][j] * D[i][j] (j = 1,2,…,n)
i=1
где A – матрица,
i – номер строки,
j – номер столбца,
A[i][j] – элемент матрицы,
D[i][j] – алгебраическое дополнение,
Det A – определитель.
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#include<iostream>
#include<stdlib.h>//рандомизатора
#include<time.h>//для правильной работы рандомизатора
#include <iomanip>
#include <windows.h>
char Row[11][11] = { "1  | " , "2  | " , "3  | " , "4  | " , "5  | " , "6  | " , "7  | ", "8  | ", "9  | ", "10 | " }; // нумерация строк
 
int Сol;    // для номера столбца
int NumberCol; //номер столбца разложения
using namespace std;//пространство имен
int n, m, N;
int Det;
 
 
void RandomNumber();
 
// Функция для получения алгебраического дополнения mat[p][q] в temp[][]. Н-текущий
// размер mat[][] 
void getCofactor(int** mat, int** temp, int p, int q, int n)
{
    int i = 0, j = 0;
 
    // Циклирование для каждого элемента матрицы
    for (int row = 0; row < n; row++)
    {
        for (int col = 0; col < n; col++)
        {
            // Копирование во временную матрицу только тех элементов
            // которые не находятся в данной строке и столбце
            if (row != p && col != q)
            {
 
                temp[i++][j] = mat[row][col];
 
 
                // Строка заполнена, поэтому увеличьте индекс столбца и
                // сброс индекса row
                if (i == n - 1)
                {
                    i = 0;
                    j++;
                }
            }
        }
    }
 
}
/*Рекурсивная функция для нахождения определителя матрицы.
n - текущее измерение mat[][]. */
int determinantOfMatrix(int** A, int n)
{
    int D = 0; // Инициализировать результат
 
    //  Базовый случай : если матрица содержит один элемент
    if (n == 1)
        return A[0][0];
    int** temp = new int* [n]; // Для хранения алгебраического дополнения
    for (int i = 0; i < n; i++)
        temp[i] = new int[n]; // столбцов
    int sign = 1;  // Для хранения множителя знаков
 
     // Итерация для каждого элемента первого столбца
    for (int f = 0; f < n; f++)
    {
        // Получение алгебраического дополнения mat[f][0] 
 
        getCofactor(A, temp, f, NumberCol, n);
 
        D += sign * A[f][NumberCol] * determinantOfMatrix(temp, n - 1);
 
        // термины должны быть добавлены с альтернативным знаком
        sign = -sign;
    }
 
    return D;
}
int main()//главная функция
{
    cout << "Введите количество строк и столбцов:" << "\n";
    cin >> n;
 
    cout << "Введите номер столбца разложения" << "\n";
    cin >> NumberCol;
 
    RandomNumber();
 
}
 
 
 
void RandomNumber() {
    srand(time(NULL));//для правильной работы рандомизатора
    cout << "Вывод полученной матрицы: " << "\n";
    // динамическое создание двумерного массива
    int** A = new int* [n]; // строк в массиве
    for (int i = 0; i < n; i++)
        A[i] = new int[n]; // столбцов
    //Нумерация столбцов
    cout << "___|";
    for (Сol = 1; Сol <= n; Сol++)
        cout << "___" << Сol;
    cout << endl;
    // заполнение массива и вывод на экран
    for (int i = 0; i < n; i++)
    {
        cout << Row[i];//Нумерация строк
        for (int j = 0; j < n; j++)
        {
            A[i][j] = rand() % 100;//заполняем в интервале 100
            cout << setw(3) << A[i][j] << ' ';// выводим сформированный массив
            
        }
 
        cout << "\n";
 
    }
    cout << endl;
    printf("Определитель матрицы: %d", determinantOfMatrix(A, n));
 
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.05.2020, 15:57
Ответы с готовыми решениями:

Вычисление определителя квадратной матрицы с разложением по первой строке
Здравствуйте, уважаемые форумчане. Мне в личку поступил запрос с просьбой подсказать, как можно...

Рекурсивное вычисление определителя
Не вычисляет определитель матрицы 13 на 13, тупо виснет. В чем может быть проблема? using...

Рекурсивное вычисление значения функции разложением в ряд Тейлора
Написать программу вычисления суммы n элементов ряда, полученного при разложении функции f(x),...

Рекурсивное нахождение определителя матрицы, нужны комментарии
Таков вопрос, брал на рассмотрение пример задачи &lt;&lt;Найти определитель матрицы&gt;&gt; алгоритм решения...

0
07.05.2020, 15:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.05.2020, 15:57
Помогаю со студенческими работами здесь

Вычисление определителя матрицы
Определитель Посчитать определитель заданной матрицы A....

Вычисление определителя матрицы
https://www.cyberforum.ru/lisp/thread932196.html package main import &quot;fmt&quot; var a =...

Вычисление определителя матрицы
Задание написано на фото. Массив задала и вывела, осталось вычислить по формулам и сделать рекурсию...

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

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

Вычисление определителя матрицы
Как вычислить определитель матрицы при i от 0 до n-1 j от 0 до n-1? uses crt; const l=10; {...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru