Умножая две матрицы, но получая неправильный ответ - PullRequest
1 голос
/ 15 февраля 2012

Это мой матричный код. Я умножаю две матрицы. Одна из матриц является скалярной (то есть диагональные элементы одинаковы), но когда я запускаю этот код, я получаю неправильный ответ.

static void Main(string[] args)
{
    int[,] matrix1 = new int[3, 3];
    int[,] matrix2 = new int[3, 3];
    int[,] result = new int[3, 3];

    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            Console.WriteLine("Enter 1st Matrix: ");
            matrix1[i, j] = Convert.ToInt32(Console.ReadLine());
        }
    }

    Console.ReadLine();

    for (int k = 0; k < 3; k++)
    {
        for (int l = 0; l < 3; l++)
        {
            Console.WriteLine("Enter 2nd Matrix: ");
            matrix2[k, l] = Convert.ToInt32(Console.ReadLine());
        }
    }

    Console.WriteLine();
    Console.WriteLine("Matrix 1: ");

    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            Console.Write(matrix1[i, j] + " ");
        }
        Console.WriteLine();
    }

    Console.WriteLine();
    Console.WriteLine("Matrix 2: ");

    for (int k = 0; k < 3; k++)
    {
        for (int l = 0; l < 3; l++)
        {
            Console.Write(matrix2[k, l] + " ");
        }
        Console.WriteLine();
    }

    Console.WriteLine("Matrix 1 * Matrix 2: ");

    for (int i = 0; i < 3; i++)
    {
        for (int j = 0; j < 3; j++)
        {
            result[i, j] = result[i, j] + matrix1[i, j] * matrix2[i, j];
            Console.Write(result[i, j] + " ");
        }
        Console.WriteLine();
    }

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

1 Ответ

4 голосов
/ 15 февраля 2012

Вы не умножаете матрицы, вы умножаете их значения.См. https://en.wikipedia.org/wiki/Matrix_multiplication

Например, {{1, 1}, {0, 0}} x {{1, 0}, {1, 0}} должно привести к {{2, 0}, {0, 0}}, а не {{1, 0}, {0, 0}}.

Вот правильный код для умножения матриц (обратите внимание, что он имеет сложность O (n ^ 3), а не O (n ^ 2)):

        for (int i = 0; i < 3; i++)
        {
            for (int j = 0; j < 3; j++)
            {
                result[i, j] = 0;
                for(int k = 0; k < 3; k++)
                {
                    result[i, j] = result[i, j] + matrix1[i, k] * matrix2[k, j];
                }
                Console.Write(result[i, j] + " ");
            }
            Console.WriteLine();
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...