码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-10-14 22:37:59      阅读:258      评论:0      收藏:0      [点我收藏+]

标签: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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!