矩阵的行列式怎么求?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了矩阵的行列式怎么求?相关的知识,希望对你有一定的参考价值。

参考技术A

A矩阵的行列式(determinant),用符号det(A)表示。

行列式在数学中,是由解线性方程组产生的一种算式其定义域为nxn的矩阵 A,取值为一个标量,写作det(A)或 | A | 。行列式可以看做是有向面积或体积。

扩展资料

性质

①行列式A中某行(或列)用同一数k乘,其结果等于kA。

②行列式A等于其转置行列式AT(AT的第i行为A的第i列)。

③若n阶行列式|αij|中某行(或列);行列式则|αij|是两个行列式的和,这两个行列式的第i行(或列),一个是b1,b2,…,bn;另一个是с1,с2,…,сn;其余各行(或列)上的元与|αij|的完全一样。

④行列式A中两行(或列)互换,其结果等于-A。 ⑤把行列式A的某行(或列)中各元同乘一数后加到另一行(或列)中各对应元上,结果仍然是A。

参考资料:行列式_百度百科

golang 矩阵乘法行列式求逆矩阵

package matrix

import (
    "math"
    "github.com/astaxie/beego"
)

type Matrix4 struct {
    Elements [16]float64 `json:"elements"`
}

type SQ struct {
    //矩阵结构
    M,N int            //m是列数,n是行数
    Data [][]float64
}

//矩阵定义
func (this*SQ)Set(m int,n int,data []float64) {
    //m是列数,n是行数,data是矩阵数据(从左到右由上到下填充)
    this.M=m
    this.N=n
    if len(data)!=this.M*this.N {
        beego.Debug("矩阵定义失败")
        return
    }else {
        k := 0
        if this.M*this.N == len(data){
            for i := 0; i < this.N; i++ {
                var tmpArr []float64
                for j := 0; j < this.M; j++ {
                    tmpArr = append(tmpArr, data[k])
                    k++
                }
                this.Data = append(this.Data, tmpArr)
            }
        }else {
            beego.Debug("矩阵定义失败")
            return
        }
    }
}
//a的列数和b的行数相等
//矩阵乘法
func Mul(a SQ,b SQ) [][]float64{
    if a.M==b.M {
        res := [][]float64{}
        for i:=0;i<a.M;i++ {
            t := []float64{}
            for j:=0;j<b.M;j++ {
                r := float64(0)
                for k:=0;k<a.M;k++ {
                    r += a.Data[i][k]*b.Data[k][j]
                }
                t = append(t, r)
            }
            res = append(res,t)
        }
        return res
    }else {
        beego.Debug("两矩阵无法进行相乘运算")
        return [][]float64{}
    }
    /*一个应用的例子
    a := [][]int{
        {1,2},
        {3,4},
        {5,6},
    }
    b := [][]int{
        {1,2,3},
        {3,4,1},
    }
    A := SQ{
        2,3,
        a,
    }
    B := SQ{
        3,2,
        b,
    }

    res := mul(A,B)
     */
}

//计算n阶行列式(N=n-1)
func Det(Matrix [][]float64,N int) float64 {
    var T0,T1,T2,Cha int
    var Num float64
    var B [][]float64

    if N>0 {
        Cha=0
        for i := 0; i < N; i++ {
            var tmpArr []float64
            for j := 0; j < N; j++ {
                tmpArr = append(tmpArr, 0)
            }
            B = append(B, tmpArr)
        }
        Num=0
        for T0=0;T0<=N;T0++{    //T0循环
            for T1=1;T1<=N;T1++ {    //T1循环
                for T2=0;T2<=N-1;T2++ {    //T2循环
                    if T2==T0 {
                        Cha = 1
                    }
                    B[T1-1][T2]=Matrix[T1][T2+Cha]
                }//T2循环
                Cha=0
            }//T1循环
            Num=Num+Matrix[0][T0]*Det(B,N-1)*math.Pow(-1,float64(T0))
        }//T0循环
        return Num
    }else if N==0 {
        return Matrix[0][0]
    }
    return 0
}

//矩阵求逆(N=n-1)
func Inverse(Matrix [][]float64,N int) (MatrixC [][]float64) {
    var T0,T1,T2,T3 int
    var B [][]float64
    for i := 0; i < N; i++ {
        var tmpArr []float64
        for j := 0; j < N; j++ {
            tmpArr = append(tmpArr, 0)
        }
        B = append(B, tmpArr)
    }
    Chay := 0
    Chax := 0
    var add float64
    add = 1/Det(Matrix,N)
    for T0=0;T0<=N;T0++{
        for T3=0;T3<=N;T3++{
            for T1=0;T1<=N-1;T1++{
                if T1<T0 {
                    Chax = 0
                }else {
                    Chax = 1
                }
                for T2=0;T2<=N-1;T2++{
                    if T2<T3 {
                        Chay = 0
                    }else{
                        Chay = 1
                    }
                    B[T1][T2]=Matrix[T1+Chax][T2+Chay]
                }//T2循环
            }//T1循环
            Det(B,N-1)
            MatrixC[T3][T0]=Det(B,N-1)*add*(math.Pow(-1, float64(T0+T3)))
        }
    }
    return MatrixC
}

 

以上是关于矩阵的行列式怎么求?的主要内容,如果未能解决你的问题,请参考以下文章

矩阵怎么求行列式

初等矩阵的行列式怎么求?

eigen怎么表示矩阵的行列式

如何用c语言来求一个四阶行列式的值

怎么理解海森矩阵和雅可比矩阵

LaTeX怎么输入行列较多的矩阵