napisałam taki program obliczający wyznacznik macierzy, ale wyznaczniki są obliczane źle, czy ktoś mógłby mi powiedzieć w którym miejscu jest błąd? Wyznacznik jest mi potrzebny do większego programu i zależy mi, aby był obliczany właśnie metodą Laplaca...
Kod: Zaznacz cały
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <time.h>
using namespace std;
// funkcja wyznacznik
long double det(int stopien, int wiersz, int *wk, double *A)
{
int i,j,k,r;
int * kolumny = new int[stopien]; // wektor kolumn dla podmacierzy
long double suma;
if(stopien == 1)
return A[wiersz*stopien + wk[0]];
else
{
suma = 0; r = 1;
for(i = 0; i < stopien; i++)
{
k = 0;
for(j = 0; j < stopien - 1; j++)
{
if(k == i) k++;
kolumny[j] = wk[k++];
}
suma += r * A[wiersz*stopien + wk[i]] * det(stopien - 1, wiersz + 1, kolumny, A);
r = -r;
}
return suma;
}
}
// Program g³ówny
int main()
{
int i,j,n,m,p;
cout << "Podaj rozmiar macierzy A = "; //podanie rozmiaru
cin >> m;
p=m*m;
double * A = new double[p];
cout << "Podaj elementy macierzy A =
"; //wczytanie macierzy
for(i = 0; i < m; i++)
for(j = 0; j < m; j++) cin >> A[i * m + j];
cout << endl;
int *nk = new int[m]; // wektor kolumn
cout << setprecision(0)
<< fixed;
cout << "Wprowadzona macierz to:
";
for(i = 0; i < m; i++)
{
for(j = 0; j < m; j++) cout << A[i * m + j] << " ";
cout << endl;
}
// Inicjujemy wektor kolumn
for(i = 0; i < m; i++) nk[i] = i;
cout << "Wprowadzona wektor kolumn to:
";
for(i = 0; i < m; i++) {cout << nk[i] << " ";
cout << endl;} //czyli rozpatruje wektor 0 i 1
// Wyliczamy wyznacznik i wypisujemy
cout << "det A = " << det(m, 0, nk, A);
system("pause");
return 0;
}