-2

我想知道如何将二维数组(矩阵)相乘并将它们显示为矩阵。

当前输出为

1 1 1
1 1 1
1 1 1

这不是正确的结果。

代码如下:

    static void Main(string[] args)
    {
        int[,] metrix1 = new int[3, 3] { { 2, 0, 2 }, { 0, 1, 2 }, { 1, 2, 1 } };
        int[,] metrix2 = new int[3, 3] { { 1, 1, 1 }, { 0, 1, 0 }, { 0, 0, 1 } };
        int[,] result = new int[3, 3];

        int m1 =0;
        int m2 =0;

        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                m1 = metrix1[i, j];

            }
        }

        // metrix 2
            for (int y = 0; y < 3; y++)
            {
                for (int z = 0; z < 3; z++)
                {
                    m2 = metrix2[y, z];
                }
            }
            //m

                for (int a = 0; a < 3; a++)
                    {

                        for (int b = 0; b < 3; b++)
                        {
                        result[a, b] = m1 *m2;
                        Console.Write(result[a, b] );

                        }Console.WriteLine();
                }Console.ReadLine();

                }
            }
        }
4

1 回答 1

0

您正在错误地处理这个问题。

for (int y = 0; y < 3; y++)
        {
            for (int z = 0; z < 3; z++)
            {
                m2 = metrix2[y, z];
            }
        }

matrix[2, 2]此后,m2 将包含数组 ( )的右下角值。您实际上是在为您的乘法一次又一次地乘以相同的值。您需要将所有这些放在一个for循环中。

此外,这不是进行矩阵乘法的正确方法。首先,您的代码仅适用于 3x3 矩阵;不仅可以有其他大小的矩阵(4x4、5x5 等),矩阵甚至不必是正方形就可以相乘(只要 1 的列数等于行数其他)。即使它们都是3x3 矩阵,计算仍然是错误的。维基百科有一些很好的例子来说明这样做的正确方法。

2 0 2   1 1 1   (2*1)+(0*0)+(2*0)  (2*1)+(0*1)+(2*0) ...  
0 1 2 x 0 1 0 = (0*1)+(1*0)+(2*0)  (0*1)(1*1)(2*0) ...
1 2 1   0 0 1   ..
于 2016-11-23T20:08:08.153 回答