Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1696to1700
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
Inhaltsverzeichnis

Matrizen subtrahieren bzw. übergeben

Matrizen subtrahieren bzw. übergeben
23.06.2019 16:58:23
Bernd
Hallo Forum,
um noch etwas fitter in der Matrizenrechnung mit VBA zu werden habe ich zwei weitere kurze Fragen:
Frage 1: Übergabe der Werte einer Matrix an eine andere Matrix
wie übergebe ich elegant zum Beispiel in einer Schleife die Werte der neu berechnenten Matrix an die bisherige Matrix, also z.B.
Matrix_alt(i,j) = Matrix_neu(i,j)
Muss ich das mit einer Doppelschleife programmieren oder gibt es hier auch vba Funktionsbefehle? Wenn ja, wie lautet der VBA-Code des Befehls "Setze eine Matrix mit der anderen Matrix gleich". Kann man eventuell den Befehl mmult hier auch nutzen?
Frage 2: Subtrahieren einer Matrix
Muss ich das mit einer Doppelschleife programmieren oder gibt es hier auch vba Funktionsbefehle? Wenn ja, wie lautet der VBA-Code des Befehls "Subtrahiere eine Matrix von der anderen Matrix"
Besten Dank vorab
Bernd

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Matrizen subtrahieren bzw. übergeben
23.06.2019 17:04:37
Hajo_Zi
Hallo Bernd,
Teil 1
Sub Eintragen()
For LoI = 0 To UBound(StArr1)
StArr1(LoI) = StArr2(LoJ)
Next LoI
End Sub

Teil 2
Sub Eintragen()
For LoI = 0 To UBound(StArr1)
StArr1(LoI) = StArr1(LoI)-StArr2(LoJ)
Next LoI
End Sub

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
Die Beiträge werden auch ignoriert, es erfolgt keine Antwort.
AW: Matrizen subtrahieren bzw. übergeben
23.06.2019 17:09:40
Daniel
Hi
frage 1)
wenn die Matrix_alt genauso groß ist wie die Matrix_neu und alle Werte überschrieben werden sollen:
Matrix_alt = Matrix_neu
ansonsten Doppelschleife
frage 2)
Doppelschleife
wenn du schleifenfrei programmieren willst, gäbe es noch folgenden Workaround:
1. schreibe beide Matritzen in einen Zellbereich
2. kopiere die Werte des einen Zellbereichs und füge in mit .PasteSpecial xlpastevalues, Operation:=xlSubtract in den anderen Zellbereich ein
3. lies dann den neu berechneten Zellbereich wieder ins Array ein.
ist zumindest mal für dich in VBA schleifenfrei. dass es schneller ist als die Doppelschleife, glaube ich kaum.
Gruß Daniel
Anzeige
AW: Matrizen subtrahieren bzw. übergeben
23.06.2019 17:12:44
Bernd
Hallo Hajo und Daniel,
danke euch für die Antworten - das hilft mir sehr weiter und ich will ja gerade das Programmieren in VBA lernen und nicht wie bisher "schleifenfrei" programmieren...
BG
Bernd
AW: Matrizen subtrahieren bzw. übergeben
23.06.2019 17:17:16
Daniel
naja, zum lernen von Programmieren mit VBA gehört auch, dass man nicht nur die Möglichkeiten von VB kennt und nutzt, sondern auch die der Application, dh Excel.
prinzipiell versuche ich Schleifen zu vermeiden, wenn es gleichwertige Workarounds gibt, weil Schleifen einfach lästig sind, wenn man seinen Code im Einzelstep testen muss.
Gruß Daniel
Zyklische Verarbeitung (Schleifen) ist eine ...
24.06.2019 03:36:57
Luc:-?
…wesentlich Grundlage klassischer Pgmmierung, Bernd;
dass hochentwickelte und KI-Sprachen hier einfachere Lösungen anbieten und VBA auch Xl-Methoden nutzen kann, ändert nichts daran, dass man ihre Wirkungsweise verstehen sollte. Und was das Testen (im Einzelschritt) betrifft → man kann HaltePunkte auch geschickt setzen u/o mit Debug.Print arbeiten…
Morhn, Luc :-?
„Der beste Beweis für intelligentes Leben im Universum ist, dass noch niemand versucht hat, Kontakt mit uns aufzunehmen.“ H.Lesch, 2018, Sonneberg
Deshalb Intelligenz steigern mit …

