Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Cholesky decomposition

Forumthread: Cholesky decomposition

Cholesky decomposition
08.04.2018 21:44:48
snb
Greg und ich suchten nach einem VBA-Ansatz für eine Cholesky-Zerlegung.
Wir haben den Ansatz von G. Verschuuren auf YouTube gefunden.
Wir haben versucht, seinen Code zu verbessern (weniger Code, weniger Loops, schnellere Performance)
Gleichzeitig haben wir ein Werkzeug erstellt, um den Cholesky-Algorithmus in Pythons SciPy-Bibliothek in VBA zu integrieren.
Das Ergebnis finden Sie hier:
http:\\www.snb-vba.eu\VBA_Cholesky_en.html
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: im Index?
08.04.2018 23:07:22
Fennek
Hallo snb,
das klingt interessant.
Wie kann man diese Seite finden, wenn man die Startseite "snb-vba.eu" aufruft? Weder bei "Python" noch im "Index" habe ich einen link gefunden.
Danke
mfg
AW: im Index?
08.04.2018 23:28:54
snb
Hast du den Link nicht benützt ?
Hier auch:
http://www.snb-vba.eu/inhoud_en.html
Anzeige
Da fehlt ein einfaches Beispiel für Laien wie mich
09.04.2018 07:00:11
lupo1
Nehmen wir mal die VBA-Funktion {=F_snb()}. Ich habe die einfach mal wie folgt eingegeben:
G1:K5: {=F_snb(A1:E5)} (als Array, nicht als einzelne Matrixformel)
und dann die Ausgangsmatrix auf 5 verschiedene Weisen gefüllt:
  • diagonal A1 bis E5 und darunter
  • diagonal A1 bis E5 und darüber
  • diagonal B2 bis D5 und darunter
  • diagonal B1 bis E4 und darüber
  • alle 25 Zellen

  • aber am Ende kommt immer nur G1:K1: #WERT!
    Vielleicht dürfen ja auch nur bestimmte Werte eingetragen werden - wie gesagt, aus Wiki und Deinem Link zusammen werde ich auf die Schnelle noch nicht schlau.
    Anzeige
    http://taramath.de/tools/cholesky ...
    09.04.2018 07:46:02
    lupo1
    ... ist sehr hübsch als Beispielgeber.
    Nebenbei versteht man dann auch, was eine symmetrische Matrix ist (als Voraussetzung).
    http://taramath.de/tools/cholesky
    (klappt auch mit negativen Zahlen in der symm. Ausgangsmatrix)
    Die Fkt. läuft jedoch immer noch nicht.
    a) Die Sub würde sich (3x) mit Sheets(1) internationaler machen, als mit Sheet1. Ok, korrigiert.
    b) Dann läuft darinnen SQR auf einen Fehler - vermutlich aufgrund der negativen Werte in
    7 6 0
    6 15 -8
    0 -8 9
    was möglicherweise auch die Ursache für #WERT in der Fkt. ist.
    Ok: Eure Einschränkung war "positiv-symmetrisch". So kommt der Laie langsam weiter. Also versuche ich es mit ausschließlich positiven Werten:
    Gleicher Fehler (in der Zeile mit SQR).
    Any hints?
    Anzeige
    Zusätzliche Anregung: Symmetrie-Ereignis ...
    09.04.2018 08:43:14
    lupo1
    ... mit einem Worksheet_Change, welches bei Eingabe in a(i,j) sofort a(j,i) gleichsetzt.
    Wenn man schon sowieso mit VBA arbeitet.
    Pietje Puk of Jan Jansen of ...
    09.04.2018 09:05:15
    lupo1
    ... Lieschen Müller möchten das doch auch verstehen ;)
    AW: Da fehlt ein einfaches Beispiel für Laien wie mich
    09.04.2018 09:46:33
    snb
    @Lupo1
    Es gibt eine Beispieldatei im Webpage.
    Hast du die schon heruntergeladen ?
    Die Webseite ist für VBA.
    Und die Website ist für 'Smarties' (nicht für Laien).
    Man kann in VBA mit Functions arbeiten. Das geht anders als ein UDF.
    Ein VBA-Function UDF.
    Ein UDF würde für Excel-Anwender sein: das ist nicht das Publikum für www.snb-vba.eu.
    Ich kann hier keine Datei hochladen (weder .xlsb noch .zip).
    Du kannst in der Beispieldatei diese UDF erstellen.
    Function F_snb(sn)
    sn = sn
    ReDim sp(UBound(sn) - 1, UBound(sn) - 1)
    For j = 0 To UBound(sp)
    For jj = j To UBound(sp)
    y = sn(j + 1, jj + 1)
    For k = 0 To j - 1
    y = y - sp(j, k) * sp(jj, k)
    Next
    If j = jj Then sp(j, j) = Sqr(y)
    If j  jj Then sp(jj, j) = y / sp(j, j)
    Next
    Next
    F_snb = sp
    End Function
    
    Und in sheets("Cholesky")in A70:AC98 : Arrayformel : =F_snb(A1:AC29)
    Anzeige
    Danke ...
    09.04.2018 09:51:48
    lupo1
    ... auch bei Sulprobil sehe ich, dass das nicht so ganz einfach ist ;)
    ;
    Anzeige

    Infobox / Tutorial

    Cholesky Zerlegung in Excel


    Schritt-für-Schritt-Anleitung

    1. Matrix vorbereiten: Stelle sicher, dass du eine symmetrische, positiv definite Matrix hast, da dies die Voraussetzung für die Cholesky-Zerlegung ist.

    2. VBA-Entwicklungsumgebung öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

    3. Modul hinzufügen: Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)" > Einfügen > Modul.

    4. VBA-Code eingeben: Füge den folgenden Code in das Modul ein:

      Function F_snb(sn)
         sn = sn
         ReDim sp(UBound(sn) - 1, UBound(sn) - 1)
         For j = 0 To UBound(sp)
             For jj = j To UBound(sp)
                 y = sn(j + 1, jj + 1)
                 For k = 0 To j - 1
                     y = y - sp(j, k) * sp(jj, k)
                 Next
                 If j = jj Then sp(j, j) = Sqr(y)
                 If j <> jj Then sp(jj, j) = y / sp(j, j)
             Next
         Next
         F_snb = sp
      End Function
    5. Formel anwenden: In Excel kannst du die Funktion dann wie folgt verwenden:
      =F_snb(A1:E5) (als Arrayformel).


    Häufige Fehler und Lösungen

    • #WERT! Fehler: Dies kann auftreten, wenn die Matrix nicht positiv definit ist. Überprüfe die Werte in deiner Matrix.
    • SQR-Fehler: Wenn du negative Werte in deiner Matrix verwendest, wird dieser Fehler ausgelöst. Stelle sicher, dass deine Matrix nur positive Werte enthält.
    • Falsche Matrixgröße: Achte darauf, dass die Dimensionen der Matrix korrekt sind, da die Cholesky-Zerlegung nur für quadratische Matrizen funktioniert.

    Alternative Methoden

    Wenn du keinen VBA-Code verwenden möchtest, kannst du die Cholesky-Zerlegung auch mit Excel-Formeln durchführen, indem du die Funktion MMULT in Kombination mit TRANSPOSE verwendest, aber dies ist komplizierter und weniger effizient als die Verwendung von VBA.


    Praktische Beispiele

    Ein einfaches Beispiel für eine 3x3 Matrix:

    A B C
    4 12 -16
    12 37 -43
    -16 -43 98

    Die zugehörige Cholesky-Zerlegung in Excel würde dann durch die Eingabe von =F_snb(A1:C3) in eine Zelle erfolgen.


    Tipps für Profis

    • Verwende die Cholesky-Zerlegung in VBA für große Matrizen, um die Berechnung zu beschleunigen.
    • Achte darauf, dass du die Daten vor der Anwendung der Cholesky-Zerlegung überprüfst, um sicherzustellen, dass sie die erforderlichen Bedingungen erfüllen.
    • Nutze die Möglichkeit, Fehlerbehandlung in deinen VBA-Code einzubauen, um unerwartete Probleme zu vermeiden.

    FAQ: Häufige Fragen

    1. Was ist die Cholesky-Zerlegung?
    Die Cholesky-Zerlegung ist eine Methode zur Faktorisierung einer positiven definiten Matrix in das Produkt einer unteren und einer oberen Dreiecksmatrix.

    2. Wo kann ich ein einfaches Beispiel für die Cholesky-Zerlegung in Excel finden?
    Du kannst Online-Ressourcen wie die Webseite von snb-vba.eu besuchen, die Beispiele und Code-Snippets zur Cholesky-Zerlegung in Excel bereitstellt.

    3. Funktioniert die Cholesky-Zerlegung auch in Excel Online?
    Die Cholesky-Zerlegung kann in Excel Online verwendet werden, jedoch sind die VBA-Funktionen dort nicht verfügbar. Du musst alternative Methoden nutzen.

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Entdecke mehr
    Finde genau, was du suchst

    Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

    Suche nach den besten Antworten
    Unsere beliebtesten Threads

    Entdecke unsere meistgeklickten Beiträge in der Google Suche

    Top 100 Threads jetzt ansehen
    Anzeige