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

Детерминант матрицы - C++

Восстановить пароль Регистрация
 
dyosick
 Аватар для dyosick
61 / 61 / 6
Регистрация: 25.08.2008
Сообщений: 178
08.04.2010, 22:41     Детерминант матрицы #1
Доброго времени суток всем, кто не прошёл мимо моей темы!
Ради интереса написал программу для нахождения определителя матриц с помощью рекурсивных функций. Всё в общем-то получилось: результаты проверял с помощью Matlab. Но возникли всё же вопросы:

1. Программа при порядке матрицы большем за 8 сразу же (при запуске) выбивает ошибку приложения по типу : "память не может быть read".

2. Память под новые матрицы выделял динамически. А вот с удалением прошу помочь, где поставить оператор delete [].

Заранее спасибо!!!

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
#include <iostream>
#include <cstdlib>
#include <fstream>
 
using namespace std;
 
void print(double **,const int);
double determinant(double** ,int );
int sign(const int);
double** createMatrix(double **,const int ,const int);
 
int main()
{
   int size=9;
   double **a=new double*[size];
   ofstream array("array.txt",ios::out);
   
   for(int k=0;k<size;k++)
      a[k]=new double[size];
   
   for(int i=0;i<size;i++)
      for(int j=0;j<size;j++)
      {   
         a[i][j]=rand()%10;
         array<<a[i][j]<<endl;
      }  
   print(a,size);
         
   cout<<"\nDeterm is "<<determinant(a,size)<<endl;
   
   system("pause");
   return 0;   
}
 
double determinant(double **b,int rank)
{
   if(rank==2)
      return b[0][0]*b[1][1]-b[0][1]*b[1][0];
   else
   {
      double temp_sum=0; 
       
      for(int i=0;i<rank;i++)  
         temp_sum=temp_sum+sign(i)*b[i][0]*determinant(createMatrix(b,i,rank),rank-1);   
         
      return temp_sum;
   }
}
 
inline int sign(const int k)
{
   if(k%2==0)
      return 1;
   else
      return -1;       
}
 
double** createMatrix(double **matrix,const int p,const int r)
{
   double **newMatrix=new double*[r-1];
   
   for(int k=0;k<r;k++)
      newMatrix[k]=new double[r-1];
      
   for(int i=0;i<r-1;i++)
   {        
        if(i<p) 
           for(int j=0;j<r-1;j++)
              newMatrix[i][j]=matrix[i][j+1];    
        else
            for(int j=0;j<r-1;j++)
              newMatrix[i][j]=matrix[i+1][j+1];   
   }  
   return newMatrix;
}
 
void print(double **matrix,const int size)
{
   for(int i=0;i<size;i++)
      for(int j=0;j<size;j++)
         cout<<matrix[i][j]<<(j==size-1 ? "\n": "  ");
         
   cout<<endl;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2010, 22:41     Детерминант матрицы
Посмотрите здесь:

C++ Работа с матрицей (нахождение детерминант)
Детерминант C++
C++ Странный цикл. Программа вычисляет детерминант по алгоритму Барейса.
в файл text.in записано матрицу NxN. Найти ее детерминант C++
C++ Две матрицы размером 5 * 5. Найти детерминант их суммы, а также наименьшие и наибольшие элементы
C++ Написать методы, позволяющие вычислить след матрицы, детерминант, транспонировать, обратить матрицу
C++ Вычислить детерминант матрицы размером 5x5, взятой из файла

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.04.2010, 05:21     Детерминант матрицы #2
C++
1
2
    for(int k=0;k<r;k++)
        newMatrix[k]=new double[r-1];
нет элемента newMatrix[r-1]

Цитата Сообщение от dyosick
где поставить оператор delete [].
надо DestroyMatrix(), так как там ещё строки
Yandex
Объявления
09.04.2010, 05:21     Детерминант матрицы
Ответ Создать тему
Опции темы

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