欢迎光临散文网 会员登陆 & 注册

C++ 多阶行列式求解

2023-07-22 08:39 作者:魔术iT  | 我要投稿

#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++){

        //在此引入置换操作,如果主元很小(小于0.001)那么进行行交换,此操作在行列式中引入了负号,消元函数返回行列式由于置换操作需要加入的符号

        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;

}



C++ 多阶行列式求解的评论 (共 条)

分享到微博请遵守国家法律