Anzeige
Archiv - Navigation
864to868
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
864to868
864to868
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Matrizen-Operationen

Matrizen-Operationen
29.04.2007 16:04:00
Julia
Hallo liebe Leute!
Ich habe folgendes Problem.
Ich schreibe meine Aachelorarbeit und muss in VBA ein ziemlich aufwendiges Algorithmus programmieren.
Mit Excel kenne ich mich so ziemlich gut aus(glaube ich) und mit VBA - nur Anfänger.
Ich muss verschiedene Matrixoperationen mit VBA dürchführen lassen.
Hier ein Beispiel:
Ich habe 10 Vekroten, die ich mit 10 verschiedenen Skalaren multiplieziern muss, dann soll noch eine Matrix mit einem Vektor multipliziert werden und anschließen soll alles aufsummier werden.
Es ist für mich kein Problem die Daten (Vektoren und Matrizen) aus den aktuellen Arbeitsblatt einzulesen, die einzelne Operationen durchführen, Zwieschenerbgebnisse auf dem Arbeitsblatt ausgeben lassen, diese dann wieder einlesen und dann weiter bearbeiten.
Aber diese Zwischenergebnisse sollen nicht ausgegeben werden,
sonder nur zwischegespeichert und dann weiter verarbeitet.
Mein Problem ist es, ich weiss nicht wie ich das mit Matrizen bzw. mit Vektoren anstellen soll.
Währen diese einfach nur normalen Variablen gewesen, dann hätte ich keine Probleme.
Aber da es sich hier um Vektoren (=Zwischenergebnisse) handelt, weis ich nicht weiter
Die Zwischenergebnisse können nur im Direktfenster angezeigt werden, nur für Kontrollzwecke.
Ich werde mich riesig feuen, wenn mir jemand weiter helfen kann.
Wenn es möglich ist, vielleicht ein kleines Beispiel-Programm das so was - oder vielleicht sehr ähnliches - macht, mir zuschicken.
Wünsche Euch noch einen wunderschönen Sonntag.
Gruß
Julia

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Matrizen-Operationen
29.04.2007 16:36:14
Josef
Hallo Julia,
ein kleines Beispiel der Daten, mit Beschreibung wäre hilfreich.
Gruß Sepp

AW: Matrizen-Operationen
29.04.2007 17:07:57
Julia
Hallo Sep,
Folgendes soll z.Bsp. gemacht werden:
1*(5,6)+2*(7,8)+3*(9,10)+4*(11,14)
(x,y) sind vektoren, die Einträge stehen normaleweise übereinander, alos es ist nicht als eine Zahle x,y zu verstehen, ich weiss nicht nur wie ich die Vertorenschreibweise hier darstellen soll. Offensichtlich ist diese Seite nicht für mathematische Formeln geeignet.
Die Einzelne Zahlen vor den Klammer 1*(x,y) nennt man Skalare, die Multiplikation 2*(7,8) erfolgt folgendermassen:2*7=14 und 2*8=16 => ein neuer Vektor (14,16).
Die anschließende Multiplikation ist komponentenweise, es ist
1*(5,6)+2*(7,8)+...=(5,6)+(14,16)=(19,22)
Ich weiss nicht wie man diese Zwischergebnisse 2*(7,8), was ein Vektor ist, in VBA speicher, so dass sie nicht auf dem Arbeitsblatt ausgegeben werden, und dann für die Aufsummierung wieder aufruft.
Volgendes habeich bereits:
das ist nur ein Teil meines Programms:

Public Sub Schritt_2()
n = CInt(Dialog.TextBox1)   'Anzahl der Zeilen von Q & c werden aus dem Dialog eingelesen
m = CInt(Dialog.TextBox2)   'Anzahl der Spalten von A und ß werden aus dem Dialog eingelesen
Dim j%, l%
Dim matQ() As Integer
Dim vekc() As Integer
For j = 1 To n
For l = 1 To n
matQ(j, l) = Cells(5 + j, 1 + l)   'hier will ich, dass die Einträge, die man in  _
der Tabelle eingegeben
Next l                                           'hat als diese Matrix gespeichert  _
werden, damit will ein bessere
Next j                                                'Lesbarkeit des Codes erreichen
For j = 1 To n
vekc(j, 1) = Cells(15 + j, 1 + n + 1)       'Hier wird ebenfalls ein Vektor eingelesen
Next j
Range(Cells(30, 6), Cells(32, 8)).Cleare
For j = 1 To n
For l = 1 To n
Cells(30 + j, 6 + l) = vekc(j, l)* 5  'Hier wollte ich nur für Kontrollzwecke den  _
Vektor wieder ausgeben
Next l                                              'damit ich sicher bin, dass ich  _
alles richtig gemacht habe
Next j
End Sub


