线性代数之一------低阶行列式的计算

首先我们来看一看计算行列式的意义:

  a11x1 + a12x2 = b1 (1)

  a21x1 + a22x2 = b2 (2)

这是一个二元一次方程组,正常情况下求解需要高斯消元:

  将 

    (1) * a22 - (2) * a12 

  得到 

    (a11a22 - a21a12)x1 = b1a22 - b2a12 

  移项得到 

    x1 = (b1a22 - b2a12) / (a11a22 - a21a12)

  然后x1代入(1)(2)式得到

    x2 = (b2a11 - b1a21) / (a11a12 - a21a12)

然后就是引入行列式了

        | b1 a12 |        | a11 b1 |         | a11 a12 |
  m1=   |        |   m2 = |        |     d = |         |
    | b2 a22 | | a21 b2 | | a21 a22 |

x1 = m1 / d 

x2 = m2 / d

其中

m1 = b1a22 - b2a12 

m2 = a11b2 - a21b1

d = a11a22 - a21a12

由此,我们得到了二阶行列式的定义:

      | a b |    
      |     | = a*d - b*c
      | c d |

然后就可以用这三个行列式来计算任何二元一次方程组了。

接下来是C++的实现:

/*

        Date: 2017-10-14
        
        Author: mtl6906

        Problem: 通过二阶行列式解二元一次方程
                        
*/

#include <cstdio>
using namespace std;
/*
        
        Function: det2

        Parameter: int ,int ,int ,int

        Return: int
 
*/
double det2(double a,double b,double c,double d){

        return a * d - b * c;

}
/*

        Function: func

        Parameter:int ,int ,int &,int &

        Return: bool

*/
bool func(double a[][2],double b[],double &x1,double &x2){

        x1 = det2(b[0],a[0][1],b[1],a[1][1]);

        x2 = det2(a[0][0],b[0],a[1][0],b[1]);

        if(x1 == x2){

                return false;

        }

        int t = det2(a[0][0],a[0][1],a[1][0],a[1][1]);

        x1 = x1 / t;

        x2 = x2 / t;

        return true;

}

 

好了,低阶行列式的计算我们就到这里了,下一篇我们来看看如何计算任意阶的行列式吧。

  

posted @ 2017-10-14 21:39  mtl6906  阅读(892)  评论(0编辑  收藏  举报