`

矩阵的各种运算(加、减、乘、逆、行列式、转置)的源码(C#)

    博客分类:
  • C#
阅读更多
/// 矩阵的乘
        public bool MatrixMultiply(double[,] a, double[,] b, ref double[,] c)
        {
            if (a.GetLength(1) != b.GetLength(0))
                return false;
            if (a.GetLength(0) != c.GetLength(0) || b.GetLength(1) != c.GetLength(1))
                return false;
            for (int i = 0; i < a.GetLength(0); i++)
            {
                for (int j = 0; j < b.GetLength(1); j++)
                {
                    c[i, j] = 0;
                    for (int k = 0; k < b.GetLength(0); k++)
                    {
                        c[i, j] += a[i, k] * b[k, j];
                    }
                }
            }

            return true;
        }

        /// 矩阵的加
        public bool MatrixAdd(double[,] a, double[,] b, ref double[,] c)
        {
            if (a.GetLength(0) != b.GetLength(0) || a.GetLength(1) != b.GetLength(1)
                || a.GetLength(0) != c.GetLength(0) || a.GetLength(1) != c.GetLength(1))
                return false;
            for (int i = 0; i < a.GetLength(0); i++)
            {
                for (int j = 0; j < a.GetLength(1); j++)
                {
                    c[i, j] = a[i, j] + b[i, j];
                }
            }

            return true;
        }

        /// 矩阵的减
        public bool MatrixSubtration(double[,] a, double[,] b, ref double[,] c)
        {
            if (a.GetLength(0) != b.GetLength(0) || a.GetLength(1) != b.GetLength(1)
                || a.GetLength(0) != c.GetLength(0) || a.GetLength(1) != c.GetLength(1))
                return false;
            for (int i = 0; i < a.GetLength(0); i++)
            {
                for (int j = 0; j < a.GetLength(1); j++)
                {
                    c[i, j] = a[i, j] - b[i, j];
                }
            }

            return true;
        }

        /// 矩阵的行列式的值
        public double MatrixSurplus(double[,] a)
        {
            int i, j, k, p, r, m, n;
            m = a.GetLength(0);
            n = a.GetLength(1);
            double X, temp = 1, temp1 = 1, s = 0,s1 = 0;     
              
            if(n == 2)
            {
                for (i = 0; i < m; i++)
                    for (j = 0; j < n; j++)
                        if ((i + j) % 2 > 0) temp1 *= a[i, j];
                        else temp *= a[i, j];
                X=temp-temp1;
            }
            else
            {
                for (k = 0; k < n; k++)
                {
                    for (i = 0, j = k; i < m && j < n; i++, j++)
                        temp *= a[i, j];
                    if (m - i > 0)
                    {
                        for (p = m - i, r = m - 1; p > 0; p--, r--)
                            temp *= a[r, p - 1];
                    }
                    s += temp;
                    temp = 1;
                }

                for (k = n - 1; k >= 0; k--)
                {
                    for (i = 0, j = k; i < m && j >= 0; i++, j--)
                        temp1 *= a[i, j];
                    if (m - i > 0)
                    {
                        for (p = m - 1, r = i; r < m; p--, r++)
                            temp1 *= a[r, p];
                    }
                    s1 += temp1;
                    temp1 = 1;
                }

                X = s - s1;
            }
            return   X;     
        }    

        /// 矩阵的转置
        public bool MatrixInver(double[,] a, ref double[,] b)
        {
            if (a.GetLength(0) != b.GetLength(1) || a.GetLength(1) != b.GetLength(0))
                return false;
            for (int i = 0; i < a.GetLength(1); i++)
                for (int j = 0; j < a.GetLength(0); j++)
                    b[i, j] = a[j, i];

            return true;
        }

        /// 矩阵的逆
        public bool MatrixOpp(double[,] a, ref double[,] b)
        {
            double X = MatrixSurplus(a);
            if (X == 0) return false;
            X = 1 / X;

            double[,] B = new double[a.GetLength(0), a.GetLength(1)];
            double[,] SP = new double[a.GetLength(0), a.GetLength(1)];
            double[,] AB = new double[a.GetLength(0), a.GetLength(1)];

            for (int i = 0; i < a.GetLength(0); i++)
                for (int j = 0; j < a.GetLength(1); j++)
                {
                    for (int m = 0; m < a.GetLength(0); m++)
                        for (int n = 0; n < a.GetLength(1); n++)
                            B[m, n] = a[m, n];
                    {
                        for (int x = 0; x < a.GetLength(1); x++)
                            B[i, x] = 0;
                        for (int y = 0; y < a.GetLength(0); y++)
                            B[y, j] = 0;
                        B[i, j] = 1;
                        SP[i, j] = MatrixSurplus(B);
                        AB[i, j] = X * SP[i, j];
                    }
                }     
            MatrixInver(AB, ref b);
              
            return true;     
          }     


转自:http://young.xh.blog.163.com/blog/static/956253200761310247675/
该博客值得学习
分享到:
评论

相关推荐

    C#实现矩阵加减乘除以及求逆

    在计算机科学和数学中,矩阵运算是指对矩阵进行加、减、乘、逆、转置等操作。这些操作是线性代数的基础,广泛应用于机器学习、计算机视觉、数据分析等领域。下面是关于C#实现矩阵加减乘除以及求逆的知识点: 一、...

    矩阵的转置,求秩,求方阵行列式,求方阵的逆矩阵

    根据给定文件的信息,我们可以总结出以下几个主要的知识点:矩阵的转置、求秩、求方阵行列式、以及求方阵的逆矩阵。 ### 一、矩阵的转置 矩阵的转置是指将矩阵A的行变为列,列变为行得到的新矩阵。具体来说,如果...

    [lry]逆运动学雅克比矩阵转置方法c#源码

    在实际应用中,这个C#源码可能首先会计算雅可比矩阵,然后求其转置,接着使用数值方法(如牛顿法)解逆运动学方程。用户界面可能会显示输入的目标位置,以及计算出的关节角度,还可能有动画模拟显示机器人臂的运动。...

    矩阵运算_行列式,求逆,转置

    矩阵运算,包括求矩阵的行列式、求逆、转置等操作

    C语言实现矩阵加、减、乘、数乘、转置、求逆

    在提供的文件"100_矩阵实现加减乘,求逆,转置"中,很可能包含了上述操作的C代码示例,这对于初学者理解和实践这些概念非常有用。通过阅读和分析这些代码,你可以更好地掌握C语言在矩阵运算中的应用,并加深对矩阵...

    C语言编写矩阵函数包(矩阵的加,减,乘,转置矩阵,逆矩阵)

    本文档将详细介绍如何使用C语言实现矩阵的基本运算,包括加法、减法、乘法、转置以及逆矩阵的计算。这些运算在科学计算、图形处理等领域有着广泛的应用。本文档通过具体的代码示例来解释各个操作的具体实现方法。 #...

    C#实现矩阵运算(包括矩阵的加减乘除转置求逆等)

    本文将深入探讨如何使用C#语言来实现矩阵的加减、乘除、转置以及求逆等基本操作。 首先,矩阵是二维数组,由行和列构成,可以用一个大括号{}来表示。在C#中,我们可以创建一个二维数组来表示矩阵。例如,一个2x2的...

    矩阵的各种运算,包括逆和转置的运算

    以上内容涵盖了矩阵的基本运算,包括输入输出、加法、减法、乘法、转置以及行列式的计算。这些运算在实际应用中非常重要,比如在图像处理、信号分析、机器学习等领域都有着广泛的应用。掌握这些基本运算不仅有助于...

    稀疏矩阵的十字链表表示方法:矩阵加减乘法运算、矩阵转置运算、矩阵项的插入、矩阵行列链表的排序

    本文将详细讲解使用C语言实现稀疏矩阵的十字链表表示方法,以及相关的矩阵运算,包括矩阵加减乘法、矩阵转置和矩阵项的插入,以及对矩阵行列链表的排序。 1. **稀疏矩阵的概念**: - 稀疏矩阵是指大部分元素为零的...

    C#矩阵加法,转置,求逆,乘法

    C#矩阵运算,包括加法,转置,求逆,乘法

    两个矩阵的加减乘除运算以及矩阵转置等

    在编程领域,矩阵运算是一种常见的数学操作...总之,理解并能正确实现矩阵的加减乘除和转置是任何涉及矩阵运算的编程项目的基础。通过使用C++,我们可以构建高效、灵活的矩阵操作工具,服务于各种科学计算和工程应用。

    矩阵求逆、加减、乘除、转置等计算程序

    在本文中,我们将深入探讨如何使用C#编程语言进行矩阵计算,主要涵盖矩阵求逆、加减、乘除以及转置等操作。这些是线性代数中的基本运算,对于理解和应用数学模型至关重要,特别是在图形处理、数据分析和机器学习等...

    矩阵运算的加乘转置等

    矩阵运算的加乘转置等,C++语言,Visual Studio 2019编译,

    矩阵运算的基本功能,包括矩阵加减、乘除、转置、求逆.zip

    本资料包"矩阵运算的基本功能,包括矩阵加减、乘除、转置、求逆.zip"显然是为了讲解如何在C#环境下进行这些基本的矩阵操作。以下将详细阐述这些知识点。 1. **矩阵加减**:在矩阵加法中,两个矩阵必须具有相同的...

    c语言实现稀疏矩阵的加减乘,转置

    ### c语言实现稀疏矩阵的加减乘与转置 #### 概述 在计算机科学领域,矩阵运算是一项基础而重要的任务。对于密集矩阵,直接使用二维数组进行存储和计算是常见且有效的做法。然而,当矩阵中大量元素为零时(即稀疏...

    CUDA中矩阵加减运算以及转置运算

    在这个名为"CUDA中矩阵加减运算以及转置运算"的项目中,我们将深入探讨如何在CUDA环境下进行矩阵的加减和转置操作。 首先,CUDA编程主要涉及两个关键组件:主机代码(Host Code)和设备代码(Device Code)。主机...

    C++ QT 矩阵运算器

    C++ QT 矩阵运算器是一款基于C++编程语言和QT图形用户界面库开发的矩阵计算工具,它为用户提供了一个直观且高效的环境来执行矩阵的加、减、乘及转置等基本操作。在这款软件中,矩阵的存储采用了稀疏矩阵的概念,以...

    稀疏矩阵的连续存储空间表示:矩阵加减乘法运算、矩阵转置运算、矩阵项的插入、矩阵行列链表的排序

    在计算机科学中,稀疏矩阵...通过以上描述,我们可以看出这个压缩包文件提供了关于稀疏矩阵连续存储空间表示的实现,涵盖了矩阵的基本运算,如加减、转置、插入及排序,适合学习C语言和矩阵操作的初学者进行实践。

    矩阵求逆、转置和求乘

    非常好,有助于初学者学习。代码都是自己写的哦,大家多多指教。

Global site tag (gtag.js) - Google Analytics