Francesca Mazzia Dipartimento Interuniversitario di Matematica Università di Bari. MATLAB: analisi degli errori

Documenti analoghi
Francesca Mazzia Dipartimento Interuniversitario di Matematica Università di Bari. MATLAB: analisi degli errori

SCILAB: Analisi degli errori

Analisi degli errori

Interpolazione e approssimazione di funzioni

Analisi degli errori

Analisi degli errori

Alcuni esperimenti in Matlab relativi alla teoria degli errori

Matlab: complessità e stabilità degli algoritmi. Alcuni esempi.

Prove d esame Esercizi con Matlab

Esercitazione 1 Conversione di base

Alcuni esperimenti in Matlab relativi alla teoria degli errori (corso di Ingegneria dell Energia) 1

Laboratorio di Calcolo Numerico A.A

Esercitazione 1 Conversione di base

Capitolo 2. Equazioni non lineari. 2.1 Metodo di bisezione. 2.2 Ordine dei metodi

Laboratorio di Calcolo Numerico Laboratorio 4: Functions. Soluzione di Equazioni non lineari

19 FEBBRAIO SECONDA PARTE

Introduzione allo Scilab Parte 5: funzioni su matrici; intervalli, grafici.

Problema numerico. Relazione funzionale chiara e non ambigua tra dati iniziali e la soluzione. Dati iniziali e soluzione sono due vettori finiti

Cause di errore. Analisi dell errore. Cause di errore nel calcolo di un espressione razionale. Errore inerente. Esempio

Esercitazioni di Calcolo Numerico 09-16/03/2009, Laboratorio 1

MATLAB:Metodi Numerici per zeri di funzioni.

Corso di Analisi Numerica

Interpolazione. Lucia Gastaldi. DICATAM - Sez. di Matematica,

Esercitazione 2 Numeri finiti e propagazione dell errore

Emma Perracchione A.A. 2018/2019

Soluzione di Equazioni non lineari

Lezione 5, 5/11/2014

Analisi Numerica: Introduzione

Tracce di calcolo numerico 1

Elementi di Algebra Lineare

METODI NUMERICI - II canale (A.A )

Corso di Calcolo Numerico

Corso di Calcolo Numerico

Laboratorio 3. Integrazione numerica

Approssimazione dell esponenziale

Stabilità : radici secondo grado

Corso di Matematica per la Chimica

Matlab: complessità e stabilità degli algoritmi. Alcuni esempi.

Interpolazione. Lucia Gastaldi. DICATAM - Sez. di Matematica,

Aritmetica di macchina

CALCOLO NUMERICO. Francesca Mazzia. Calcolo degli autovalori. Dipartimento Interuniversitario di Matematica. Università di Bari

1. Calcolo dell indice di condizionamento di una matrice

Metodi di Ottimizzazione

Integrazione numerica

Laboratorio di Calcolo Numerico Laboratorio 5: Scrittura su FILE. Soluzione di Equazioni non lineari

MATLAB: Integrazione

Corso di laurea in Informatica Calcolo Numerico Prof.ssa L. D Amore 12 Dicembre 2008 Esercizi di riepilogo tipo prova d esame

Interpolazione. Lucia Gastaldi. DICATAM - Sez. di Matematica,

MATLAB - Programmazione - 2. Antonino Polimeno

Laboratorio di Matematica Computazionale A.A Lab. 3

Calcolo Numerico A.A Lab. 6

Complementi di Matematica e Calcolo Numerico A.A Laboratorio 9 Metodi numerici per equazioni differenziali ordinarie

Interpolazione polinomiale.

3. Elementi di Algebra Lineare.

Esercizi Elaborato (versione )

1 Polinomio di Taylor 1. 2 Formula di Taylor 2. 3 Alcuni sviluppi notevoli 2. 4 Uso della formula di Taylor nel calcolo dei limiti 4

Fondamenti di Informatica, A.A FILA A

Equazioni e sistemi non lineari

Laboratorio di Calcolo Numerico Laboratorio 3: Algoritmi stabili e instabili, Bisezione

Algoritmi stabili e instabili

4. Algoritmi per la soluzione di sistemi lineari.

Complementi di Matematica e Calcolo Numerico A.A

Complementi di Matematica e Calcolo Numerico A.A Laboratorio 11 Metodi numerici per equazioni differenziali ordinarie

Numeri floating point

Equazioni e sistemi non lineari

Calcolo del fattore di convergenza

Metodi Numerici per l Approssimazione degli Zeri di una Funzione

MATLAB c. Lucia Gastaldi Dipartimento di Matematica Lezione 4 (15 ottobre 2003)

Polinomi. I polinomi della forma

Interpolazione ed approssimazione di funzioni

Esercizi proposti di Analisi Numerica

Laboratorio di Calcolo Numerico

Introduzione al MATLAB c Parte 2

Analisi Numerica. Francesca Mazzia. a.a. 2006/2007. Integrazione. Dipartimento di Matematica. Università di Bari

INTRODUZIONE A MATLAB. Introduzione. Calcolatrice base. Calcolatrice base. Variabili predefinite o speciali. Variabili predefinite o speciali

Laboratorio di Matematica Computazionale A.A Lab. 4

ISTRUZIONI PER LA CONSEGNA DEI FILE MATLAB

Equazioni e sistemi non lineari

Complementi di Matematica e Calcolo Numerico A.A Laboratorio 12 Metodi numerici per equazioni differenziali ordinarie

Corso di Analisi Numerica

Analisi Numerica I Approssimazione polinomiale

Complementi di Matematica e Calcolo Numerico A.A

Calcolo Numerico (CdS in Matematica) A.A. 2012/13

Integrazione numerica

Laboratorio di Matematica Computazionale A.A Lab. 4

Calcolo Numerico - Prova Matlab 19 luglio 2013

Annamaria Mazzia. Corso di Metodi Numerici per l Ingegneria dispense e altro materiale su

Interpolazione polinomiale. Gabriella Puppo

Soluzione sistemi triangolari La seguente funzione risolve i sistemi triangolari inferiori

Sistemi lineari. Lucia Gastaldi. DICATAM - Sez. di Matematica,

Capitolo 1. Esercizi a.a Esercizi. Esercizio 1.1 Dimostrare che il metodo iterativo

x i f(x i ) Soluzione: Primo metodo : interpolazione polinomiale, approccio di Newton ; Tavola delle differenze divise :

Interpolazione. Corso di Calcolo Numerico, a.a. 2008/2009. Francesca Mazzia. Dipartimento di Matematica Università di Bari.

Transcript:

1 Francesca Mazzia Dipartimento Interuniversitario di Matematica Università di Bari MATLAB: analisi degli errori Come esempio per l analisi degli errori di arrotondamento scriviamo il seguente file di tipo script dal nome scriptrad.m. I commenti nel file vengono preceduti dal Script file esempio errori di arrotodamento eseguiamo per n volte la radice quadrata di x e per n volte il quadrato del risultato. Priamo x=100 n = input( n = ) l istruzione input visualizza la stringa e legge il dato di input da tastiera. xt = 100; x = 100; for i=1:n x = sqrt(x); for i=1:n

2 x = x.^2; visualizziamo l errore relativo err = abs(x-xt)/abs(xt) Adesso eseguiamo il file con diversi valori di n con la seguente istruzione >> scriptrad n = 10 n = 10 err = 6.3665e-014 >> scriptrad n = 20 n = 20 err = 1.1555e-010 >> scriptrad n = 30

3 n = 30 err = 2.2990e-007 >> scriptrad n = 40 n = 40 err = 1.8975e-004 >> scriptrad n = 60 n = 60 err = 9.9000e-001 >> xt xt = 100

4 >> x x = 1 Un altro esempio è il calcolo delle seguenti funzioni equivalenti x ( x 2 + 1 x) x x 2 + 1 x 2 x/( x 2 + 1 + x) con diversi valori di x. Scriviamo il seguente file di tipo script risultati diversi calcolando funzioni equivalenti x=logspace(0,9,500); r1=x.*(sqrt(x.^2+1)-x); r2=x.*sqrt(x.^2+1)-x.^2; r3=x./(sqrt(x.^2+1)+x); semilogx(x,r1, r.,x,r2, b.,x,r3, g- ); La funzione x=logspace(d1,d2,n) genera un vettore x con N elementi con spaziatura logaritmica da 10 d1 a 10 d2. L analoga funzione x=linspace(d1,d2,n) genera un vettore x con N elementi con spaziatura lineare da d1 a d2. L istruzione semilogy genera grafici in scala logaritmica. L istruzione plot genera grafici in scala lineare.

Il punto prima di un operatore aritmetico permette di eseguire l operazione sui vettori elemento per elemento. Eseguiamo il file >> scriptlimitefx 5 Calcolo del valore di un polinomio. p(x) = a 0 x N + a 1 x N 1 +... + a N Come possiamo valutarlo al variare di x? Un algoritmo standard è: px = a(n) for j=n-1:-1:0 px = px + a(j) * x^(n-j) Contiamo le operazioni aritmetiche: addizioni : N moltiplicazioni : 1 + 2 + 3 + N = N(N+1) 2 Ogni termine a j x N j è stato calcolato indipentemente dagli altri termini. Possiamo modificare l algoritmo calcolando ricorsivamente x j = x x j 1. L algoritmo diventa: px = a(n) + a(n-1)*x potenza = x for j=n-2:-1:0 potenza = x * potenza px = px + a(j) * potenza Le operazioni aritmetiche sono: addizioni: N moltiplicazioni : N + N 1 = 2N 1 Il costo è molto inferiore rispetto al primo algoritmo. Esempio: N=20 primo algoritmo: 210 moltiplicazioni

