Tecniche Computazionali Avanzate Tesine Maya Briani & Davide Vergni Tesina 1: Il prezzo di un’opzione europea con il modello di Black-Scholes ♠ Scrivere un programma in C (o C++) per il calcolo del prezzo di un’opzione europea con maturità T e payoff φ(ST ), soluzione della seguente equazione differenziale alle derivate parziali, ∂V ∂V 1 ∂2V (S, t) + rS (S, t) + σ 2 S 2 2 (S, t) − rV (S, t) = 0, ∂t ∂S 2 ∂S (0.1) V (S, T ) = φ(S), dove r ed σ sono due costanti predefinite. Motivare la scelta del metodo numerico (alle differenze finite) con un’analisi di convergenza. (suggerimento: utilizzare il seguente cambio di variabile x = ln S) ♣ Scrivere un programma in C (o C++) per il calcolo del prezzo di un’opzione europea con maturità T e payoff φ(ST ), dato da V (ST , 0) = e−rT E [φ(ST )] , (0.2) dove il prezzo del sottostante S è descritto dalla dinamica dSt = rSt dt + σSt dWt , da cui segue, σ2 St = S0 exp (r − )t + σWt 2 con W moto Browniano standard. • Commentare e confrontare la soluzione esatta con le soluzioni ottenute con i due metodi precedenti per i seguenti esempi: Call Europea φ(S) = max(S − K, 0), K strike price V (0, t) = 0, V (S, t) ≈ S − Ker(T −t) per S → +∞, Put Europea φ(S) = max(K − S, 0), K strike price V (0, t) = Ker(T −t) , V (S, t) ≈ 0 as S → +∞, 1 Tesina 2: Onde piane ♠ Dato il seguente modello che descrive le vibrazioni trasversali di una corda di lunghezza finita L, fissata agli estremi 0 e L, utt − c2 uxx = 0 in ]0, L[×]0, +∞[, u(x, 0) = f (x), x ∈ [0, L], (0.3) u (x, 0) = g(x), x ∈ [0, L], t u(0, t) = u(L, t) = 0, t ≥ 0, dove u(x, t) rappresenta lo spostamento in direzione verticale nel punto x all’istante t, con condizioni di compatibilità f (0) = g(0) = f 00 (0) = 0, f (L) = g(L) = f 00 (L) = 0, descrivere un metodo alle differenze finite per il calcolo della soluzione numerica studiandone la stabilità e l’ordine di convergenza ed implementare lo schema in un programma C (o C++). ♣ L’equazione utt − c2 uxx = 0 è equivalente al seguente sistema vt − cvx = 0, (0.4) ut + cux = v. Scrivere un programma in C (o C++) per la soluzione numerica del sistema (0.4) con condizioni date dal problema (0.3). • Scrivere una funzione all’interno del programma per il calcolo dell’errore e dell’ordine di convergenza numerico ottenuto con i due metodi precedenti. Tesina 3: Equazione di Fisher-Kolmogorov ♠ Scrivere un programma in C (o C++) per il calcolo della soluzione numerica della seguente equazione differenziale alle derivate parziali non lineare ∂2u 1 ∂u (x, t) = D 2 (x, t) + u(1 − u), ∂t ∂x τ (0.5) u(−∞, 0) = 1, u(+∞, 0) = 0 ♣ Tale equazione (detta di Fisher-Kolmogorov) dà luogo a delle soluzioni di onda viaggiante p u(x, t) = f (x − vo t) dove vo = 2 D/τ . Calcolare numericamente vo come Z ∞ lim v(t) dove v(t) = ∂t u(x, t)dx (0.6) t→∞ −∞ Tesina 4: Attrattore di Lorenz ♠ Risolvere il seguente sistema di equazioni differenziali con un metodo Runge-Kutta 0 x = 10(y − x) y 0 = −xz + 28x − y 0 z = xy − 38 z (0.7) ♣ Questo sistema di equazioni differenziali genera una dinamica caotica la cui traiettoria, dopo un transiente iniziale, si svolge sul cosiddetto “attrattore di Lorenz”. Visualizzare l’attrattore. Data un’evoluzione per x(t), calcolare la FFT di x(t) in modo da identificare le frequenze fondamentali del moto. Se la tesina fosse per due persone: calcolare inoltre, l’entropia di Kolmogorov-Sinai dell’attrattore, e confrontare (opzionale) con la somma degli esponenti di Lyapunov positivi. 2 Tesina 5: Clustering ♠ Sviluppare un algoritmo non ricorsivo per risolvere il problema del clustering 2D (il riferimento è al site-percolation). Gli algoritmi più semplici fanno uso di liste. ♣ Studiare, al variare della size del sistema, la transizione di percolazione in funzione della probabilità che il singolo sito sia occupato. Tesina 6: Clustering metrico ♠ Partendo dall’algoritmo ricorsivo sviluppato a lezione per il calcolo dei cluster, modificarlo in modo che, accettando in input una matrice di distanze, dia come output i cluster di punti che sono raggiungibili facendo passi al più lunghi d. ♣ Visualizzare la struttura dei cluster in funzione di d. Questo significa vedere come cluster formati da punti distinti (se d → 0) si fondino a formare un unico cluster (se d → ∞). Tesina 7: FFT 2D ♠ Partendo dall’algoritmo ricorsivo sviluppato a lezione per il calcolo della FFT 1D, implementare la FFT 2D. ♣ Applicare la FFT 2D all’analisi di immagini in toni di grigio. Implementare un filtro passa basso ed un filtro passa alto su immagini in formato ppm (o in qualsiasi altro formato grafico). Tesina 8: Il problema dello zaino ♠ Sia dato uno zaino di volume V ed N oggetti di volume vi e di profitto wi (i.e., la macchinetta fotografica ha lo stesso volume della paperella di plastica, ma ha sicuramente un “profitto” diverso). La funzione costo complessiva del nostro zaino sarà F = N X wi xi con i=1 N X vi xi < V , i=1 dove con xi si è indicata la variabile binaria “ho inserito l’oggetto i nello zaino (xi = 1)” oppure “non ho inserito l’oggetto i nello zaino (xi = 0)”. ♣ Implementare un algoritmo di simulated annealing che massimizzi la funzione F mantenendo il vincolo che il volume degli oggetti inseriti nello zaino non superi il volume dello zaino. Tesina 9: PCA ♠ Data l’evoluzione temporale di N variabili casuali, calcolare numericamente la matrice di correlazione tra queste variabili. Implementare un algoritmo che calcoli le componenti principali della matrice di correlazione. ♣ Costruire un modello che riproduca i dati di input considerando solo le prime tre componenti principali. 3 Tesina 10: Random Numbers ♠ Implementare (utilizzando l’algoritmo di FFT studiato al corso) il test spettrale per verificare la bontà dei generatori di numeri random. ♣ Utilizzando i sistemi dinamici caotici (in particolare il modello detto “Gatto di Arnold”) sviluppare un generatore di numeri random e confrontarlo (mediante il test spettrale) con i generatori delle congruenze lineari. 4