Nur speichern, was da ist
Eine Option auf einem Gitter zu bewerten ersetzt eine Differentialgleichung durch eine Kette linearer Systeme. Jeder Knoten ist nur mit seinen zwei Nachbarn verbunden, die Systemmatrix ist also tridiagonal: drei Diagonalen aus Zahlen und sonst überall Nullen. Ein dichtes n×n-Array speichert n² Zahlen, fast alle null; ein dünnbesetztes Format speichert nur die 3n-2, auf die es ankommt. scipy.sparse.diags([lower, diag, upper], [-1, 0, 1], format='csc') baut eine solche Matrix aus ihren Diagonalen (Unter- und Oberdiagonale haben n-1 Einträge, deshalb wird die untere so gekappt, dass sie in der zweiten Zeile beginnt, und die obere so, dass sie vor der letzten Spalte endet). Das CSC-Format ist das, was die dünnbesetzten Löser wollen.
Das implizite Schema schreitet den Optionswert rückwärts in der Zeit, indem es in jedem Schritt A V^new=V^old+Rand löst. Die Matrix A ändert sich von Schritt zu Schritt nicht, man zerlegt sie also einmal mit scipy.sparse.linalg.splu(A), und jeder Schritt ist nur lu.solve(rhs), für eine tridiagonale Matrix sehr billig. Die Randbedingung bei S=0 (ein Put ist dort Ke^(-rτ) wert) geht in die erste Gleichung ein, weshalb die erste rechte Seite um lower[0] * K * exp(-r * m * dt) korrigiert wird. Bei einem 1-Jahres-Zins von 4,47% und σ=25% ist der At-the-money-Put in geschlossener Form 7,6987 wert; das Schema liefert 7,6958 auf einem 200×200-Gitter und 7,6965 auf 400×400, etwa 0,003 daneben. Ein Gitter mit 2000 Knoten speichert 5.995 Zahlen dünnbesetzt statt fast 4 Millionen.
- Diagonalen speichern, nicht Nullen:
sparse.diagshält 3n - 2 Zahlen statt n zum Quadrat. - Einmal zerlegen, oft lösen:
spluzahlt die Kosten vorab, danach ist jeder Zeitschritt ein billigessolve. - Ränder leben in der rechten Seite: Der bekannte Wert am Gitterrand wandert auf die andere Seite der Gleichung.
Lab: Was bewertet wird
- Die drei Diagonalen20 Pkt.
- Die dünnbesetzte Matrix15 Pkt.
- Bewerten mit einer Zerlegung30 Pkt.
- Dünnbesetzt gegen dicht10 Pkt.
- Der Bewertungsfehler5 Pkt.
- Die Studie mit einem echten Zins20 Pkt.