Ne stocker que ce qui existe
Valoriser une option sur une grille remplace une équation différentielle par une suite de systèmes linéaires. Chaque nœud n'est relié qu'à ses deux voisins, donc la matrice du système est tridiagonale : trois diagonales de nombres et des zéros partout ailleurs. Un tableau dense n×n stocke n² nombres, presque tous nuls ; un format creux ne stocke que les 3n-2 qui comptent. scipy.sparse.diags([lower, diag, upper], [-1, 0, 1], format='csc') construit une telle matrice à partir de ses diagonales (la sous-diagonale a n-1 éléments, la sur-diagonale aussi, d'où une diagonale inférieure coupée pour commencer à la deuxième ligne et une supérieure pour finir avant la dernière colonne). Le format CSC est celui que veulent les solveurs creux.
Le schéma implicite remonte la valeur de l'option dans le temps en résolvant A V^new=V^old+bord à chaque pas. La matrice A ne change pas d'un pas à l'autre, donc on la factorise une fois avec scipy.sparse.linalg.splu(A) et chaque pas n'est que lu.solve(rhs), opération très bon marché pour une matrice tridiagonale. La condition au bord en S=0 (un put y vaut Ke^(-rτ)) entre dans la première équation, d'où la correction du premier second membre par lower[0] * K * exp(-r * m * dt). Avec un taux à 1 an de 4,47% et σ=25%, le put à la monnaie vaut 7,6987 en forme fermée ; le schéma donne 7,6958 sur une grille 200×200 et 7,6965 sur 400×400, à environ 0,003. Une grille de 2000 nœuds stocke 5 995 nombres sous forme creuse au lieu de près de 4 millions.
- Stockez les diagonales, pas les zéros :
sparse.diagsgarde 3n - 2 nombres au lieu de n au carré. - Factoriser une fois, résoudre plusieurs fois :
splupaie le coût au départ, puis chaque pas de temps n'est qu'unsolvebon marché. - Les bords vivent dans le second membre : la valeur connue au bord de la grille passe de l'autre côté de l'équation.
Lab : ce qui est noté
- Les trois diagonales20 pts
- La matrice creuse15 pts
- Valoriser avec une factorisation30 pts
- Creux contre dense10 pts
- L'erreur de valorisation5 pts
- L'étude sur un taux réel20 pts