Laboratorio di Calcolo Numerico Lezione 3 Padova, April 4th 2016 F. Piazzon Department of Mathematics. Doctoral School in Mathematical Sciences, Applied Mathematics Area
Outline Lab. 3-2 of 16 1 Costrutti Logici: for, while e if 2 Matlab: m-file di tipo function
Lab. 3-3 of 16 Calcoli iterativi Supponiamo di voler eseguire un operazione identica su delle variabili di valore noto ma che può variare più volte, ma un numero noto di volte. Esempi Dividere un numero x per y 1, y 2,..., y n, Valutare la radice 2 n -esima del numero x, Dato x 0 e la funxione f valutare x k+1 = f(x k ) per k = 1, 2,..., n. In questi casi si ricorrerà in Matlab (e praticamente in ogni linguaggio di programmazione) al ciclo for
Sintassi ciclo for Lab. 3-4 of 16 Sintasssi for k=v istruzione 1 istruzione 2......... istruzione m end Dove v è un vettore di valori per il parametro k. viene posto k = v(1) e vengono eseguite istr 1,... istr m, poi k = v(2) ed eseguite le istruzioni,...... non serve cambiare il valore di k a mano (si veda poi il ciclo while). non serve inizializzare la variabile k.
Esercizi Elementari Lab. 3-5 of 16 Es. 1 La successione di Fibonacci è definita come x 0 = 1 x 1 = 1 x k+1 = x k + x k 1 k 2. Si scriva un m-file che calcoli i primi 100 numeri di Fibonacci. Es. 2 (svolto) La serie di Mengoli è S = S n = n k=1 1 k(k+1) = k=1 n n+1 1. 1, è noto che k(k+1) Si implementi un m-file che calcoli la somma di Mengoli per un dato n. Cosa succede per n molto grande?
Esercizi Evoluti Lab. 3-6 of 16 Es. 3 (svolto) E noto che sin(x) x per x 0. Si usi la formula di duplicazione del seno per ricavare la formula di triplicazione sin(3α) = 3 sin(α) 4 sin 3 (α), poi si implementi un m-file che approssimi il seno di x [0, π] utilizzando le formule sopra. Si valutino e plottino gli errori delle approssimazioni successive. Si migliori poi l approssimazione usando lo sviluppo di Taylor del seno in 0 arrestato a x 5. Es. 4 (per casa) Si faccia lo stesso per il coseno.
Cancellazione Numerica Lab. 3-7 of 16 In aritmetica finita in generale f(x) := (1 + x) 1 x. Esempio (svolto) Si scriva un m-file che valuti f in x = 10 k per k = 0, 1,..., 15 e per x = 2 z k, x = 3 w k, dove z k := ceil(k log(10)/ log(2)) e w k := ceil(k log(10)/ log(2)) sono scelti per rendere gli errori comparabili. Si producano grafici degli errori relativi.
Costrutto logico while Vogliamo ripetere operazioni un numero ignoto di volte usiamo il ciclo while. Sintasssi di while while condizione logica istruzione 1 istruzione 2......... istruzione m end la condizione logica può dipendere da variabili su cui vengono compiute operazioni se la condizione logica dipende da un numero di iterazioni la variabile di iterazione va avanzata manualmente e dichiarata prima del ciclo. uguale logico si scrive k ==.... Lab. 3-8 of 16
Esempi Elementari Lab. 3-9 of 16 Il programma n=10; k=1; while k<=n disp(k) k=k+1 end è del tutto equivalente n=10; for k=1:n disp(k) end tranne che per il fatto che dopo il ciclo while k = n + 1 mentre nel for k = n.
Radice quadrata Lab. 3-10 of 16 Algoritmo di Erone L algoritmo di Erone per il calcolo di x = α è definito come x 0 = r; x k+1 = 1 2 (x k + r/x k ) k 1, dove si sia scelto r 2 /9 α. Si implementi tale aloritmo includendo un ciclo (while) che testi la condizione su r ed eventualmente porti modifiche alla variabile. Si calcoli con questo algoritmo la radice di 2 con 15 passi e si plottino i risultati riguardo agli errori delle iterazioni.
Costrutto if (elseif else) Lab. 3-11 of 16 Si vogliono eseguire operazioni opzionali (solo se si verificano certe condizioni) Sintasssi if condizione logica 1 istruzione 1 istruzione 2 elseif condizione logica 2 istruzione 3 istruzione 4 else......... istruzione m end
Esercizi Lab. 3-12 of 16 Divisione Intera Si implementi l algoritmo della divisione intera x/y (ciclo while) per x, y assegnati con un pre-test su x y. Erone modificato Si modifichi il programma precedente sull algoritmo di Erone per testare in anticipo se il radicando è positivo. Se è negativo il programma deve stampare a schermo un messaggio di errore.
Functions in Matlab Possiamo scrivere m-file che prendono dati in entrata (diversi volta per volta) e restituiscono dati in uscita (o compiono operazioni), senza dover modificare manualmente ogni volta le variabili. Questi mfile si chiamano function. Sintassi function function [out 1,..., out m ]=nomefunzione(in 1,..., in n ) % help...... istruzioni istruzioni che calcolano out 1,..., out m return (opzionale) scrivere sempre l help!! nomefunzione e nomefunzione.m variabili locali tutti gli output devono venir assegnati function handle le function non si eseguono, si chiamano Lab. 3-13 of 16
Esercizi elementari Lab. 3-14 of 16 sign(x) Si scriva una semplice function che controlla se un numero in input è positivo, stampa a schermo il risultato e restituisce 1 se il num è positivo, 1 se il numero è negativo e 0 se il numero è nullo. Analisi statistica Si scriva una function che preso un vettore in entrata restituisca media aritmetica, media geometrica, varianza, minimo e massimo.
Esercizi avanzati Lab. 3-15 of 16 Erone in Function Si modifichi la radice di Erone implementata precedentemente in uno script perchè prenda il radicando in entrata e restituisca il valore della radice in uscita. Divisione di Newton-Raphson Si scriva una function che implementi la divisione di Newton Raphson vista a lezione, il guess iniziale viene preso in input. Poi si scriva un m-file che usi la divisione intera per trovare il guess iniziale e lanci la divisione di Newton Raphson implementata per trovare il quoziente esatto.
Lab. 3-16 of 16 Esercizio Importante Iterazioni di Punto Fisso 1 Si implementi l iterazione di punto fisso con criterio di arresto dello scarto in uno script con la funzione ϕ definita all interno dell m-file stesso. 2 Si modifichi lo script per diventare una function che prenda in entrata, tra gli altri input, il function handle della ϕ. 3 Si risolva sin(x) = x con la function scritta precedentemente.