Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
680to684
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
680to684
680to684
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Matrix invertieren

Matrix invertieren
19.10.2005 14:19:44
Marc
Hallo Allerseits
Möchte in VB eine Matrix invertieren. Da dies anscheinend nicht möglich ist (ich will nicht das ganze Verfahren programmieren), habe ich versucht, die Daten in Excel zu schieben, dort mit dem Befehl MINV die Matrix zu invertieren und anschliessend mit einem Vektor zu multiplizieren (MMULT). Das ganze habe ich aus dem VB Code gemacht. Nun stellt sich das Problem, dass man bei der Eingabe von MINV beim Abschluss Shift+Ctrl+enter drücken muss, damit das ganze auch funzt (warum es nur mit enter nicht geht, weiss ich auch nicht).
Wenn ich nun aus VB der Befehl MINV aufrufe, kann ich diesen ja nicht mit der genannten Tastenkombination abschliessen!?!? Somit kann die Inverse Matrix nicht erzeugt werden. Ich will die ganze Geschichte vollautomatisch in VBA ablaufen lassen, und auch die benötigten Felder in Excel nach gebrauch wieder löschen.
Hier den Code, den ich verwende:
Range("A51:O65").Select
Selection.FormulaArray = "=MINV(A34:O48)" 'Hier sollte mit Shift+Ctrl+enter abgeschlossen werden!!!
Range("H4:H18").Select
Selection.FormulaArray = "=MMULT(A51:O65,Q51:Q65)"
Hoffentlich kann mir jemand helfen!!!
Gruss
Marc

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Matrix invertieren
19.10.2005 14:28:52
MichaV
Hallo,
in VB geht das nicht, das stimmt. Aber in VBA geht das sehr wohl:

Sub Matrixeln()
Dim a(1 To 2, 1 To 2)
Dim b
Dim c
a(1, 1) = 1
a(1, 2) = -2
a(2, 1) = -1
a(2, 2) = -2
b = Application.WorksheetFunction.MInverse(a)
c = Application.WorksheetFunction.MMult(a, b)
Range("a1:b2") = b
Range("a4:b5") = c
End Sub

Gruss- Micha
PS: Rückmeldung wäre nett.
AW: Matrix invertieren
19.10.2005 14:51:24
Marc
Hallo Micha
Na das klappt ja prima!! Vielen Dank!
Wollte das ganze nun aber auf mein 15x15 problem umformen.
code:

Sub Matrixeln()
Dim a(1 To 15, 1 To 15)
Dim b
Dim c
Dim i, j As Integer
Dim f(1 To 15)
For i = 1 To 15
For j = 1 To 15
a(i, j) = Cells(1 + i, j)
Next j
Next i
For i = 1 To 15
f(i) = Cells(1 + i, 17)
Next i
b = Application.WorksheetFunction.MInverse(a)
c = Application.WorksheetFunction.MMult(b, f)
Range("a20:a35") = c
End Sub

nun habe ich in der zeile, wo b mit f multipliziert werden, das problem, dass ich unterschiedliche typen habe, was zu einem Laufzeitfehler '1004' führt. wenn ich jedoch bei der Definition der Variablen nur "Dim f" schreibe, dann kann ich die Werte aus den Zellen nicht in f schreiben!?!
Gruss
Marc
Anzeige
AW: Matrix invertieren
19.10.2005 15:01:55
MichaV
Hallo,
ich hab keine Ahnung, was Du da machst, aber so funzt es. Du musst bitte nur gucken, ob das richtige Ergebnis rauskommt ;o)
f muß 2-Dimensional sein. Schreibe
Dim f(1 To 15, 1 To 1)
und weiter unten
f(i, 1) = Cells(1 + i, 17)
Gruss- Micha
PS: Rückmeldung wäre nett.
AW: Matrix invertieren
19.10.2005 15:07:07
Marc
Sensationell, so geht's!!!!!
Habe mir halt gedacht, dass wenn ich nix angebe, dann sind alle weiteren Dimensionen =1.
Du warst eine grosse Hilfe!
DANKE!!!
Gruss
Marc
AW: Matrix invertieren
19.10.2005 15:10:26
MichaV
Hallo,
bei Worksheet- Functions immer 2 Dimensionen.
Danke für Deine Rückmeldung!
Gruss- Micha
Anzeige
noch was....
19.10.2005 15:15:49
MichaV
Hallo,
anstelle

For i = 1 To 15
For j = 1 To 15
a(i, j) = Cells(1 + i, j)
Next j
Next i

kannst Du auch
dim a
a=range(cells(1,1),cells(15,15)) schreiben.
Wenn die Matrix dann gedreht ist (habs nicht getestet), dann
a=worksheetfunction.transpose(range(cells(1,1),cells(15,15)))
Entsprechend mit f. Um aus einer Spalte eine 2D- Matrix zu bauen, schreibe
f=worksheetfunction.transpose(worksheetfunction.transpose(range("q1:q16")))
Gruss- Micha
AW: noch was....
19.10.2005 15:30:20
Marc
Hmm, wenn das so weiter geht, wird mein Code noch auf eine einzige Bildschirmseite zusammenschrumpfen!!!
Danke für den Tipp!!
Marc
Anzeige
Minimalversion
19.10.2005 15:34:24
MichaV
Hallo,
wieso Seite? Zeile!

Sub Matrixeln()
Range("a20:a34") = Application.WorksheetFunction.MMult(Application.WorksheetFunction.MInverse(Range(Cells(1, 1), Cells(15, 15))), Range(Cells(1, 17), Cells(15, 17)))
End Sub

