首页 / GO / golang 矩阵乘法、行列式、求逆矩阵
golang 矩阵乘法、行列式、求逆矩阵
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了golang 矩阵乘法、行列式、求逆矩阵,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2344字,纯文字阅读大概需要4分钟。
内容图文
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 := 0ifthis.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 intvar Num float64 var B [][]float64 if N>0 { Cha=0for i := 0; i < N; i++ { var tmpArr []float64 for j := 0; j < N; j++ { tmpArr = append(tmpArr, 0) } B = append(B, tmpArr) } Num=0for 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 }elseif N==0 { return Matrix[0][0] } return0 } //矩阵求逆(N=n-1) func Inverse(Matrix [][]float64,N int) (MatrixC [][]float64) { var T0,T1,T2,T3 intvar 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 := 0var 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 }
原文:https://www.cnblogs.com/zheng123/p/9648858.html
内容总结
以上是互联网集市为您收集整理的golang 矩阵乘法、行列式、求逆矩阵全部内容,希望文章能够帮你解决golang 矩阵乘法、行列式、求逆矩阵所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。