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

Определитель для больших матриц. - C++

Восстановить пароль Регистрация
 
USHЁL
 Аватар для USHЁL
0 / 0 / 0
Регистрация: 15.11.2009
Сообщений: 93
13.03.2011, 13:13     Определитель для больших матриц. #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
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
//#include
//nachojdenie determinanta matrix
#include <cstdlib>
#include <iostream>
 
 
using namespace std;
int* setMatrix(void);
void GetMatrix(int a[][], int b[][], int m, int i, int j);
int Determinant(int a[][], int n);
void show(int sm[][], int n );
 
//using namespace std;
int main()
{
         int det;
     int** bufMatrix;                          // dlya vozvrata iz funczii setMatrix 
     bufMatrix = setMatrix;
         cout<<endl;
     
         show(bufMatrix, )                         //prosmatrivaem to chto vernula setMatrix; vopros s razmernostu dlya show();
     det = Determinant(bufMatrix, );     //vopros s razmernostu dlya Determinant();
 
         cout<<"Determinant = "<< det <<endl;
         
        
                for(j = 0; j<Nj; j++)              //udalyau videlennuu v 'setMatrix' pamyat 
        {
            delete buffer[j];
        }
                delete [] buffer;
 
    system("PAUSE");
    return(0);
}
/////////////////////////////////////////////
int* setMatrix(void) 
{ 
    int i,j,Ni,Nj;
 
    cout<<"vvedite razmernost matrix: "<<endl;
    
     while(!(cin>>Ni))                            //proverka na pravilnost' vvoda
     {
          cin.clear();                            //ochistka vvoda
          while(cin.get() != '\n')                // proverayem,est' li chto-to eshe v vode
          continue;
     
        cout<<"Vvedite zcislo,a ne bukvu: "<<endl;
     }
    Nj = Ni;
   
      int** buffer = new int* [Ni];
      for(j = 0; j<Nj; j++)
      {
        buffer[j] = new int[Nj];
      }
 
    cout<<"vvedite znachenia v matrizcu\n";
    for(i = 0;i<Ni;i++)
    {
        for(j = 0;j<Nj;j++)
        {
            
            while(!(cin>>buffer[i][j]))          //proverka na pravilnost' vvoda
            {
                cin.clear();                         //ochistka vvoda
                while(cin.get() != '\n')          // proverayem,est' li chto-to eshe v vode
                 continue;
                
                cout<<"Vvedite zcislo,a ne bukvu: "<<endl;
            }
            
        }
    }
 
    return (buffer);                             //vozvrashaem zapolnenuu matrizcu
 
}//end setMatrix
 
 
void show(int arr_a[][], int Ni )                    //kak mojno ukazat' razmernost' v main  ne ponimau   
{
    Nj = Ni;
    cout<<"Matrizca: "<<endl;
    for(i = 0;i<Ni;i++)
    {
        for(j = 0;j<Nj;j++)
        {
            dec(cout);
            cout.width(11);
            cout.precision(10);
            cout<<arr_a[i][j]<<"|";
            
        }
        
      cout<<endl;
    }
}
 
void GetMatrix(int a[][], int b[][], int m, int i, int j)
{
    //vicherkivanie iz matrizy stroki i stolbza
    int ki,kj,di,dj;
    di = 0;
    for(ki = 1; ki < m-1; ki++)
    {
        if(ki==i)
            di = 1;
            dj = 0;
            for(kj = 1; kj < m-1; kj++)
            {
                if(kj == j)
                    dj = 1;
                
                b[ki][kj] = a[ki+di][ki+dj];
            }
    }
}
 
int Determinant(int a[][], int n)                     //vicheslenie opredelitelya matrizcy
{
    int i,j,d,k;
    int b[][];
    d = 0;
    k = 1;
    
    if(n<1)
    {
        cout<<"Determinant ne naiden. N = "<<n<<endl;
        return;
    }
    else if(n == 1)
    {
        d = a[1][1];
    }
    else if(n == 2)
    {
        d = a[1][1]*a[2][2] - a[2][1]*a[1][2];
    }
    else
    {
        for(i = 1;i<n;i++)
        {
            GetMatrix(a, b, n, i, 1);
            d = d + (k * a[i][1] * Determinant(b,n-1));
            k = -k;
        }
    }//end else
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.03.2011, 13:13     Определитель для больших матриц.
Посмотрите здесь:

функция для добавления матриц. C++
функции для квадратных матриц C++
C++ Сохранение матриц больших размеров в типизированный файл
C++ Умножение треугольных матриц«Методы обработки разреженных матриц»
C++ для вещественного массива 2х2 сумму элементов, больших максимального отрицательного.
Как вычислить определитель для двух разных матриц C++
Для каждой строки подсчитать количество элементов, больших заданного числа C++
Не работает для больших чисел C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему

Метки
матрицы, определитель
Опции темы

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