C#矩阵求逆
private double[,] ReverseMatrix( double[,] dMatrix, int Level )
{
double dMatrixValue = MatrixValue( dMatrix, Level );
if( dMatrixValue == ) return null; double[,] dReverseMatrix = new double[Level,*Level];
double x, c;
// Init Reverse matrix
for( int i = ; i < Level; i++ )
{
for( int j = ; j < * Level; j++ )
{
if( j < Level )
dReverseMatrix[i,j] = dMatrix[i,j];
else
dReverseMatrix[i,j] = ;
} dReverseMatrix[i,Level + i ] = ;
} for( int i = , j = ; i < Level && j < Level; i++, j++ )
{
if( dReverseMatrix[i,j] == )
{
int m = i;
for( ; dMatrix[m,j] == ; m++ );
if( m == Level )
return null;
else
{
// Add i-row with m-row
for( int n = j; n < * Level; n++ )
dReverseMatrix[i,n] += dReverseMatrix[m,n];
}
} // Format the i-row with "1" start
x = dReverseMatrix[i,j];
if( x != )
{
for( int n = j; n < * Level; n++ )
if( dReverseMatrix[i,n] != )
dReverseMatrix[i,n] /= x;
} // Set 0 to the current column in the rows after current row
for( int s = Level - ; s > i;s-- )
{
x = dReverseMatrix[s,j];
for( int t = j; t < * Level; t++ )
dReverseMatrix[s,t] -= ( dReverseMatrix[i,t]* x );
}
} // Format the first matrix into unit-matrix
for( int i = Level - ; i >= ; i-- )
{
for( int j = i + ; j < Level; j++ )
if( dReverseMatrix[i,j] != )
{
c = dReverseMatrix[i,j];
for( int n = j; n < *Level; n++ )
dReverseMatrix[i,n] -= ( c * dReverseMatrix[j,n] );
}
} double[,] dReturn = new double[Level, Level];
for( int i = ; i < Level; i++ )
for( int j = ; j < Level; j++ )
dReturn[i,j] = dReverseMatrix[i,j+Level];
return dReturn;
} private double MatrixValue( double[,] MatrixList, int Level )
{
double[,] dMatrix = new double[Level, Level];
for( int i = ; i < Level; i++ )
for( int j = ; j < Level; j++ )
dMatrix[i,j] = MatrixList[i,j];
double c, x;
int k = ;
for( int i = , j = ; i < Level && j < Level; i++, j++ )
{
if( dMatrix[i,j] == )
{
int m = i;
for( ; dMatrix[m,j] == ; m++ );
if( m == Level )
return ;
else
{
// Row change between i-row and m-row
for( int n = j; n < Level; n++ )
{
c = dMatrix[i,n];
dMatrix[i,n] = dMatrix[m,n];
dMatrix[m,n] = c;
} // Change value pre-value
k *= (-);
}
} // Set 0 to the current column in the rows after current row
for( int s = Level - ; s > i;s-- )
{
x = dMatrix[s,j];
for( int t = j; t < Level; t++ )
dMatrix[s,t] -= dMatrix[i,t]* ( x/dMatrix[i,j] );
}
} double sn = ;
for( int i = ; i < Level; i++ )
{
if( dMatrix[i,i] != )
sn *= dMatrix[i,i];
else
return ;
}
return k*sn;
}
调用如下:
double[,] dMatrix = new double[,]{{,,},{,,},{,,}};
double[,] dReturn = ReverseMatrix( dMatrix, );
if( dReturn != null )
{
for( int i=; i < ; i++ )
Debug.WriteLine( string.Format( "{0} {1} {2}",
dReturn[i,], dReturn[i,],dReturn[i,] ) );
}
C#矩阵求逆的更多相关文章
- 矩阵求逆算法及程序实现(C++)
在做课题时,遇到了求多项式问题,利用了求逆方法.矩阵求逆一般使用简单的算法,还有快速算法 如全选主元高斯-约旦消元法,但本文程序主要写了简单的矩阵求逆算法定义法之伴随矩阵求逆公式如下,其中A可逆: , ...
- matrix矩阵求逆 与解方程模板 留做备用 (有bug,待补充)
// // main.cpp // 矩阵求逆 // // Created by 唐 锐 on 13-6-20. // Copyright (c) 2013年 唐 锐. All rights reser ...
- 矩阵求逆的几种方法总结(C++)
矩阵求逆运算有多种算法: 伴随矩阵的思想,分别算出其伴随矩阵和行列式,再算出逆矩阵: LU分解法(若选主元即为LUP分解法: Ax = b ==> PAx = Pb ==>LUx = Pb ...
- RLS自适应滤波器中用矩阵求逆引理来避免求逆运算
在RLS自适应滤波器的实现过程中,难免不涉及矩阵的求逆运算.而求逆操作双是非常耗时的,一个很自然的想法就是尽可能的避免直接对矩阵进行求逆运算.那么,在RLS自适应滤波器的实现中,有没有一种方法能避免直 ...
- 矩阵求逆·学习笔记 $\times$ [$LuoguP4783$]矩阵求逆
哦?今天在\(luogu\)上fa♂现了矩阵求逆的板子--于是就切了切. 那么我们考虑一个矩阵\(A\),它的逆矩阵记作\(A^{-1}\),其中对于矩阵这个群来讲,会有\(A \cdot A^{-1 ...
- 【题解】Matrix BZOJ 4128 矩阵求逆 离散对数 大步小步算法
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=4128 大水题一道 使用大步小步算法,把数字的运算换成矩阵的运算就好了 矩阵求逆?这么基础的线 ...
- BZOJ 4128 Matrix BSGS+矩阵求逆
题意:链接 方法: BSGS+矩阵求逆 解析: 这题就是把Ax=B(mod C)的A和B换成了矩阵. 然而别的地方并没有修改. 所以就涉及到矩阵的逆元这个问题. 矩阵的逆元怎么求呢? 先在原矩阵后接一 ...
- BZOJ 1444 [JSOI2009]有趣的游戏 (Trie图/AC自动机+矩阵求逆)
题目大意:给你$N$个长度相等且互不相同的模式串,现在有一个字符串生成器会不断生成字符,其中每个字符出现的概率是$p_{i}/q_{i}$,当生成器生成的字符串包含了某个模式串,则拥有该模式串的玩家胜 ...
- LG4783 【模板】矩阵求逆
P4783 [模板]矩阵求逆 题目描述 求一个$N\times N$的矩阵的逆矩阵.答案对$10^9+7$取模. 输入输出格式 输入格式: 第一行有一个整数$N$,代表矩阵的大小: 从第$2$行到第$ ...
- LUOGU P4783 【模板】矩阵求逆(高斯消元)
传送门 解题思路 用高斯消元对矩阵求逆,设\(A*B=C\),\(C\)为单位矩阵,则\(B\)为\(A\)的逆矩阵.做法是把\(B\)先设成单位矩阵,然后对\(A\)做高斯消元的过程,对\(B\)进 ...
随机推荐
- windows下安装MySql + navicat(图形化界面)
MySQL安装过程参考:https://www.cnblogs.com/ayyl/p/5978418.html navicat图形化界面安装过程参考:https://www.cnblogs.com/l ...
- 高并发的socket的高性能设计【转】
转自:https://blog.csdn.net/quincyfang/article/details/44654351 高性能数据传输系统的框架设计 1 引言 随着互联网和物联网的高速发展,使用网络 ...
- liunx之Centos6.8杀毒软件的安装
作者:邓聪聪 为了防止服务器中病毒,安装了类似与Windowns的杀毒软件Clanav,过程如下 首先下载clamav的软件包,官方下载地址为http://www.clamav.net/downloa ...
- python3+selenium入门13-操作cookie
可以把cookie理解为自己账户的身份证.因为http协议是无状态的,上一个请求和下一个请求没有关系.但是有时需要有关联.比如登录之后,才能进行操作这样的设置.这个就是cookie在起作用.登录成功时 ...
- 程序包管理dpkg、apt-get、服务端openssh-server与客户端Xshell设置及lrzsz安装使用
一.程序包管理器 dpkg.apt-get 1.dpkg 安装:sudo dpkg -i cmatrix_1.2a-5build3_amd64.deb 卸载:sudo dpkg -r cmatrix ...
- npm dev run 报错
解决办法: npm run dev --port 8088 Error: listen EACCES 0.0.0.0:8080at Object.exports._errnoException (ut ...
- VBS将本地的Excel数据导入到SQL Server中
VBS将本地的Excel数据导入到SQL Server中 高文龙关注0人评论1170人阅读2017-05-14 12:54:44 VBS将本地的Excel数据导入到SQL Server中 最近有个测试 ...
- Confluence 6 home 目录
Confluence Home 目录是存储 Confluence 信息,查找索引,页面附件的地方.其实 Home 目录也可以定义为数据目录. 找到 Home 目录 Confluence 的 home ...
- 第九单元 利用vi编辑器创建和编辑正文文件
vi编辑器简介 什么是vi vi编辑器的操作模式 vi编辑器的3种基本模式 在vi编辑器中光标的移动 移动光标位置的键与光标移动间的关系 进入插入模式 从命令行模式进入插入模式的命令 在命令行模式下 ...
- servlet 乱码解决方法
一. servlet 发送的html 页面中文乱码 解决方法, 1.加入如下代码 response.setCharacterEncoding("UTF-8"); 2.在html页面 ...