zoukankan      html  css  js  c++  java
  • 矩阵&&高斯消元

    矩阵运算:

    (A imes B)叫做(A)左乘(B),或者(B)右乘(A)

    行列式性质:

    (1.)交换矩阵的两行(列),行列式取相反数。
    (2.)某一行元素都( imes k),行列式值也( imes k)
    (3.)某一行加到另一行上,行列式值不变。
    (4.)矩阵某两行(列)元素分别成比例,行列式值为(0)
    (5.A+B=CRightarrow|A|+|B|=|C|)
    (6.)矩阵与转置矩阵行列式相等。
    对于方阵而言:
    (7.|A^ au|=|A|)
    (8.|AB|=|A||B|)

    矩阵的转置:

    (1.(A^ au)^ au=A)
    (2.(A+B)^ au=A^ au+B^ au)
    (3.(lambda A)^ au=lambda A^ au)
    (4.(AB)^ au=B^ au A^ au)

    余子式:

    (n)阶矩阵的余子式(M_{ij}=)矩阵(A)去掉第(i)行第(j)列的(n-1)阶矩阵行列式。
    代数余子式(A_{ij}=(-1)^{i+j}M_{ij})

    伴随矩阵:

    矩阵(A^*)的各项元素(a_{ij}=)矩阵(A)的代数余子式(A_{ij}),那么称(A^*)(A)的伴随矩阵,记作(A^*)

    逆矩阵:

    (1.)矩阵(A)可逆 等价于 (|A| e 0)
    (2.A^{-1}=frac 1 {|A|}A^*)(求伴随矩阵的(Gauss)算法)

    矩阵的秩:

    (k)阶子式:(k)(k)列,把交点元素按顺序组成(k)阶矩阵。
    非零子式:没有零行的子式。
    行阶梯矩阵:每一行首非零元素都在上一行非零元素的右面,列阶梯矩阵同理。
    最简形矩阵:行首非零元素为(0)的行阶梯矩阵。
    矩阵的秩:(R(A)=A)的最高阶非零子式的阶数,也是通过矩阵的初等变换((Gauss))把(A)变成行阶梯矩阵(或最简形矩阵)后的非零行个数。
    向量的旋转与矩阵:
    把向量表示成列矩阵(left(egin{matrix}x\yend{matrix} ight)),逆时针旋转向量( heta)角就是矩阵(left(egin{matrix}cos heta&-sin heta\sin heta&cos hetaend{matrix} ight))左乘向量列矩阵,另有(left(egin{matrix}cos heta&-sin heta\sin heta&cos hetaend{matrix} ight)^n)=(left(egin{matrix}cos~n heta&-sin~n heta\sin~n heta&cos~n hetaend{matrix} ight))

    模板:

    实数高斯消元:

        int gauss_float(){
        	for(int i=1;i<=n;i++){
        		bj=0;
        		for(int j=i;j<=n;j++)
        			if(fabs(a[j][i])>eps){bj=j;break;}
        		if(bj==0)	return 0;
    			for(int j=i;j<=n+1;j++)	swap(a[bj][j],a[i][j]);
        		for(int j=i+1;j<=n;j++){
        			double d=a[i][i]/a[j][i];
        			for(int k=i;k<=n+1;k++)
        				a[j][k]=a[j][k]*d-a[i][k];
    			}
    		}
    		for(int i=n;i>=1;i--){
    			ans[i]=a[i][n+1]/a[i][i];
    			for(int j=1;j<i;j++)	a[j][n+1]-=a[j][i]*ans[i];
    		}
            return 1;
        }
    

    行列式: 如果没有mod,把%mod去掉即可。

        int determinant(){
        	dete=1;
    		for(int i=1;i<=tot;i++){
        		for(int j=i+1;j<=tot;j++){
        			while(a[j][i]){
        				long long t=a[i][i]/a[j][i];
        				for(int k=i;k<=tot;k++){
        					a[i][k]=((a[i][k]-a[j][k]*t%mod)%mod+mod)%mod;
        					swap(a[i][k],a[j][k]);
    					}
    					dete=((-dete)%mod+mod)%mod;
    				}
    			}
    			if(a[i][i]==0)	return 0;
    			dete=((dete*a[i][i])%mod+mod)%mod;
    		}
    		return 1;
        }
    

    矩阵求逆:

    	int matrix_inv(){
    		for(int i=1;i<=n;i++){
    			bj=0;
    			for(int j=i;j<=n;j++)
    				if(a[j][i]!=0){bj=j;break;}
    			if(bj==0)	return 0;
    			for(int j=i;j<=n+n;j++)	swap(a[bj][j],a[i][j]);
    			long long INV=qpow(a[i][i],mod-2);
    			for(int j=i;j<=n+n;j++)	a[i][j]=a[i][j]*INV%mod;
    			for(int k=1;k<=n;k++){
    				if(k==i)	continue;
    				for(int j=i+1;j<=n+n;j++)
    					a[k][j]=((a[k][j]-a[k][i]*a[i][j]%mod)%mod+mod)%mod;
    				a[k][i]=0;
    			}
    		}
    		return 1;
    	}
    

    矩阵树定理:

    无向图:(度数矩阵-邻接矩阵)去掉任意一行任意一列的行列式=该无向图的生成树个数。
    有向图:(入度矩阵-邻接矩阵)去掉i行i列的行列式=以i为根(出发点)的外向树形图。
    (~~~~~~~~~~~~~)(出度矩阵-邻接矩阵)去掉i行i列的行列式=以i为根(到达点)的内向树形图。

  • 相关阅读:
    轻轻松松看懂Spring AOP源码
    centos7安装openjdk8
    使用fiddler做弱网测试
    测试术语-好东西要跟大家一块分享-2
    测试思想-好东西与大家分享-1
    session、token、cookie的区别
    接口测试和功能测试的区别
    常见bug解析-移动端
    接口测试的简介
    软件测试基本理论
  • 原文地址:https://www.cnblogs.com/Smeow/p/10582590.html
Copyright © 2011-2022 走看看