Aber es wird nicht ausgegeben, es erscheint immer der " Laufzeitfeheler", also ich weiss nicht, wie ich dass machen soll.
Das hababe ich nach diesem prinzip gemacht, dieses Beispiel habe ich irgend-wo hier gefunden:
Sub Schritt_3()
Dim arrBasis(1 To 100) As Integer
Dim arrSplit(1 To 25, 1 To 4) As Integer
Dim iCounter As Integer, iAct As Integer
For iCounter = 1 To 100
arrBasis(iCounter) = iCounter
Next iCounter
For iCounter = 1 To 25
For iAct = 1 To 4
arrSplit(iCounter, iAct) = arrBasis(iCounter * 4 - (4 - iAct))
Next iAct
Next iCounter
Range("A1:D25").Value = arrSplit
End Sub


Also ich wies nicht, was ich hier falsch mache, eigentlich soll es doch funktionieren.
Gruß
Juia

Anzeige
AW: Matrizen-Operationen
29.04.2007 18:14:51
Josef
Hallo Julia,
angenommen die Vektoren stehen von "A1" bis "Bx" und die Skalare steigen von 1 bix x,
dann probier mal diesen Code.
Sub julia()
Dim vA As Variant, vTmp() As Variant
Dim lngR As Long, result As Long
Dim intC As Integer

vA = Range("A1:B4")

Redim vTmp(1 To UBound(vA, 1), 1 To UBound(vA, 2))

For lngR = 1 To UBound(vA, 1)
    For intC = 1 To UBound(vA, 2)
        vTmp(lngR, intC) = vA(lngR, intC) * lngR
    Next
Next

Range("D1:E4") = vTmp 'nur zur Kontrolle

result = Application.Sum(vTmp)

Range("G1") = result

End Sub

Gruß Sepp

Anzeige
AW: Matrizen-Operationen
29.04.2007 20:35:00
Julia
Ok, ich versuche es, aber erstmal vielen Dank,
das sieht ziemlich gut aus.
Hat VBA speziele Befehle für Matrizenoperationen, Summenformeln uns.?
Bis jetzt kenne ich nicht mal eine Summenformel.
Gruß
Julia

AW: Matrizen-Operationen
30.04.2007 09:23:43
ingUR
Hallo, Julia,
die "Liste der in Visual Basic verfügbaren Tabellenfunktionen" findest Du in der Hilfe zu VBA unter dem Punkt "Verwenden von Microsoft Excel-Tabellenfunktionen in Visual Basic"
Als Matrixoperationen stehen, unabhängig von anderen Bereichsoperationen, nach meinem Überblick in VBA standardmäßig die Worksheet-Funktionen
Transpose - liefert Matrix: Transponierte Matrix
MInverse - liefet Matrix: Kehrmatrix
MDeterm - liefert Wert: Detreminante
SumProduct - liefert Wert: Summe der Produkte der entsprechendne Matrixkomponeten
vTmp = Application.MMult(vA, Application.MInverse(vA)
bzw.
vTmp = Application.WorksheetFunction.MMult(vA, Application.WorksheetFunction.MInverse(vA))
liefert die Einheitsmatrix (Dagonalelemnte mit 1 besetzt, restl. Elemente computermäßige Null)
vTmp = Application.MInverse(Application.WorksheetFunction.MInverse(vA))
liefert die Ausgangsmatrix.
Entsprechende Formeln für Multiplikationen mit Skalaren- und Vektorgrößen mit einer Matrix sind mir nicht bekannt; sie sind als eigene Funktionen zu erstellen.
Gruß,
Uwe
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige