Matrix-Mathematik mit VBA (System von Linearen Gleichungen)

Ich bin auf der Suche nach ein wenig Hilfe durchführen einer matrix-Mathematik in der Excel-VBA. Ich habe gelesen eine Tonne von Antworten, die vorschlagen, die Excel-Arbeitsblatt, aber ich bin der Hoffnung, dies zu lösen, im VBA-code selbst.

Obwohl meine Bewerbung ist viel größer, sagen wir mal ich habe ein system von linearen Gleichungen, die ich lösen muss:

  x1 +   x2 = 8
2*x1 + 4*x2 = 100

Dies kann gelöst werden mit der einfachen matrix die Formel A*x = B oder x = A^(-1) * B,

A = [1, 1; 2, 4]
B = [8; 100]

Wenn Sie dieses Problem lösen, finden Sie x1 = -34 und x2 = 42. In Bezug auf die matrix, dann gilt:

X = [-34; 42]

Mithilfe von Excel die Arbeitsblätter neben der MMULT und MINVERSE-Funktionen macht diese einfach und ich habe es nur gut funktionieren. Mein problem ist, dass ich bin benötigen, um diese Berechnung innerhalb einer VBA-Funktion. Hier ist, was ich versuche:

Dim A(0 To 1, 0 To 1) As Single
Dim B(0 To 0, 0 To 1) As Single
Dim X(0 To 0, 0 To 1) As Single

A(0, 0) = 1
A(1, 0) = 1
A(0, 1) = 2
A(1, 1) = 4

B(0, 0) = 8
B(0, 1) = 100

X = Application.WorksheetFunction.MMult(Application.WorksheetFunction.MInverse(A), B)

Leider, die Letzte Zeile ergibt sich ein "Compile error: can ' T assign to array" angezeigt. Ich denke, es ist weil ich angeben müssen, jedes element des Arrays nacheinander, aber die Arbeitsblatt-Funktionen array-Funktionen.

Wie kann ich dieses Problem beheben?

  • Schauen Sie in das Fenster (wenn Sie nicht sehen können, klicken Sie auf Ansicht > die Einheimischen, und man den rechten Teil entweder Schritt für Schritt durch den code mit F8 oder setzen Sie einen break-Punkt), um die Werte der Variablen, die kurz vor der msgbox - das wird Ihnen sagen, genau das, was X ist und wie Sie zu indizieren. Es könnte sein, das zurückgegebene array von MMult ist eigentlich ein "vector" - array (also 1-dimensionale) und damit indiziert werden soll, als einfach X(0) und X(1).
  • Das klappte! Für Referenz, die MMult angezeigt wird zum speichern der Werte in X(1,1) und X(2,1) das macht Sinn-ich dachte nur nicht, dass zu prüfen, das Fenster. Guter Fang! Und Sie sind herzlich eingeladen über den Algorithmus--ich habe es die ganze Zeit in excel-Tabellen, aber hatte nie eine Notwendigkeit in VBA. Nochmals vielen Dank! 🙂
Schreibe einen Kommentar