1. package matrix
  2.  
  3. import (
  4. "math"
  5. "github.com/astaxie/beego"
  6. )
  7.  
  8. type Matrix4 struct {
  9. Elements [16]float64 `json:"elements"`
  10. }
  11.  
  12. type SQ struct {
  13. //矩阵结构
  14. M,N int //m是列数,n是行数
  15. Data [][]float64
  16. }
  17.  
  18. //矩阵定义
  19. func (this*SQ)Set(m int,n int,data []float64) {
  20. //m是列数,n是行数,data是矩阵数据(从左到右由上到下填充)
  21. this.M=m
  22. this.N=n
  23. if len(data)!=this.M*this.N {
  24. beego.Debug("矩阵定义失败")
  25. return
  26. }else {
  27. k := 0
  28. if this.M*this.N == len(data){
  29. for i := 0; i < this.N; i++ {
  30. var tmpArr []float64
  31. for j := 0; j < this.M; j++ {
  32. tmpArr = append(tmpArr, data[k])
  33. k++
  34. }
  35. this.Data = append(this.Data, tmpArr)
  36. }
  37. }else {
  38. beego.Debug("矩阵定义失败")
  39. return
  40. }
  41. }
  42. }
  43. //a的列数和b的行数相等
  44. //矩阵乘法
  45. func Mul(a SQ,b SQ) [][]float64{
  46. if a.M==b.M {
  47. res := [][]float64{}
  48. for i:=0;i<a.M;i++ {
  49. t := []float64{}
  50. for j:=0;j<b.M;j++ {
  51. r := float64(0)
  52. for k:=0;k<a.M;k++ {
  53. r += a.Data[i][k]*b.Data[k][j]
  54. }
  55. t = append(t, r)
  56. }
  57. res = append(res,t)
  58. }
  59. return res
  60. }else {
  61. beego.Debug("两矩阵无法进行相乘运算")
  62. return [][]float64{}
  63. }
  64. /*一个应用的例子
  65. a := [][]int{
  66. {1,2},
  67. {3,4},
  68. {5,6},
  69. }
  70. b := [][]int{
  71. {1,2,3},
  72. {3,4,1},
  73. }
  74. A := SQ{
  75. 2,3,
  76. a,
  77. }
  78. B := SQ{
  79. 3,2,
  80. b,
  81. }
  82.  
  83. res := mul(A,B)
  84. */
  85. }
  86.  
  87. //计算n阶行列式(N=n-1)
  88. func Det(Matrix [][]float64,N int) float64 {
  89. var T0,T1,T2,Cha int
  90. var Num float64
  91. var B [][]float64
  92.  
  93. if N>0 {
  94. Cha=0
  95. for i := 0; i < N; i++ {
  96. var tmpArr []float64
  97. for j := 0; j < N; j++ {
  98. tmpArr = append(tmpArr, 0)
  99. }
  100. B = append(B, tmpArr)
  101. }
  102. Num=0
  103. for T0=0;T0<=N;T0++{ //T0循环
  104. for T1=1;T1<=N;T1++ { //T1循环
  105. for T2=0;T2<=N-1;T2++ { //T2循环
  106. if T2==T0 {
  107. Cha = 1
  108. }
  109. B[T1-1][T2]=Matrix[T1][T2+Cha]
  110. }//T2循环
  111. Cha=0
  112. }//T1循环
  113. Num=Num+Matrix[0][T0]*Det(B,N-1)*math.Pow(-1,float64(T0))
  114. }//T0循环
  115. return Num
  116. }else if N==0 {
  117. return Matrix[0][0]
  118. }
  119. return 0
  120. }
  121.  
  122. //矩阵求逆(N=n-1)
  123. func Inverse(Matrix [][]float64,N int) (MatrixC [][]float64) {
  124. var T0,T1,T2,T3 int
  125. var B [][]float64
  126. for i := 0; i < N; i++ {
  127. var tmpArr []float64
  128. for j := 0; j < N; j++ {
  129. tmpArr = append(tmpArr, 0)
  130. }
  131. B = append(B, tmpArr)
  132. }
  133. Chay := 0
  134. Chax := 0
  135. var add float64
  136. add = 1/Det(Matrix,N)
  137. for T0=0;T0<=N;T0++{
  138. for T3=0;T3<=N;T3++{
  139. for T1=0;T1<=N-1;T1++{
  140. if T1<T0 {
  141. Chax = 0
  142. }else {
  143. Chax = 1
  144. }
  145. for T2=0;T2<=N-1;T2++{
  146. if T2<T3 {
  147. Chay = 0
  148. }else{
  149. Chay = 1
  150. }
  151. B[T1][T2]=Matrix[T1+Chax][T2+Chay]
  152. }//T2循环
  153. }//T1循环
  154. Det(B,N-1)
  155. MatrixC[T3][T0]=Det(B,N-1)*add*(math.Pow(-1, float64(T0+T3)))
  156. }
  157. }
  158. return MatrixC
  159. }

