C# 矩陣乘法實現


矩陣乘法是一種高效的算法可以把一些一維遞推優化到log( n ),還可以求路徑方案等,所以更是是一種應用性極強的算法。矩陣,是線性代數中的基本概念之一。一個m×n的矩陣就是m×n個數排成m行n列的一個數陣。由於它把許多數據緊湊的集中到了一起,所以有時候可以簡便地表示一些復雜的模型。矩陣乘法看起來很奇怪,但實際上非常有用,應用也十分廣泛。

只有當矩陣A的列數與矩陣B的行數相等時A×B才有意義。一個m×n的矩陣a(m,n)左乘一個n×p的矩陣b(n,p),會得到一個m×p的矩陣c(m,p),滿足矩陣乘法滿足結合律,但不滿足交換律 一般的矩乘要結合快速冪才有效果。(基本上所有矩陣乘法都要用到快速冪的)   在計算機中,一個矩陣實際上就是一個二維數組。一個n行m列的矩陣與一個m行p列的矩陣可以相乘,得到的結果是一個n行p列的矩陣,其中的第i行第j列位置上的數為第一個矩陣第i行上的m個數與第二個矩陣第j列上的m個數對應相乘后所得的m個乘積之和。比如,下面的算式表示一個2行2列的矩陣乘以2行3列的矩陣,其結果是一個2行3列的矩陣。

其中,結果矩陣的那個4(結果矩陣中第二(i)行第二(j)列)

=

2(第一個矩陣第二(i)行第一列)*2(第二個矩陣中第一行第二(j)列)   +   0(第一個矩陣第二(i)行第二列)*1(第二個矩陣中第二行第二(j)列)

 

        static void Main(string[] args)
        {


            //定義三個數組,分別存儲矩陣A,B,C
            float[,] a = new float[100,100];
            float[,] b = new float[100,100];
            float[,] c = new float[100,100];

            int n, m, mB, p;

            float[,] s = new float[100,100];
            //矩陣A行數m1,列數n1
            n = 2;
            m = 3;
            //矩陣B行數m2,列數n2
            mB = 3;
            p = 2;

            if (m != mB)
            {
                //判斷是否可以相乘
                Console.WriteLine("不可以相乘!!!");
                return;
            }

            a[1, 1] = 1;
            a[1, 2] = 2;
            a[1, 3] = 4;

            a[2, 1] = 7;
            a[2, 2] = 9;
            a[2, 3] = 6;


            b[1, 1] = 1;
            b[1, 2] = 7;

            b[2, 1] = 2;
            b[2, 2] = 9;

            b[3, 1] = 4;
            b[3, 2] = 6;

            Console.WriteLine("矩陣A:\n"); 
            for (var i = 1; i <= n; i++)
            {
                for (var j = 1; j <= m; j++)

                {
                    Console.Write("{0}-", a[i, j]);
                    if (j == m)Console.Write("\n");
                }
            }

            Console.WriteLine("矩陣B:\n"); 
            for (var i = 1; i <= m; i++)
            {
                for (var j = 1; j <= p; j++)
                {
                    Console.Write("{0}-",b[i, j]);
                    if (j == p)Console.Write("\n");
                }

            }
            Console.WriteLine("矩陣C=A*B:\n");
            for (var i = 1; i <= n; i++)
            {
                for (var j = 1; j <= p; j++)
                {
                    for (var k = 1; k <= m; k++)
                    {

                        s[i,j] = s[i,j] + a[i,k]*b[k,j];
                    }
                    c[i,j] = s[i,j]; 
                    Console.Write("{0}-",c[i,j]);
                    if (j == p) Console.Write("\n");
                }
            }

            Console.Read();
        }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM