Esercizi per casa

25 novembre 2007

1 Introduzione a Matlab

1. Facoltativo. Si implementi una funzione fatt che calcola il fattoriale fatt di un numero naturale , ricordando che

fatt( ) : ! : 1

La si utilizzi per calcolare mediante un ciclo for i fattoriali dei numeri naturali tra 1 e 20. Si visualizzino i risultati ottenuti. Per gli stessi numeri naturali si usi la funzione di Matlab gamma per valutare ( ). Che relazione sussiste tra ( ) e fatt( )?

2. Facoltativo. Si utilizzi la funzione fattoriale per calcolare il binomiale

\begin{matrix} \\ \end{matrix}\frac{!}{!( )!}

3. Facoltativo. Si considerino le matrici di Hilbert _{}per 1 2 20. Si osservi cha la loro costruzione risulta facilitata dal comando hilb (si chiami l’help di Matlab per ulteriori informazioni). Utilizzando un ciclo for, si calcoli al variare di il determinante ( _{}) (via il comando det). Immagazzinare ( _{}) in un vettore e visualizzare al variare di tale risultato sul monitor (via il comando fprintf). Cosa succede se al posto di det(A) utilizzo prod(eig(A))? Ricordare che eig(A) fornisce il vettore degli autovalori _{1} _{}della matrice quadrata (avente righe e colonne) e che

( ) _{1} _{}

2 Esercitazione sulla propagazione degli errori

1. Testare il codice radicesecgrado.m per l’esempio in cui

p=4.999999999995*10^(+4); q=10^(-2); sol=10^(-7);

2. Si calcoli l’errore relativo tra 1 e il valore che si ottiene valutando in Mat-

lab/Octave

\frac{(1 ) 1}{}

con 10^{1} 10^{2} 10^{15}. Si consideri poi 8 8817841970012523 16 e si calcoli la medesima quantitá, giustificando i risultati ottenuti.

Suggerimento: quanto vale eps?

3. Siano : tane : arctan. Si consideri la funzione composta

( ) : ( ( )) tan(arctan( ))  (  )

Si calcolino

10^{}per 20 40 e 0 0 01 0 02 1

e si valuti l’errore relativo compiuto. Si puó dire che anche numericamente tan(arctan( )) ?

3 Esercitazioni sulla complessità degli algoritmi

1. Si assegni A=rand(n) per 10 25 50 e quindi si digiti sulla shell di Matlab/Octave

                 [U,deter]=meg(A); s=deter;

Di seguito si confronti il valore di s con quello di t=det(A) (ricordiamo che det è un comando Matlab che calcola il determinante di una matrice). Quante cifre hanno s e t in comune? Qual’è l’errore relativo rel: / ? E quello assoluto abs : ?

2. Si implementino i due algoritmi proposti per il calcolo della potenza di matrice tramite due functions (senza usare l’operatore ) e si calcoli l’errore relativo in norma infinito rispetto all’elevamento a potenza di Matlab o GNU Octave per diverse matrici e potenze ( 5 10 15 50 e 5 10 15 50). Si confrontino poi i tempi di esecuzione delle due functions per il calcolo di 100, con A matrice di numeri casuali di ordine 200.

4 Soluzione numerica di equazioni nonlineari

1. Si risolva numericamente il problema di calcolare la radice cubica di un numero, col metodo di Newton.

2. Facoltativo. Si risolva numericamente il problema di calcolare lo zero di ( ) arctan( ), col metodo di Newton partendo prima da _{0} 1 2 ed una seconda volta da _{0} 1 4. Convergono in entrambi casi?

3. Facoltativo. Nota la soluzione del problema ^{2} 0 (si ottiene con il comando sqrt(a)) si stimi la velocita’ di convergenza del metodo di Newton (??) per il calcolo della radice quadrata di un numero. A questo proposito conoscendo _{1} , _{}, _{1} e ritenendo costante la costante asintotica di errore calcolare un’approssimazione di , via il calcolo di un logaritmo.

5 Interpolazione polinomiale

1. Facoltativo. Effettuare un programma Matlab che calcoli il valore assunto in 1 09 dal polinomio interpolatore della funzione log relativamente ai punti 1, 1 1, 1 2. E’ buona l’approssimazione fornita dal polinomio interpolatore?

Suggerimento: si noti che

• il programma è una variante di quanto visto in esperimento.m, per una adeguata scelta dei nodi x, dei valori y, del punto s;

• eliminare la parte relativa ai nodi di Chebyshev-Gauss-Lobatto;

• il plot non è molto indicativo;

• siccome il comando norm(v,inf) calcola per _{}la quantità

max_{}_{}

visto che si deve valutare l’errore su un solo punto, il comando norm(...,inf) in esperimento.m può essere sostituito da abs(...) (rifletterci sopra);

• la funzione log è predefinita in Matlab/Octave e quindi non serve ridefinirla come funzione.

2. Facoltativo. Aiutandosi con Matlab/Octave eseguire un programma che calcoli l’interpolante della funzione

( ) : exp( )

relativamente alle ascisse 1, 1 1 ed 1 2. Si calcoli il polinomio di secondo grado _{2} che interpola tali punti, e lo si valuti in 1 09. Fornire una stima dell’errore e verificarne la bontà rispetto al risultato esatto.

3. Facoltativo. Fissati 1, 1, 15, si plottino i nodi di Chebyshev-Gauss. Si suggerisce di utilizzare la function cheb.m e per il plottaggio un comando del tipo

plot(x,y,'r-o')

Ricordiamo che

• l’opzione r-o (a) disegna un cerchietto rosso per ognuno dei punti ( _{1} _{1}), , ( _{}_{}),

, ( _{}_{});

(b) per 1 1, unisce i punti ( _{}_{}), ( _{1} _{1}) con un segmento rosso.

• essendo importante disegnare solo le ascisse (e non le ordinate), quali ordinate si può porre

y=zeros(size(x));

Una volta completato l’esercizio si osservi la particolare disposizione dei nodi di Chebyshev-Gauss. Si accumulano verso gli estremi dell’intervallo?