Gruss- Micha
AW: Minimalversion
19.10.2005 16:01:31
Marc
*ggg*
Zum Glück ist noch einiges anderes in meinem Programm vorhanden, die Lösung des Gleichungssystems ist nur ein Teil davon. Ich muss ja schliesslich noch die Koeffizienten der Matrix und des Vektors berechnen. Es handelt sich dabei um die Durchbiegung eines Trägers einer Presse.
Gruss und Danke
Marc
Anzeige
AW: Matrix invertieren
19.10.2005 14:51:36
Marc
Hallo Micha
Na das klappt ja prima!! Vielen Dank!
Wollte das ganze nun aber auf mein 15x15 problem umformen.
code:

Sub Matrixeln()
Dim a(1 To 15, 1 To 15)
Dim b
Dim c
Dim i, j As Integer
Dim f(1 To 15)
For i = 1 To 15
For j = 1 To 15
a(i, j) = Cells(1 + i, j)
Next j
Next i
For i = 1 To 15
f(i) = Cells(1 + i, 17)
Next i
b = Application.WorksheetFunction.MInverse(a)
c = Application.WorksheetFunction.MMult(b, f)
Range("a20:a35") = c
End Sub

nun habe ich in der zeile, wo b mit f multipliziert werden, das problem, dass ich unterschiedliche typen habe, was zu einem Laufzeitfehler '1004' führt. wenn ich jedoch bei der Definition der Variablen nur "Dim f" schreibe, dann kann ich die Werte aus den Zellen nicht in f schreiben!?!
Gruss
Marc
Anzeige
AW: Matrix invertieren
19.10.2005 14:52:02
Marc
Hallo Micha
Na das klappt ja prima!! Vielen Dank!
Wollte das ganze nun aber auf mein 15x15 problem umformen.
code:

Sub Matrixeln()
Dim a(1 To 15, 1 To 15)
Dim b
Dim c
Dim i, j As Integer
Dim f(1 To 15)
For i = 1 To 15
For j = 1 To 15
a(i, j) = Cells(1 + i, j)
Next j
Next i
For i = 1 To 15
f(i) = Cells(1 + i, 17)
Next i
b = Application.WorksheetFunction.MInverse(a)
c = Application.WorksheetFunction.MMult(b, f)
Range("a20:a35") = c
End Sub

nun habe ich in der zeile, wo b mit f multipliziert werden, das problem, dass ich unterschiedliche typen habe, was zu einem Laufzeitfehler '1004' führt. wenn ich jedoch bei der Definition der Variablen nur "Dim f" schreibe, dann kann ich die Werte aus den Zellen nicht in f schreiben!?!
Gruss
Marc
Anzeige
AW: Matrix invertieren
19.10.2005 14:52:05
Marc
Hallo Micha
Na das klappt ja prima!! Vielen Dank!
Wollte das ganze nun aber auf mein 15x15 problem umformen.
code:

Sub Matrixeln()
Dim a(1 To 15, 1 To 15)
Dim b
Dim c
Dim i, j As Integer
Dim f(1 To 15)
For i = 1 To 15
For j = 1 To 15
a(i, j) = Cells(1 + i, j)
Next j
Next i
For i = 1 To 15
f(i) = Cells(1 + i, 17)
Next i
b = Application.WorksheetFunction.MInverse(a)
c = Application.WorksheetFunction.MMult(b, f)
Range("a20:a35") = c
End Sub

nun habe ich in der zeile, wo b mit f multipliziert werden, das problem, dass ich unterschiedliche typen habe, was zu einem Laufzeitfehler '1004' führt. wenn ich jedoch bei der Definition der Variablen nur "Dim f" schreibe, dann kann ich die Werte aus den Zellen nicht in f schreiben!?!
Gruss
Marc
Anzeige
AW: Matrix invertieren
19.10.2005 14:52:18
Marc
Hallo Micha
Na das klappt ja prima!! Vielen Dank!
Wollte das ganze nun aber auf mein 15x15 problem umformen.
code:

Sub Matrixeln()
Dim a(1 To 15, 1 To 15)
Dim b
Dim c
Dim i, j As Integer
Dim f(1 To 15)
For i = 1 To 15
For j = 1 To 15
a(i, j) = Cells(1 + i, j)
Next j
Next i
For i = 1 To 15
f(i) = Cells(1 + i, 17)
Next i
b = Application.WorksheetFunction.MInverse(a)
c = Application.WorksheetFunction.MMult(b, f)
Range("a20:a35") = c
End Sub

nun habe ich in der zeile, wo b mit f multipliziert werden, das problem, dass ich unterschiedliche typen habe, was zu einem Laufzeitfehler '1004' führt. wenn ich jedoch bei der Definition der Variablen nur "Dim f" schreibe, dann kann ich die Werte aus den Zellen nicht in f schreiben!?!
Gruss
Marc
Anzeige
AW: Matrix invertieren
19.10.2005 14:52:22
Marc
Hallo Micha
Na das klappt ja prima!! Vielen Dank!
Wollte das ganze nun aber auf mein 15x15 problem umformen.
code:

Sub Matrixeln()
Dim a(1 To 15, 1 To 15)
Dim b
Dim c
Dim i, j As Integer
Dim f(1 To 15)
For i = 1 To 15
For j = 1 To 15
a(i, j) = Cells(1 + i, j)
Next j
Next i
For i = 1 To 15
f(i) = Cells(1 + i, 17)
Next i
b = Application.WorksheetFunction.MInverse(a)
c = Application.WorksheetFunction.MMult(b, f)
Range("a20:a35") = c
End Sub

nun habe ich in der zeile, wo b mit f multipliziert werden, das problem, dass ich unterschiedliche typen habe, was zu einem Laufzeitfehler '1004' führt. wenn ich jedoch bei der Definition der Variablen nur "Dim f" schreibe, dann kann ich die Werte aus den Zellen nicht in f schreiben!?!
Gruss
Marc
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige