C++ 多階行列式求解
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
double GaussElimination2UTM(double* matrix, int dimension){
????double sign=1;
????double temp;
????for(int cnt1=0; cnt1<dimension; cnt1++){
????????//在此引入置換操作,如果主元很?。ㄐ∮?.001)那么進(jìn)行行交換,此操作在行列式中引入了負(fù)號,消元函數(shù)返回行列式由于置換操作需要加入的符號
????????for(int cnt2=cnt1+1; cnt2<dimension; cnt2++){
????????????if(abs(matrix[cnt1*dimension+cnt1])>1e-3) break;
????????????for(int cnt3=0; cnt3<dimension; cnt3++){
????????????????temp=matrix[cnt1*dimension+cnt3];
????????????????matrix[cnt1*dimension+cnt3]=matrix[cnt2*dimension+cnt3];
????????????????matrix[cnt2*dimension+cnt3]=temp;
????????????}
????????????sign*=-1;
????????}
????????for(int cnt2=cnt1+1; cnt2<dimension; cnt2++){
????????????for(int cnt3=dimension-1; cnt3>=cnt1; cnt3--){
????????????????matrix[cnt2*dimension+cnt3] += -1*matrix[cnt1*dimension+cnt3]*matrix[cnt2*dimension+cnt1]/matrix[cnt1*dimension+cnt1];
std::cout<<matrix[cnt2*dimension+cnt3]<<"="<<matrix[cnt1*dimension+cnt3]<<"*"<<matrix[cnt2*dimension+cnt1]<<"/"<<matrix[cnt1*dimension+cnt1]<<std::endl;
????????????}
????????}
????}
????return sign;
}
double Determinant(double* matrix, int dimension){
????double determinant=1;
????determinant=GaussElimination2UTM(matrix, dimension);
std::cout<<"------------------------"<<std::endl;
????for(int cnt=0; cnt<dimension; cnt++){
????????determinant *= matrix[cnt*dimension+cnt];
for(int jfd=0;jfd<dimension;jfd++){
std::cout<<","<<matrix[cnt*dimension+jfd];
}
std::cout<< std::endl;
????}
????return determinant;
}
int main(){
????int dimension = 6;
????double matrix[100]={
2,3,4,5,6,7,
10,9,13,14,15,16,
21,11,2,12,1,3,
4,5,7,9,3,2,
31,21,31,5,11,16,
4,2,8,9,4,8
};
????cout << Determinant(matrix, dimension) << '\n';
????return 0;
}