Sei sulla pagina 1di 3

LABORATORIO DI PROGRAMMAZIONE E CALCOLO Docente Elisabetta Carlini A.A. 2012-2013 Foglio di esercizi N.

11 bis (Esercizi Facoltativi) (a cura di Andrea Pugliese) Dovete strutturare i programmi dei seguenti esercizi in funzioni Esercizio 1 (Metodo di Gauss per lInversa) Data una matrice A Rnn non singolare, e denita la matrice identit` a In , tale che, per ogni i, j = 1, . . . n, Iij = 1 se i = j e Iij = 0 se i = j , si denisce inversa di A la matrice X = A1 tale che risulta AX = In Indicate rispettivamente con e(1) , e(2) , . . . e(n) le colonne della matrice In e con x(1) , x(2) , . . . x(n) le colonne della matrice X = A1 , per determinare gli elementi di X = A1 ` e necessario risolvere gli n sistemi lineari Ax(j ) = e(j ) per j = 1, 2, . . . n

Chiaramente, poich e la matrice dei coecienti ` e sempre la stessa, la riduzione a scala della matrice A pu` o essere eseguita una volta per tutte, modicando opportunamente anche i vettori e(j ) che sono i termini noti dei sistemi lineari, arrivando quindi ad n sistemi lineari triangolari superiori (che andranno risolti con il metodo delle sostituzioni allindietro). Scrivere un programma che prende in input un intero positivo n > 0 e gli elementi di una matrice A di dimensione n n e, dopo aver vericato se la matrice ` e non singolare, calcola gli elementi della matrice A1 utilizzando il metodo di Gauss con pivotazione parziale per righe. Osservazione Una volta portata a termine la riduzione a scala si ottiene triangolare superiore, il cui determinante (a meno del segno, una matrice A che dipende dal numero di scambi di righe eseguiti) ` e dato dal prodotto , le cui colonne degli elementi sulla diagonale principale, ed una matrice I ( j ) e sono i termini noti dei sistemi lineari da risolvere. Esempio 1 2 1 0 2 3 0 1 2 3 0 1 /2 x11 x12 x21 x22 2 3 0 1 1 2 1 0 = 0 1 1 1/2 1 2 3 0 0 1/2 1 1/2 A1 = 3 2 2 1

Esercizio 2 (Metodo Regula Falsi per la ricerca degli zeri) Consideriamo una funzione continua f (x) che si annulla in punto z . Per approssimare z tale che risulta f (z ) = 0 si possono utilizzare diversi metodi con propriet` a e velocit` a di convergenza dierenti, ricordiamo ad esempio: Metodo di Bisezione: Parto da un intervallo [a, b] tale che f (a)f (b) 0 - Calcolo il punto medio c = (a + b)/2: - Se f (c) = 0 allora z = c - Se f (a)f (c) < 0 allora pongo b = c e ricomincio - Se f (c)f (b) < 0 allora pongo a = c e ricomincio Metodo delle Secanti: Fisso due punti a e b sucientemente vicini alla radice che sto cercando (avendo eventualmente individuato in precedenza un intervallo che la contiene) - Determino la retta passante per a e b e cerco la sua radice c=a - Se f (c) = 0 allora z = c altrimenti pongo a = b, b = c e ricomincio. Il metodo della falsa posizione, o metodo regula falsi, pu` o essere visto come una variante dei due metodi appena descritti. Metodo Regula Falsi: Parto da un intervallo [a, b] tale che f (a)f (b) 0 - Determino la retta passante per a e b e cerco la sua radice c=a - Se f (c) = 0 allora z = c - Se f (a)f (c) < 0 allora pongo b = c e ricomincio - Se f (c)f (b) < 0 allora pongo a = c e ricomincio Chiaramente poich e il valore c che troviamo ` e una approssimazione della radice esatta della funzione f (x), non possiamo aspettarci che risulti esattamente f (c) = 0, di conseguenza dobbiamo introdurre un criterio darresto che permetta al metodo iterativo di fermarsi non appena lerrore ` e pi` u piccolo di una tolleranza ssata. ab f (a) f (a) f (b) ab f (a) f (a) f (b)

Scrivere un programma che prende in input una funzione f (x), un intero positivo 0 < Nmax 1000, gli estremi di un intervallo [a, b] R ed un numero reale e, se f (a)f (b) 0, approssima la radice z [a, b] dellequazione f (x) = 0 utilizzando il metodo della falsa posizione entro la tolleranza , senza superare il numero Nmax di iterazioni. Il programma dovr` a fornire in output lapprossimazione della radice ed il numero di iterazioni eseguite. Dovr` a inoltre stampare, ad ogni iterazione, il numero delliterazione, lapprossimazione della radice e il valore della funzione in tale approssimazione. Criterio darresto: Fissata la tolleranza (ad es. 103 ) potete scegliere di arrestare il metodo iterativo secondo uno dei seguenti criteri (o utilizzarli entrambi!): i) |f (c)| (dove f (c) ` e il valore della funzione calcolato nellapprossimazione della radice alliterazione corrente) ii) |cnew cold | (dove cnew e cold sono, rispettivamente, lapprossimazione della radice alliterazione corrente e alliterazione precedente) Scelta della funzione: La funzione f (x) di cui si cerca la radice deve essere scelta dallutente mediante un apposito men` u in cui compaiono le seguenti opzioni (tra parentesi sono riportate le radici reali esatte o approssimate) 1. f (x) = x 2 ( = 2) 2. f (x) = x2 2 ( = 2) 3. f (x) = x3 2 ( = 3 2) 4. f (x) = x3 2x2 + 3x 4 ( 1.65) 5. f (x) = x5 6x3 + 3 (1 2.48, 2 0.82, 3 2.40) 6. f (x) = 1 2xe 2 (1 0.71, 2 4.30) 7. f (x) = x ex ( 0.65) 8. f (x) = log x + x ( 0.56) 9. f (x) = x2 sin x (1 0, 2 0.87) 10. f (x) = 2x7 3x5 + x4 5x + 1 (1 1.53, 2 0.20, 3 1.33)
2 x