Przed Tobą jeszcze daleka droga:
Po pierwsze źle wczytujesz wektor wyrazów wolnych B - powinien mieć o jeden mniej element. Numerujesz tutaj od zera co zwiększa liczbę elementów o jeden.
Teraz zakładam, że rozwiązujesz to metodą Cramera.
Przede wszystkim musisz napisać funkcję która będzie obliczała wyznacznik dla dowolnej macierzy kwadratowej stopnia n np:
double calculateDet( const vector<vector<double>>& matrix )
{
double det {0.0};
if( matrix.size() == 1 ) return matrix[0][0];
if( matrix.size() == 2 ) return (matrix[0][0]*matrix[1][1] - matrix[0][1]*matrix[1][0]);
if( matrix.size() == 3 ) return (matrix[0][0]*(matrix[1][1]*matrix[2][2] - matrix[1][2]*matrix[2][1])
- matrix[1][0]*(matrix[0][1]*matrix[2][2] - matrix[1][2]*matrix[2][0])
+ matrix[2][0]*(matrix[0][1]*matrix[2][1] - matrix[1][1]*matrix[2][0]) );
// LE decomposition algorithm
const double eps = 1e-12;
vector<vector<double>> mirrorMatrix {matrix};
for( size_t k = 0 ; k < matrix.size() - 1 ; ++k )
{
if( abs(mirrorMatrix[k][k])<eps ) return 0;
for( size_t i = k + 1 ; i < matrix.size() ; ++i ) mirrorMatrix[i][k] /= mirrorMatrix[k][k];
for( size_t i = k + 1 ; i < matrix.size() ; ++i )
{
for( size_t j = k + 1 ; j < matrix.size() ; ++j ) mirrorMatrix[i][j] -= mirrorMatrix[i][k] * mirrorMatrix[k][j];
}
}
double result {0.0};
for( size_t index=0 ; index<matrix.size() ; ++index ) result += matrix[index][index];
return result;
}
Do przechowywania danych macierzy użyłem kontenera STL vector, gdyż użycie zwykłych tablic nie jest zalecane z wielu powodów zobacz
Następnie musisz podmienić każdą kolumnę macierzy współczynników A wektorem wyrazów wolnych B Zobacz. Zrobić to można używając funkcji getMatrix
vector<vector<double>> getMatrix( const vector<vector<double>>& A , const vector<double>& B , int column )
{
vector<vector<double>> newMatrix;
// Twoja implementacja
return newMatrix;
}
I teraz wystarczy już obliczyć wyznaczniki tak otrzymanych macierzy i podzielić je przez wyznacznik macierzy współczynników.