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
}
golang 矩阵乘法、行列式、求逆矩阵的更多相关文章
- hdu2371 矩阵乘法(求序列位置改变m次后的序列)
题意: 给你一个字符串,然后让你执行m次操作,每次操作把当前的字符串映射到他给你的位置序列的位置,比如给的是 3 1 2,第一步就是把原来的3的位置的字母变到1的位置,1的变到2的位置,2 ...
- Scout YYF I POJ - 3744【矩阵乘法优化求概率】
题意: 一条路上有 $n$ 个地雷,YYF 从位置 $1$ 出发,走一步的概率为 $p$,走两步的概率是 $(1-p)$.求 YYF 能顺利通过这条路的概率. 数据范围: $1\leq n \leq ...
- 数学(矩阵乘法):HDU 4565 So Easy!
So Easy! Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- 【poj3070】矩阵乘法求斐波那契数列
[题目描述] 我们知道斐波那契数列0 1 1 2 3 5 8 13…… 数列中的第i位为第i-1位和第i-2位的和(规定第0位为0,第一位为1). 求斐波那契数列中的第n位mod 10000的值. [ ...
- ☆ [HDU2157] How many ways?? 「矩阵乘法求路径方案数」
传送门:>Here< 题意:给出一张有向图,问从点A到点B恰好经过k个点(包括终点)的路径方案数 解题思路 一道矩阵乘法的好题!妙哉~ 话说把矩阵乘法放在图上好神奇,那么跟矩阵唯一有关的就 ...
- LOJ.6074.[2017山东一轮集训Day6]子序列(DP 矩阵乘法)
题目链接 参考yww的题解.本来不想写来但是他有一些笔误...而且有些地方不太一样就写篇好了. 不知不觉怎么写了这么多... 另外还是有莫队做法的...(虽然可能卡不过) \(60\)分的\(O(n^ ...
- C++中计算矩阵的行列式
使用eigen库: 求行列式: #include <iostream> #include <Eigen/Dense> using namespace std; using na ...
- 洛谷P7112 行列式求值
行列式求值 这是一个让你掉头发的模板题 行列式的定义 行列式 (\(\texttt{Determinant}\)) 是一个函数定义,取值是一个标量. 对一个 \(n\times n\) 的矩阵 \(A ...
- CH Round #30 摆花[矩阵乘法]
摆花 CH Round #30 - 清明欢乐赛 背景及描述 艺术馆门前将摆出许多花,一共有n个位置排成一排,每个位置可以摆花也可以不摆花.有些花如果摆在相邻的位置(隔着一个空的位置不算相邻),就不好看 ...
随机推荐
- Java之一个整数的二进制中1的个数
这是今年某公司的面试题: 一般思路是:把整数n转换成二进制字符数组,然后一个一个数: private static int helper1(int i) { char[] chs = Integer. ...
- 二、mycat基础知识、基本配置
官网 http://www.mycat.io/ Mycat 概要介绍 https://github.com/MyCATApache/Mycat-Server 入门指南 https://github.c ...
- image cache service
image cache service 图床 https://images.weserv.nl/ https://github.com/weserv/images meta & referre ...
- PHP & LAMP & WAMP
PHP & LAMP & WAMP https://github.com/xgqfrms/DataStructure/issues/7#issuecomment-430538438 h ...
- 如何在 macOS 上搭建 PHP 开发环境
如何在 macOS 上搭建 PHP 开发环境 Linux, Nginx, MySQL, PHP $ php --version $ php -v # PHP 7.3.11 (cli) (built: ...
- CSS3 & Grid Layout All In One
CSS3 & Grid Layout All In One W3C https://www.w3.org/TR/css-grid-1/ Grid Layout is a new layout ...
- 磁盘使用率/文件大小查看指南du & df
一.前言 磁盘使用率,文件大小查看是我们日常使用命令.这两个是配合使用的,磁盘使用率过高告警了,那么得找到对应的磁盘(df),然后找到对应磁盘下的哪个目录和文件占用了空间(du). df(Disk f ...
- Python_20行代码实现微信消息防撤回(简易版)
学习了一下如何用python实现微信消息的防撤回, 主要思路就是: 时时监控微信,将对方发送的消息缓存下来 如果对方撤回了消息,就将该缓存信息发送给文件传输助手 但其实这功能,基本上毫无意义,看到别人 ...
- 详解Go语言调度循环源码实现
转载请声明出处哦~,本篇文章发布于luozhiyun的博客: https://www.luozhiyun.com/archives/448 本文使用的go的源码15.7 概述 提到"调度&q ...
- python行与列显示不全
在显示数据框时添加以下代码 #显示所有列 pd.set_option('display.max_columns', None) #显示所有行 pd.set_option('display.max_ro ...