Помогите с алгоритмом умножения Матрицы на Вектор-Строчку
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;
}
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).
Vector.ROW == 1 && Vector.ROW == Matrix.COLUMN - эм-м-м, получается, Matrix.COLUMN == 1, да?