多语言展示
当前在线:1237今日阅读:84今日分享:32

C#矩阵求逆的运算方法

在编程的处理数据过程中通常需要定义数组来实现矩阵运算,矩阵的求逆也经常会使用到,那么我们在使用C#时怎么求矩阵的逆呢。
工具/原料

电脑,visual studio 2015

方法/步骤
1

双击运行visual studio 2015,文件-新建一个项目,可以是窗体也可以是控制台应用程序,看个人的编程题目要求而定。

2

定义一个矩阵(数组)a,c#中都是用数组来存储矩阵的,下面就求矩阵a的逆: double[,] a = new double[3, 3] { { 1, 2, 3 }, { 4, 5, 6 }, { 7, 8, 9 } };

3

下面我们写一个类来实现矩阵的求逆(也可以写函数求逆),因为类只要调用就行了,而且不在主程序的代码中,可以简化我们的程序。创建方法如下:解决方案资源管理器-项目名称-添加-类。

4

类的名称改为“qiuni”。

5

在“求逆”类中添加矩阵求逆的代码(图片只截取了部分,全部代码如下): public static double[,] 求逆(double[,] A)        {            int n;            n = A.GetLength(0);            if (n != A.GetLength(1)) return null;            double[,] C = new double[n, 2 * n];            double[,] D = new double[n, n];            for (int i = 0; i < n; i++)                for (int j = 0; j < n; j++)                    C[i, j] = A[i, j];            for (int i = 0; i < n; i++)                C[i, i + n] = 1;            for (int k = 0; k < n; k++)            {                double max = Math.Abs(C[k, k]);                int ii = k;                for (int m = k + 1; m < n; m++)                    if (max < Math.Abs(C[m, k]))                    {                        max = Math.Abs(C[m, k]);                        ii = m;                    }                for (int m = k; m < 2 * n; m++)                {                    if (ii == k) break;                    double c;                    c = C[k, m];                    C[k, m] = C[ii, m];                    C[ii, m] = c;                }                if (C[k, k] != 1)                {                    double bs = C[k, k];                    if (bs == 0)                    {                        Console.WriteLine('求逆错误!结果可能不正确!');                        break;                        //return null;                    }                    C[k, k] = 1;                    for (int p = k + 1; p < n * 2; p++)                    {                        C[k, p] /= bs;                    }                }                for (int q = k + 1; q < n; q++)                {                    double bs = C[q, k];                    for (int p = k; p < n * 2; p++)                    {                        C[q, p] -= bs * C[k, p];                    }                }            }            for (int q = n - 1; q > 0; q--)            {                for (int k = q - 1; k > -1; k--)                {                    double bs = C[k, q];                    for (int m = k + 1; m < 2 * n; m++)                    {                        C[k, m] -= bs * C[q, m];                    }                }            }            for (int i = 0; i < n; i++)                for (int j = 0; j < n; j++)                    D[i, j] = C[i, j + n];            return D;        }

6

最后,回到主程序,定义矩阵(数组)b为a的逆矩阵,并调用我们的“求逆”类,就可以实现对矩阵的求逆运算了:

推荐信息