golang 矩阵乘法、行列式、求逆矩阵的更多相关文章

  1. hdu2371 矩阵乘法(求序列位置改变m次后的序列)

    题意:       给你一个字符串,然后让你执行m次操作,每次操作把当前的字符串映射到他给你的位置序列的位置,比如给的是 3 1 2,第一步就是把原来的3的位置的字母变到1的位置,1的变到2的位置,2 ...

  2. Scout YYF I POJ - 3744【矩阵乘法优化求概率】

    题意: 一条路上有 $n$ 个地雷,YYF 从位置 $1$ 出发,走一步的概率为 $p$,走两步的概率是 $(1-p)$.求 YYF 能顺利通过这条路的概率. 数据范围: $1\leq n \leq ...

  3. 数学(矩阵乘法):HDU 4565 So Easy!

    So Easy! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  4. 【poj3070】矩阵乘法求斐波那契数列

    [题目描述] 我们知道斐波那契数列0 1 1 2 3 5 8 13…… 数列中的第i位为第i-1位和第i-2位的和(规定第0位为0,第一位为1). 求斐波那契数列中的第n位mod 10000的值. [ ...

  5. ☆ [HDU2157] How many ways?? 「矩阵乘法求路径方案数」

    传送门:>Here< 题意:给出一张有向图,问从点A到点B恰好经过k个点(包括终点)的路径方案数 解题思路 一道矩阵乘法的好题!妙哉~ 话说把矩阵乘法放在图上好神奇,那么跟矩阵唯一有关的就 ...

  6. LOJ.6074.[2017山东一轮集训Day6]子序列(DP 矩阵乘法)

    题目链接 参考yww的题解.本来不想写来但是他有一些笔误...而且有些地方不太一样就写篇好了. 不知不觉怎么写了这么多... 另外还是有莫队做法的...(虽然可能卡不过) \(60\)分的\(O(n^ ...

  7. C++中计算矩阵的行列式

    使用eigen库: 求行列式: #include <iostream> #include <Eigen/Dense> using namespace std; using na ...

  8. 洛谷P7112 行列式求值

    行列式求值 这是一个让你掉头发的模板题 行列式的定义 行列式 (\(\texttt{Determinant}\)) 是一个函数定义,取值是一个标量. 对一个 \(n\times n\) 的矩阵 \(A ...

  9. CH Round #30 摆花[矩阵乘法]

    摆花 CH Round #30 - 清明欢乐赛 背景及描述 艺术馆门前将摆出许多花,一共有n个位置排成一排,每个位置可以摆花也可以不摆花.有些花如果摆在相邻的位置(隔着一个空的位置不算相邻),就不好看 ...

随机推荐

  1. codefroces 7C

    C. Line time limit per test 1 second memory limit per test 256 megabytes input standard input output ...

  2. C# 数据类型(3)

    动态类型 dynamic types 动态类型是后来引进的,他其实是一个static type,但是不像其他的静态类型,编译器不会检查你到底是啥类型(也不会检查你能不能去call某个'method') ...

  3. SPOJ LCS Longest Common Substring(后缀自动机)题解

    题意: 求两个串的最大\(LCS\). 思路: 把第一个串建后缀自动机,第二个串跑后缀自动机,如果一个节点失配了,那么往父节点跑,期间更新答案即可. 代码: #include<set> # ...

  4. AbstractQueuedSynchronizer的使用和juc里的相关类的解析

    对AQS进行解析后,先来实现两个简单的基于AQS的类,然后再解析juc里基于AQS构造的类. 1.基于AQS的类的示例 首先先看这个类,这个类是<Java并发编程实战>的一个示例,AQS源 ...

  5. Flutter Widgets

    Flutter Widgets Flutter 组件 Syncfusion Flutter Widgets 所有组件均支持即装即用的 Android,iOS和 Web not free https:/ ...

  6. 图解 git workflow

    图解 git workflow 图解 git 工作流 git-flow https://www.git-tower.com/learn/git/ebook/cn/command-line/advanc ...

  7. IM & WebSockets

    IM & WebSockets WebSocket API https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API ht ...

  8. flutter & plugins

    flutter & plugins https://pub.dev/ https://juejin.im/post/5c206b4ff265da61327f52f4

  9. Free Serverless

    Free Serverless BFF https://cloud.google.com/functions/ 微服务 Function as a Servcie,FaaS https://segme ...

  10. PAUL ADAMS ARCHITECT :阿联酋和美国富人推动英国高端房地产市场

    来自2020年前三季度的数据显示,在英国高端市场上,由国际买家担保的抵押贷款交易数量最多,阿联酋目前处于领先地位.到目前为止,在2020年完成的所有交易中,有35%来自阿联酋. PAUL ADAMS ...