Top.Mail.Ru
Ответы

Помогите с алгоритмом умножения Матрицы на Вектор-Строчку

public Vector ARRAYxARRAY(Matrix Matrix, Vector Vector) {
Vector rVector = new Vector(1, Vector.COLUMN);
if (Vector.ROW == 1 && Vector.ROW == Matrix.COLUMN) {
////
}
else if (Vector.COLUMN == 1 && Vector.COLUMN == Matrix.ROW) {
Vector cVector = new Vector(1, Vector.COLUMN);
////
}
else {
Console.WriteLine("Matrix and vector can't be multiplied.");
}

return rVector;
}

По дате
По рейтингу
Аватар пользователя
Новичок
7лет

1. У тебя же уже на этапе создания переменной rVector ошибка в размерности результата. Получить в качестве результата new Vector(1, Vector.COLUMN) ты можешь только если Matrix - квадратная матрица, а Vector - строка.

2. Умножение матриц НЕ коммутативно. Ты можешь либо умножить вектор-строку на Martrix - получив вектор-строку длиной Matrix.COLUMN, либо умножить Martrix на вектор-столбец, получив вектор-столбец высотой Matrix.ROW.

3. Пытаться сделать универсальную операцию, в которой порядок операндов зависит от размерности одного из операндов, по меньшей мере странно.

4. Зачем тебе отдельный тип Vector? И зачем отдельная функция умножения матрицы на вектор? Ведь Vector - это Matrix, у которого Matrix.COLUML == 1 || Matrix.ROW == 1. А функция умножения не зависит от того, будет подан на её вход вектор, или матрица.

5. Функция Matrix matrix_multiply(Matrix a, Matrix b) должна проверять единственное условие: a.COLUMN == b.ROW и возвращать Matrix result = new Matrix(a.ROW, b.COLUMN).

Аватар пользователя
Искусственный Интеллект
7лет

Vector.ROW == 1 && Vector.ROW == Matrix.COLUMN - эм-м-м, получается, Matrix.COLUMN == 1, да?