java矩阵相乘泛型,golang 矩阵乘法、行列式、求逆矩阵

package matrix

import ("math"

"github.com/astaxie/beego")

type Matrix4struct{

Elements [16]float64 `json:"elements"`

}

type SQstruct{//矩阵结构

M,N int //m是列数,n是行数

Data [][]float64

}//矩阵定义

func (this*SQ)Set(m int,n int,data []float64) {//m是列数,n是行数,data是矩阵数据(从左到右由上到下填充)

this.M=mthis.N=nif 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++{vartmpArr []float64for 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

t :=[]float64{}for j:=0;j

r := float64(0)for k:=0;k

r+= a.Data[i][k]*b.Data[k][j]

}

t=append(t, r)

}

res=append(res,t)

}returnres

}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

varNum float64varB [][]float64if N>0{

Cha=0

for i := 0; i < N; i++{vartmpArr []float64for 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循环

returnNum

}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

varB [][]float64for i := 0; i < N; i++{vartmpArr []float64for j := 0; j < N; j++{

tmpArr= append(tmpArr, 0)

}

B=append(B, tmpArr)

}

Chay := 0Chax := 0

varadd 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

Chax= 0}else{

Chax= 1}for T2=0;T2<=N-1;T2++{if T2

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)))

}

}returnMatrixC

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值