通过C#实现矩阵求逆-简单版

这篇具有很好参考价值的文章主要介绍了通过C#实现矩阵求逆-简单版。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

网上大部分C#实现矩阵求逆都比较复杂,现在在这里分享一种很好理解的矩阵求逆方法,而且可以适用于任何形式的可逆矩阵求逆,但是肯定运行效率不如其它的算法,正所谓鱼和熊掌不可兼得。

我们采用的是通过单位矩阵变换的这种方法来实现的,话不多说,下面解释实现原理。

将需要变化的矩阵与单位矩阵拼在一起形成增广矩阵。

A为需要求逆的矩阵,E为单位矩阵。

如图

c# 矩阵求逆,矩阵,线性代数,c#

 然后我们经过初等行列式变换,将增广矩阵左半部分变为单位矩阵,那么右半部分我们就可以得到A的逆矩阵,具体原理可以自行百度,这里就不再阐述原理了。

虽然我们通过手算可以轻易的进行初等行变换,知道通过调换两行来让计算更加简便,知道如何才能让除对角线元素都变为0,但是计算机想要实现我们灵活的思想似乎不太容易,所以此时我们想是否可以通过一种通用的行列式变换来达到目的。

我的想法是这样的,先让需要求逆的矩阵的左下部分变为零,之后再让右上部分变为零,这样似乎就可以实现我们的求逆了。

如图,按照以下逻辑进行变换,更高阶数的矩阵也可以使用同样的逻辑进行变换。

c# 矩阵求逆,矩阵,线性代数,c#

 此时我们发现右上角也可以用同样的逻辑进行变换,只不过用一个与之前相反的循环就可以了。

代码实现文章来源地址https://www.toymoban.com/news/detail-709257.html