Anzeige
AW: Zyklische Verarbeitung (Schleifen) ist eine ...
24.06.2019 18:56:53
Bernd
Hallo Luc:-?,
erst einmal vielen Dank für die ausführlichen Informationen, die ich mir in Ruhe ansehen muss - ist ein bißchen viel auf einmal. Naja, und Hajo hat so seine ganz eigene Art zu helfen :-), aber immerhin, er gibt sein Wissen weiter, auch wenn es vielleicht unter Experten nicht perfekt ist und manchmal vielleicht auch falsch ist. In dem von dir genannten Fall habe ich mich einfach über die schnelle Antwort gefreut, weil sie mir weitergeholfen hat und ohne zu prüfen, ob die Antwort richtig war - Hintergrund ist, dass ich ein Excelprogramm in ein VBA Makro umschreiben will. d.h. ich kann die Rechnungsergebnisse Schritt für Schritt mit meinem Excelprogramm überprüfen.
Scheint, dass du ein Experte bist auf gerade diesem Gebiet der Tensor- bzw. Matrizenrechnung.
Insofern würde mich natürlich schon interessieren, wie deine optimale Lösung aussieht im Hinblick auf
das Subtrahieren von zwei Matrizen
die Übergabe bzw. Umbenennung von einer Matrix
die optimale Multiplikation zweier Matrizen, wenn mmult funktioniert für den Anwendungsfall.
Komplexere Themen muss ich eh mit zwei Schleifen programmieren...
Beschäftigst du dich auch mit KI-Themen?
Beste Grüße
Bernd
Anzeige
OT: Beschäftigung
26.06.2019 01:37:57
Luc:-?
Morhn, Bernd;
vor 35 Jahren fand eine KI-Sprache in ihren Anfängen meine Aufmerksamkeit → PROLOG. 1990/91 wurde mir meine Mitgliedschaft dann zu teuer… Der Rest ist mehr oder weniger dem Zufall unterworfenes AllgemeinInteresse, bspw die übliche Abbildung des Tensor-Produkts als größere Matrix zum Zwecke effizienterer Speicherung.
Ansonsten befasse ich mich vornehmlich mit der Pgmmierung von VBA-basierten UDFs (user defined functions) und ihrer Anwendung bzw Einbindung in ZellFmln auch unter Nutzung von Xl-Standard-Fktt (UDFs sollen diese ergänzen und so ggf Fmln vereinfachen bzw Bestimmtes überhaupt erst ermöglichen).
Es gibt ja 2 Arten von SchleifenFor … = … To … (Step …) für Arrays mit beliebigem DatenTyp und indizierbare ObjektListen, sowie For Each … In … für Variant-Arrays und ObjektMengen. Es gibt auch 2 Arten von Arrays → das klassische rechteckige (reguläre) n-di­men­sionale VBA-Array und das allgemeinere, idR aus Tensoren aufgebaute Array. In VBA kann man Letzteres auch aus Ersteren auf­bauen, sogar irregulär. Für beide Formen gilt aber, dass sie in ein reguläres 2dim-Array transponierbar sein müssen, um auf ein Xl-Blatt komplett abgebildet wdn zu können (das macht nur Xl selbst automatisch bei Fml- [inkl UDF-gestützter], nicht bei reinen VBA-Ergeb­nis­sen!). Bei Letzterem können aber auch Teile (komplette Elemente-KoVektoren bzw -Matrizen) recht leicht angesprochen und abgebildet wdn.
Allerdings kann man den für ZellBereiche und Datenfelder (Arrays) unterschiedlichen automatischen Durchlauf des For-Each-Schlei­fen­Typs nicht von außen steuern, sondern muss ihn kennen und ggf benötigte Speicherungsindizes nach Bedarf bilden, wobei auch die MatrixForm der Ausgabe beliebig festgelegt wdn kann. Weitere Unterschiede zwischen beiden SchleifenTypen gibt's dann beim Durchlauf diskontinuierlicher Bereiche, die beim 1.Typ eine zusätzliche Schleife erfordern.
Alles Weitere (die 3 speziellen Pktt) im unteren Thread.
Gruß, Luc :-?
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige