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

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

Войти
Регистрация
Восстановить пароль
 
Resume
129 / 120 / 43
Регистрация: 08.11.2013
Сообщений: 703
Записей в блоге: 5
#1

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

13.04.2014, 00:37. Просмотров 1175. Ответов 5
Метки нет (Все метки)

Здравствуйте! Подскажите,пожалуйста, как можно найти алгебраическое дополнение в матрице(матричный метод,СЛАУ). Как находить дополнение я знаю, но как записать хз. Программирую на с++.

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

Матричный метод решения СЛАУ - C++
Здравствуйте уважаемые програмисты, не могу осилить данный метод, и в нете инфы очень мало, может у кого есть готовый исходник? Теория...

СЛАУ. Метод обратной матрицы, метод Гаусса, метод Крамера, метод Зейделя - C++
Помогите ребят. Не могу построить алгоритмы для этих методов Язык C++

Как найти алгебраическое дополнение? - Delphi
Доброго времени суток, у меня проблема с нахождением алгебраического дополения, не могу найти его, хотя само дополнение нашел. Создать...

Матричный метод решения СЛАУ - Pascal
Доброго времени суток. Нужно решить систему линейных уравнений с 4-мя переменными матричным способом. Долго искал, но с ничего общего...

Алгебраическое дополнение - Алгебра
Всем привет! Не могу разобраться, подскажите почему правильный ответ равен 3 а ни -3? Ведь в теории прописано что если сумма строки и...

СЛАУ ошибка в программе (решение слау метод Зейделя) - MathCAD
Доброе время суток помогите найти ошибку в программе (решение слау метод Зейделя)

5
Чумаков Антон
85 / 67 / 17
Регистрация: 07.03.2011
Сообщений: 168
13.04.2014, 01:08 #2
Здесь решены многие задачи из математики.
0
kiborgdelto
71 / 73 / 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; //возвращаем значение определителя
    }
1
Resume
129 / 120 / 43
Регистрация: 08.11.2013
Сообщений: 703
Записей в блоге: 5
13.04.2014, 13:34  [ТС] #4
а как сделать, чтобы находились дополнения всех элементов матрицы??
0
kiborgdelto
71 / 73 / 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; //возвращаем значение определителя
    }
1
Resume
129 / 120 / 43
Регистрация: 08.11.2013
Сообщений: 703
Записей в блоге: 5
14.04.2014, 00:32  [ТС] #6
Благодарю за ответы!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.04.2014, 00:32
Привет! Вот еще темы с ответами:

Написать три алгоритма решения СЛАУ: Метод прогонки, метод квадратных корней, метод вращений - C#
Начал писать курсовую. Нужно написать три алгоритма решения СЛАУ: прогонки, квадратных корней, вращений. С методом прогонки более менее...

Метод Гаусса и матричный метод - Алгебра
Доброго дня всем:) помогите пожалуйста с решением системы:( Нужно решить эту систему 2 методами: 1) Метод Гаусса 2) Матричный метод ...

Матричный метод шифрования - PHP
Здравствуйте. Пример выберим матрицу А(4,4) открытый объект: Меня зовут Иван

Матричный метод решения системы - Matlab
Матричным методом решить системы.Что не так?? Не могу понять как правельно сделать. k=4; U=; L=; ??? Error using ==&gt; inv ...


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
14.04.2014, 00:32
Ответ Создать тему
Опции темы

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