标签:mes ++ return 线性 log 线性代数 div code std
首先我们来看一看计算行列式的意义:
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 Function: 通过二阶行列式解二元一次方程 Input: a11 a12 b1 a21 a22 b2 Output: x1 x2 */ #include <cstdio> using namespace std; int det2(int a,int b,int c,int d){ return a * d - b * c; } int main(){ int a[2][2],b[2]; while(true){ for(int i=0;i<2;i++){ if(scanf("%d%d%d",&a[i][0],&a[i][1],&b[i]) == -1) return 0; } int x1 = det2(b[0],a[0][1],b[1],a[1][1]); int x2 = det2(a[0][0],b[0],a[1][0],b[1]); int t = det2(a[0][0],a[0][1],a[1][0],a[1][1]); printf("%d %d\n",x1 / t,x2 / t); } return 0; }
好了,低阶行列式的计算我们就到这里了,下一篇我们来看看如何计算任意阶的行列式吧。
标签:mes ++ return 线性 log 线性代数 div code std
原文地址:http://www.cnblogs.com/mtl6906/p/7668663.html