//input_matrix应该为一个二维数组,如何创建二维数组这里不再阐述,请先将input_matrix变为二维数组
int row = input_matrix.GetLength(0);
int col = input_matrix.GetLength(1); //获取数组长度
double[,] temp_matrix = new double[1, col]; //创建一个临时数组,用以承接变量
            //消除左下元素
            for (int j = 0; j < col; j++)
            {
                for (int i = 0; i < row; i++) //两个循环来遍历整个数组
                {
                    if (i == j) //为了消除左下半元素,做一个元素位置的过滤,右上半元素不看
                    {
                        for (int item_i = i + 1; item_i < row; item_i++) //循环行
                        {
                            if (item_i == row)
                            {
                                continue; //边界判断,如果到达矩阵行边界,便跳出循环
                            }
                            else if (input_matrix[item_i, j] != 0) //如果下一行元素不为零,就开始进行行变换
                            {

                                double temp_value = input_matrix[item_i, j] / input_matrix[i, j]; //得到变换的倍数
                                for (int item_j = j; item_j < col; item_j++) //对同一行的每一列进行变换
                                {
                                    
                                    input_matrix[item_i, item_j] -= temp_value * input_matrix[i, item_j]; //对每一列乘以倍数以便进行行变换
                                    
                                }
else
                            {
                                //没有意义,单纯为了if语句的完整
                            }
                        }
                    }

                 }
             }

到了这里,关于通过C#实现矩阵求逆-简单版的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 用C#实现简单的线性回归

    最近注意到了NumSharp,想学习一下,最好的学习方式就是去实践,因此从github上找了一个用python实现的简单线性回归代码,然后基于NumSharp用C#进行了改写。 NumSharp(NumPy for C#)是一个在C#中实现的多维数组操作库,它的设计受到了Python中的NumPy库的启发。NumSharp提供了类似于

    2024年02月02日
    浏览(64)
  • 【线性代数】通过矩阵乘法得到的线性方程组和原来的线性方程组同解吗?

    如果你进行的矩阵乘法涉及一个线性方程组 Ax = b,并且你乘以一个可逆矩阵 M,且产生新的方程组 M(Ax) = Mb,那么这两个系统是等价的;它们具有相同的解集。这是因为可逆矩阵的乘法可以视为一个可逆的线性变换,不会改变方程解的存在性或唯一性。 换句话说,如果你将原

    2024年02月03日
    浏览(60)
  • c# 线性代数 克·施密特(Gram Schmidt)

            Gram-Schmidt 方法是一种用于将线性无关的向量集合转化为一组正交(垂直)的向量集合的数学技术。这个方法是在线性代数中常用的一种技术,用于处理向量空间中的正交化和标准化操作。Gram-Schmidt 方法的主要思想是,通过一系列的投影和减法操作,将原始向量集

    2024年02月22日
    浏览(39)
  • 线性代数感悟之4 通过增广矩阵查看解的情况上篇

    最近在看 liuyubobobo 的  线性代数 课,感觉很妙,有些感悟记录一下~~~ 通过增广矩阵查看解的情况: ------------------------------------------------------------------------------------------------------------------------------ 主元(首元)定义:非零行的第一个元素。 什么是阶梯形矩阵? 感性定义 :可

    2024年02月04日
    浏览(33)
  • C#简单的矩阵类并实现基本的矩阵运算

    在C#中,你可以通过创建自定义类或使用现有的库(如MathNet.Numerics)来实现矩阵计算。下面是一个简单的例子,说明如何创建一个简单的矩阵类并实现基本的矩阵运算。 首先,我们定义一个 Matrix 类来表示矩阵,并提供基本的矩阵操作,如加法、乘法和转置。 然后,你可以这

    2024年04月17日
    浏览(28)
  • pytorch入门2--数据预处理、线性代数的矩阵实现、求导

    数据预处理是指将原始数据读取进来使得能用机器学习的方法进行处理。 首先介绍csv文件: CSV 代表逗号分隔值(comma-separated values),CSV 文件就是使用逗号分隔数据的文本文件。 一个 CSV 文件包含一行或多行数据,每一行数据代表一个记录。每个记录包含一个或多个数值,

    2024年02月04日
    浏览(43)
  • Excel·VBA矩阵、求逆矩阵、解线性方程组

    vba内置函数MInverse可以计算矩阵的逆矩阵,《Office VBA 参考-WorksheetFunction.MInverse 方法 (Excel)》 初等变换法代码思路 对于一个3x3矩阵(下图3x3红色部分)右侧扩充单位矩阵(下图3x3黑色部分),abc为行号 从左往右依次将1-3列非左对角线部分的数值消为0:下图“第1次”将第1列消

    2024年02月06日
    浏览(67)
  • 线性代数:线性方程求解、矩阵的逆、线性组合、线性独立

    本文参考www.deeplearningbook.org一书第二章2.3 Identity and Inverse Matrices 2.4 Linear Dependence and Span 本文围绕 线性方程求解 依次介绍矩阵的逆、线性组合、线性独立等线性代数的基础知识点。 本文主要围绕求解线性方程展开,我们先把线性方程写出来,方程如下: 其中,是已知的;,

    2024年02月08日
    浏览(53)
  • 线性代数本质系列(一)向量,线性组合,线性相关,矩阵

    本系列文章将从下面不同角度解析线性代数的本质,本文是本系列第一篇 向量究竟是什么? 向量的线性组合,基与线性相关 矩阵与线性相关 矩阵乘法与线性变换 三维空间中的线性变换 行列式 逆矩阵,列空间,秩与零空间 克莱姆法则 非方阵 点积与对偶性 叉积 以线性变换

    2024年02月04日
    浏览(53)
  • 0203逆矩阵-矩阵及其运算-线性代数

    定义7 对于 n n n 阶矩阵A,如果有一个 n n n 阶矩阵B,使 A B = B A = E AB=BA=E A B = B A = E 则说矩阵A是可逆的,并把矩阵B称为A的逆矩阵,简称逆阵。 定理1 若矩阵A可逆,则 ∣ A ∣ ≠ 0 vert Avert not = 0 ∣ A ∣  = 0 证明: A 可逆,即有 A − 1 ,使得 A A − 1 = E ∣ A A − 1 ∣ = ∣ A

    2024年04月13日
    浏览(59)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包