线性代数之一------低阶行列式的计算
首先我们来看一看计算行列式的意义:
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; }
好了,低阶行列式的计算我们就到这里了,下一篇我们来看看如何计算任意阶的行列式吧。