Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
832to836
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
832to836
832to836
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Function & MMult

Function & MMult
29.12.2006 18:11:28
Willphisto
Hallo,
vorweg mal Danke für Eure Hilfe!!! Nun zu meinem Problem. Ich hab eine Rechnung ( Matrix * Vektor ) = Vektor ) der Form...
https://www.herber.de/bbs/user/39248.xls
In einem sub Programm bestimme ich den vektor a,b,c indem ich
Dim abc
Dim matrix(1 To 3, 1 To 3)
Dim vek_t
Dim vek(1 To 3)
Dim inv_m
vek_t = WorksheetFunction.Transpose(vek)
inv_m = Application.WorksheetFunction.MInverse(matrix)
abc = Application.WorksheetFunction.MMult(inv_m, vek_t)
mache. Das klappt auch ganz gut. Ich krieg dann 3 Zahlen raus die stimmen ( Sollten :-) ). Jetzt bräuchte ich das ganze aber in Form einer Function, bei der mir der Vektor abc also wirklicher Vektor ausgegeben wird, d.h. abc(2). Bei mir kommt da immer " Zuweisung an Datenfeld nicht möglich" ...
Hoffe es hat einer eine Idee..
Vielen Dank

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Function & MMult
29.12.2006 23:44:41
ingUR
Hallo, @Willphisto,
Deine Fragestellung läßt offen, ob Du eine Tabellenfunktion oder eine VBA-interne Funktion erstellen möchtes, die ausgabe also in Zellen erfolgen soll oder aber als Rückgabewert.
Zudem wäre es für einen Antwortenden leichter, wenn er sich auf Deine bisherigen Ausarbeitungen beziehen könnte, denn zumindest bei mir will die Befehlsfolge nicht klappen. Also bitte das Makro hochladen, das biher "ganz gut klappt".
Sofern ein Vektor aus einer Funktion zurückgegeben werden soll, gäbe es die Möglichkeit, das Vektorfeld in der Aufrufparameterliste By Ref zu übergeben (ob als Rückgabewert einer Funktion ein Array möglich ist, habe ich in VB noch nicht geprüft; vermute dass es nicht geht, da keine Zeiger als Rückgabewert einsetzbar sind):
Pseudocode:
'Aufrufprogammteil:
sub Main()
Dim M1(1 to 3,1 to 3), v1(3)
Dim resV(ubound(M1))
'...Werte für M1 und v1 setzen
'Funktionsaufruf und auswerung des Rückgabewerts
if MVektor(M1, v1, resV) then
'gültiger Vektor
else
'Fehler bei Vektorermittlung
end if
end sub
Function MVektor( M1(), v1(), By Ref resV()) as boolean
MVektor = true
On Error Goto Fehlerausstieg
for i= 1 to ubound(resV)
resV(i) = SUMMENPRODUKT(M(r)*v1)
next i
exit function
Fehlerausstieg:
MVektor=false
end function
Andes würde es aussehen, wenn man die Ergebnisse in einen Zllenbereich übertagen möchte.
Gruß,
Uwe

Anzeige
AW: Function & MMult
30.12.2006 12:56:15
Luc:-?
Hallo Uwe & Wilphisto,
Felder sind als Rückgabewert einer (ud)Fkt durchaus möglich (Typ Variant). Das Problem scheint mir darin zu bestehen, dass das Feld bereits fix und fertig dimensioniert ist und dann die Zuweisung erfolgt. Das erzeugt in aller Regel die beschriebene Fehlermeldung. In solchen Fällen verwendet man deshalb eine (undimensionierte Feld-)Variable (vom Typ Variant). Also...
Dim Variable() As ... bzw Dim Variable As Variant.
Erstere kann man redimmen (ReDim Variable As ...) und schrittweise füllen, Letztere kann jeden beliebigen Inhalt (also auch Felder) durch Variable=... erhalten.
Guten Rutsch!
Luc :-?
Anzeige
AW: Function & MMult
30.12.2006 16:47:30
ingUR
Danke, @Luc:-?,
für den Hinweis. Damit kann also folgende Grundfunktion geschrieben werden:
Sub ....
Dim abc
'Aufruf aus Hauptprogramm
abc = resv(matrix(), vek())
End Sub
Function resv(matrix(), vek()) As Variant
Dim temv() As Variant
Dim r As Integer, s As Integer
ReDim tempv(UBound(matrix))
For r = 1 To UBound(vek)
For s = 1 To UBound(matrix)
tempv(r) = tempv(r) + matrix(r, s) * vek(s)
Next s
Next r
resv = tempv
End Function
Doch wozu diese Aktion von nutzen ist, wird @Willphisto entscheiden müssen, denn in abc wird doch ebenso ein Vektor geschrieben ( a(1,1),a(2,1), a(3,1) ). Allerdings wird mit der Funktion nun tatsächlich abc(1), abc(2), ... abc(i), ... abc(Ubound(matrix) angelegt und gefüllt.
Gruß,
Uwe
Anzeige
Bitte, gern geschehen! Gruß - owT
30.12.2006 18:44:48
Luc:-?
:-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige