Умножение массива и инверсия матрицы с помощью VBA - PullRequest
0 голосов
/ 05 сентября 2011

Я пытаюсь сделать некоторые вычисления с массивами.

например. Я хочу решить Ax=y, поэтому для этого я использую следующий код, где A - квадратная матрица, а y - кол. вектор. В VBA A - это массив с двумя измерениями, а y - это один с одним измерением. Однако этот код не работает ...

x = WorksheetFunction.MMult(WorksheetFunction.MInverse(A), y)

Где я ошибся? Спасибо!

Ответы [ 2 ]

7 голосов
/ 05 сентября 2011

Вы можете совершить одну или несколько ошибок:

  • Массивы не определены как Variant (Большинство функций рабочих листов не будут работать, если тип данных отличается от Variant).
  • Размеры A и y не совпадают, как это необходимо для умножения матриц.
  • В частности, не будет работать, если размер y равен (1,2) вместо (2,1), как в примере ниже.
  • и т.д ... Может быть что угодно, правда. Вы не говорите нам, какое сообщение об ошибке вы получаете.

Вот пример, который работает:

Dim A As Variant
Dim y As Variant
Dim x As Variant

ReDim y(1 To 2, 1 To 1)
y(1, 1) = 2
y(2, 1) = 3

ReDim A(1 To 2, 1 To 2)
A(1, 1) = 3
A(2, 1) = 1
A(1, 2) = 4
A(2, 2) = 2

x = WorksheetFunction.MMult(WorksheetFunction.MInverse(A), y)
1 голос
/ 27 декабря 2013

Пусть matrix A (3 x 3) будет массивом в Range("A1:C3"), matrix y (3 x 1) будет массивом в Range("E1:E3"), а matrix x (3 x 1) - массив в Range("G1:G3"). Тогда вы можете попробовать эту простую программу:

Range("G1:G3") = WorksheetFunction.MMult(WorksheetFunction.MInverse(Range("A1:C3")), Range("E1:E3"))

Используя ту же процедуру, вы можете сделать это, чтобы найти результат умножения матрицы (n x m) на матрицу (p x q). Конечно, для упрощения вы должны сначала объявить переменные. Надеюсь, этот ответ поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...