6 secondo algoritmo: 39 moltiplicazioni Un algoritmo ancora più efficiente è la regola di Ruffini-Horner, che esegue le moltiplicazioni in modo innestato ESEMPI: N = 2 : p(x) = a 2 + x(a 1 + a 0 x) N = 3 : p(x) = a 3 + x(a 2 + x(a 1 + xa 0 )) N = 4 : p(x) = a 4 + x(a 3 + x(a 2 + x(a 1 + xa 0 ))) Il numero di operazioni è, rispettivamente, 2, 3 e 4 moltiplicazioni. secondo algoritmo ne richiedeva 3,5 e 7. In generale: p(x) = a N + x(a N 1 + + x(a 1 + a 0 x)) ) L algoritmo: Il px = a(0) for j=1:n px = a(j) + px*x Le operazioni aritmetiche sono: addizioni: N moltiplicazioni : N L analisi degli algoritmi dal punto di vista del costo computazionale va sotto il nome di COMPLESSITÀ DI CALCOLO. L algoritmo di Horner non solo è meno costoso ma anche più stabile. Scriviamo tre funzioni Matlab per eseguire il calcolo del valore di un polinomio in un punto con i tre algoritmi. La prima funzione la chiamiamo pol1,m: function py=pol1(p,x) Calcolo del valore del polinomio: p(1)x^(n-1) + p(2) x^(n-2) +... + p(n-1) x + p(n)

7 nel punti contenuti nel vettore x n=length(p); py = p(n); for i=n-1:-1:1 py = py + p(i)*x.^(n-i); La seconda funzione la chiamiamo pol2.m: function py=pol2(p,x) Calcolo del valore del polinomio: p(1)x^(n-1) + p(2) x^(n-2) +... + p(n-1) x + p(n) nel punti contenuti nel vettore x n=length(p); xn = x; py = p(n); for i=n-1:-1:1 py = py + p(i)*xn; xn = xn.*x; La terza funzione la chiamiamo horner.m: function y=horner(p,x) Calcolo del valore del polinomio: p(1)x^(n-1) + p(2) x^(n-2) +... + p(n-1) x + p(n) nel punti contenuti nel vettore x n=length(p); y=p(1); for i=2:n y=x.*y+p(i);

8 Scriviamo anche il seguente file di tipo script dal nome scriptpol.m script file per confrontare vari algoritmi per il calcolo dei valori del polinomio (x-1)^6 p = [ 1-6 15-20 15-6 1]; x = linspace(0.995,1.005,1000); Algoritmo 1 fp_pol1 = flops; w1 = pol1(p,x); fp_pol1 = flops - fp_pol1 Algoritmo2 fp_pol2 = flops; w2 = pol2(p,x); fp_pol2 = flops - fp_pol2 Algoritmo di horner fp_horner = flops; y = horner(p,x); fp_horner = flops-fp_horner espressione fp_fun = flops; z = (x-1).^6; fp_fun = flops -fp_fun plot(x,y,.r,x,z, -g,x,w1,.b,x,w2,.y ) Eseguiamolo con l istruzione >> scriptpol

9 Approssimazione della derivata prima. Sappiamo che per definizione la derivata prima di una funzione f(x) è data da f (x) = lim h 0 f(x + h) f(x) h f(x + h) f(x) h con x ξ x + h. Da qui deriva che = f(x) + hf (x) + h2 2 f (ξ) f(x) h f(x + h) f(x) h = f (x) + h 2 f (ξ) La quantità τ(h) = h 2 f (ξ) si chiama errore di troncamento e dipe da h. Possiamo dire che l errore va a zero come O(h) cioè è limitato per h 0. Consideriamo il rapporto τ(h) h f(x + h) f(x h) 2h Utilizzando lo sviluppo in serie di Taylor abbiamo: f(x + h) f(x h) = = f(x) + hf (x) + h2 2 f (x) + h3 6 f (x) + h4 24 f (4) (ξ 1 ) f(x) + hf (x) h2 2 f (x) + h3 6 f (x) h4 24 f (4) (ξ 2 ) = In definitiva abbiamo = 2hf (x) + h3 3 f (x) + h4 24 (f (4) (ξ 1 ) f (4) (ξ 2 ))

10 f(x + h) f(x h) 2h = = f (x) + h2 6 f (x) + h3 24 (f (4) (ξ 1 ) f (4) (ξ 2 )) = = f (x) + O(h 2 ) Scriviamo un file di tipo script per eseguire lo studio dell errore nel calcolo della derivata prima. Chiamiamo tale file deriv.m: studio dell errore nel calcolo della derivata prima di exp(1) con le differenze in avanti e le differenze centrali h = logspace(-16,0,1000); approssimazione della derivata del primo ordine df_1 = (exp(1+h)-exp(1))./h; approssimazione della derivata del secondo ordine df_2 = (exp(1+h)-exp(1-h))./(2*h); grafico dell errore loglog(h,abs(exp(1)-df_1),.b,h,abs(exp(1)-df_2),.r ); L istruzione loglog genera grafici in scala logaritmica su entrambi gli assi del sistema di riferimento. Eseguiamo il file >> deriv