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

Как можно найти алгебраическое дополнение в матрице (матричный метод, СЛАУ) - C++

Восстановить пароль Регистрация
 
Resume
 Аватар для Resume
113 / 103 / 34
Регистрация: 08.11.2013
Сообщений: 586
Записей в блоге: 5
13.04.2014, 00:37     Как можно найти алгебраическое дополнение в матрице (матричный метод, СЛАУ) #1
Здравствуйте! Подскажите,пожалуйста, как можно найти алгебраическое дополнение в матрице(матричный метод,СЛАУ). Как находить дополнение я знаю, но как записать хз. Программирую на с++.

Заранее благодарю за любую помощь!!!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.04.2014, 00:37     Как можно найти алгебраическое дополнение в матрице (матричный метод, СЛАУ)
Посмотрите здесь:

СЛАУ метод Зейделя C++
C++ Метод Холецкого для решения Слау
C++ Метод простых итераций для СЛАУ
C++ Метод простых итераций для СЛАУ
C++ Как можно в матрице сложения, вычитания и умножения записать их размерность?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Чумаков Антон
85 / 67 / 17
Регистрация: 07.03.2011
Сообщений: 168
13.04.2014, 01:08     Как можно найти алгебраическое дополнение в матрице (матричный метод, СЛАУ) #2
Здесь решены многие задачи из математики.
kiborgdelto
70 / 72 / 27
Регистрация: 23.03.2011
Сообщений: 141
13.04.2014, 01:13     Как можно найти алгебраическое дополнение в матрице (матричный метод, СЛАУ) #3
как то так, строим матрицу заданного минора, вычисляем её определитель и умножаем на -1^(i+j), где i и j номер элемента алгебраическое дополнение которого ищем
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
#include <iostream>
#include <fstream>
#include <string>
#include <cmath>
using namespace std;
 
int determ(int** Arr, int size);  
int opred_mas(int **Arr, int size);       //функция задания элементов массива
 
int main()
{
setlocale(LC_ALL, "Russian");
int n,k,k1;
cout<<"введите порядок матрицы\n";
cin>>n;
 
int** a = new int *[n];
    for (int i = 0; i < n; i++)
        a[i] = new int [n];
opred_mas(a, n);
cout<<"введите номер элемента алгебраическое дополнение которого хотите найти\n";
cin>>k1>>k;
k--; k1--;
 
int** temp = new int *[n-1];
    for (int i = 0; i < n-1; i++)
        temp[i] = new int [n-1];
int s=0,s1=0;
for(int i=0;i<n;++i)//строим матрицу минора участвующего в вычислении алгебраисческого дополнения
    if(i!=k) 
    {
        s1=0;
        for(int j=0;j<n;++j)
            if(j!=k1) 
                {
                    temp[s][s1]=a[i][j];
                    s1++;
                }
 
        s++;
    }
    cout<<"\nМатрица полученного минора\n";
     for(int i=0;i<n-1;++i)
    {
        for(int j=0;j<n-1;++j)
        {
        
        cout<<temp[i][j]<<" ";
        }
        cout<<endl;
    }
    cout<<endl;
int res=0;
res=pow(-1.,k+1+k1+1)*determ(temp,n-1);
cout<<"Алгебраическое дополнение элемента А"<<k+1<<k1+1<<" равно\n"<<res<<endl;
 system("pause");
}
 
int opred_mas(int **Arr, int size)       //функция задания элементов массива
{
    srand(time(NULL));
    for(int i=0;i<size;++i)
    {
        for(int j=0;j<size;++j)
        {
        Arr[i][j]=rand()%10-5;
        cout<<Arr[i][j]<<" ";
        }
        cout<<endl;
    }
    cout<<endl;
    return 0; 
}
 
int determ(int** Arr, int size)         //функция поиска определителя
{
    int i,j;
    double det=0;       //переменная определителя
    int **matr;         //указатель
        if(size==1)     // 1-е условие , размер 1
        {
        det=Arr[0][0];
        }
            else if(size==2)    // 2-е условие , размер 2
            {
            det=Arr[0][0]*Arr[1][1]-Arr[0][1]*Arr[1][0];    //
            }
    else
    {
    matr=new int*[size-1]; //создание динамического массива
    for(i=0;i<size;++i)
        {
        for(j=0;j<size-1;++j)     
        {
        if(j<i)
          {
            matr[j]=Arr[j];
                   }
        else
            matr[j]=Arr[j+1];
               }
    det+=pow(-1., (i+j))*determ(matr, size-1)*Arr[i][size-1];    //подсчеты
          }
    delete[] matr;  //удаляем массив
    }
    return det; //возвращаем значение определителя
    }
