• 用递归方法计算行列式的值


    这里给出采用递归方式计算一个n阶的行列式的方法,行列式的值存入vector< vector<double> >类型的二维容器中,这里设定按第一行依次展开计算第一行每个元素的代数余子式。

    /****************************** Module Header ******************************
    Module Name:  TestEverything.cpp
    Project:      Code Practice
    Copyright     The essence of knowledge is sharing!
    Written by:   NobodyZhou
    Date:         July 19, 2015
      
    This source is a method to caculate det(A) by recursion. This algorithm to be achieved in C++.
    	
    ***************************************************************************/
    
    #include <algorithm>
    #include <iostream>
    #include <cmath>
    #include <vector>
    using namespace std;
    
    // 求 aij 的代数余子式
    vector< vector<double> > Cofactor(vector< vector<double> > vecDet_ij, int i, int j)
    {
        int k;
        vector< vector<double> > vecReturn;
        vector< vector<double> >::iterator veck;
        // vector<double>::iterator vecl;
    
        // 初始化二维容器 vecReturn
        k = 0;
        for (veck=vecDet_ij.begin(); veck<vecDet_ij.end(); veck++)
        {
            if ((veck - vecDet_ij.begin()) != i)
            {
                vecReturn.push_back(*veck); // 加入除第 i 行外的所有行
                // vecl = (*veck).begin() + j; // 找到该行的第 j 个元素, 删除
                vecReturn[k].erase(vecReturn[k].begin() + j);
                k++;
            }
        }
        return vecReturn;
    }
    
    // 计算行列式的值, 采用递归
    double det_Array(vector< vector<double> > vecDet)
    {
        int i;
        double Sum = 0.0;
        vector< vector<double> >::iterator vec_Row = vecDet.begin();
        vector<double>::iterator vec_Column = (*vec_Row).begin();
        if (vecDet.size() == 1)
        {
            return *vec_Column;
        }
        else
        {
            i = 0;
            for (; vec_Column < (*vec_Row).end(); vec_Column++)
            {
                // 依次展开第一行的元素,递归计算
                Sum = Sum + pow(-1.0, i) * (*vec_Column) * det_Array( Cofactor(vecDet, 0, i++) );
            }
            return Sum;
        }
    }
    
    void main()
    {
        system("color F1");
        
        // 计算示例
        vector< vector<double> > vecDetTest1;
        vector<double> A, B, C;
        
        A.push_back(-3.0); A.push_back(1.0); A.push_back(-2.0);
        B.push_back(1.3); B.push_back(-2.0); B.push_back(4.0);
        C.push_back(1.2); C.push_back(1.2); C.push_back(3.0);
        vecDetTest1.push_back(A);
        vecDetTest1.push_back(B);
        vecDetTest1.push_back(C);
    
        cout << "|vecDetTest1| = " << det_Array(vecDetTest1) << endl;
    
    	system("pause");
    }
    
  • 相关阅读:
    Linux下编译LibCURL
    Linux下编译OpenSSL
    Linux下编译UnixODBC
    Linux下编译Boost
    MySQL存储引擎【InnoDB、MyISAM、Memory】
    MySQL数据库MyISAM和InnoDB存储引擎的比较
    MySQL存储引擎MyISAM与InnoDB的优劣
    14款经典的MySQL客户端软件
    MySQL 数据类型
    MySQL数据库的基本数据类型
  • 原文地址:https://www.cnblogs.com/nobodyzhou/p/5521352.html
Copyright © 2020-2023  润新知