矩阵的行列式怎么求?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了矩阵的行列式怎么求?相关的知识,希望对你有一定的参考价值。
参考技术AA矩阵的行列式(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 }
以上是关于矩阵的行列式怎么求?的主要内容,如果未能解决你的问题,请参考以下文章