Resume
 Аватар для Resume
113 / 103 / 34
Регистрация: 08.11.2013
Сообщений: 586
Записей в блоге: 5
13.04.2014, 13:34  [ТС]     Как можно найти алгебраическое дополнение в матрице (матричный метод, СЛАУ) #4
а как сделать, чтобы находились дополнения всех элементов матрицы??
kiborgdelto
70 / 72 / 27
Регистрация: 23.03.2011
Сообщений: 141
13.04.2014, 17:42     Как можно найти алгебраическое дополнение в матрице (матричный метод, СЛАУ) #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
добавть 2 цикла на изменение индексов дополнения которое ищем

Добавлено через 6 минут
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
#include <iostream>
#include <fstream>
#include <string>
#include <cmath>
using namespace std;
 
int determ(int** Arr, int size);  
int opred_mas(int **Arr, int size);       //функция задания элементов массива
 
int main()
{
setlocale(LC_ALL, "Russian");
int n,k,k1;
cout<<"введите порядок матрицы\n";
cin>>n;
 
int** a = new int *[n];
    for (int i = 0; i < n; i++)
        a[i] = new int [n];
opred_mas(a, n);
for (int index1=0;index1<n;index1++)
    for (int index2=0;index2<n;index2++)
    {
        k=index1; k1=index2;
        int** temp = new int *[n-1];
            for (int i = 0; i < n-1; i++)
                temp[i] = new int [n-1];
        int s=0,s1=0;
        for(int i=0;i<n;++i)//строим матрицу минора участвующего в вычислении алгебраисческого дополнения
            if(i!=k) 
            {
                s1=0;
                for(int j=0;j<n;++j)
                    if(j!=k1) 
                        {
                            temp[s][s1]=a[i][j];
                            s1++;
                        }
 
                s++;
            }
            cout<<"\nМатрица минора элемента A"<<k+1<<k1+1<<endl;
             for(int i=0;i<n-1;++i)
            {
                for(int j=0;j<n-1;++j)
                {
        
                cout<<temp[i][j]<<" ";
                }
                cout<<endl;
            }
            cout<<endl;
        int res=0;
        res=pow(-1.,k+1+k1+1)*determ(temp,n-1);
        cout<<"Алгебраическое дополнение элемента А"<<k+1<<k1+1<<" равно\n"<<res<<endl;
    cout<<endl;
    }
 system("pause");
}
 
int opred_mas(int **Arr, int size)       //функция задания элементов массива
{
    //srand(time(NULL));
    for(int i=0;i<size;++i)
    {
        for(int j=0;j<size;++j)
        {
        Arr[i][j]=rand()%10-5;
        cout<<Arr[i][j]<<" ";
        }
        cout<<endl;
    }
    cout<<endl;
    return 0; 
}
 
int determ(int** Arr, int size)         //функция поиска определителя
{
    int i,j;
    double det=0;       //переменная определителя
    int **matr;         //указатель
        if(size==1)     // 1-е условие , размер 1
        {
        det=Arr[0][0];
        }
            else if(size==2)    // 2-е условие , размер 2
            {
            det=Arr[0][0]*Arr[1][1]-Arr[0][1]*Arr[1][0];    //
            }
    else
    {
    matr=new int*[size-1]; //создание динамического массива
    for(i=0;i<size;++i)
        {
        for(j=0;j<size-1;++j)     
        {
        if(j<i)
          {
            matr[j]=Arr[j];
                   }
        else
            matr[j]=Arr[j+1];
               }
    det+=pow(-1., (i+j))*determ(matr, size-1)*Arr[i][size-1];    //подсчеты
          }
    delete[] matr;  //удаляем массив
    }
    return det; //возвращаем значение определителя
    }
Resume
 Аватар для Resume
113 / 103 / 34
Регистрация: 08.11.2013
Сообщений: 586
Записей в блоге: 5
14.04.2014, 00:32  [ТС]     Как можно найти алгебраическое дополнение в матрице (матричный метод, СЛАУ) #6
Благодарю за ответы!
Yandex
Объявления
14.04.2014, 00:32     Как можно найти алгебраическое дополнение в матрице (матричный метод, СЛАУ)
Ответ Создать тему
Опции темы

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