

























Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Appunti completi su calcolo numerico, di Borio, anno 2024, corso di ingegneria aerospaziale.
Tipologia: Appunti
1 / 33
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!


























Un problema numerico e funzionale tra dei dati “x” e dei risultati “y”. In un
problema ci sono i dati e i risultati, inoltre puo essere esplicito o implicito:
due numeri: y = x 1
); in sostanza non ho bisogno di conoscere la legge
perche ce l’ho gia;
equazioni dove la legge non e data).
Il problema si risolve implementando un algoritmo.
Un algoritmo e una sequenza finita di operazioni che ci permette di risolvere un
problema.
Esempio ricerca di algoritmo: sommare i primi n numeri interi
n∗(n + 1 )
2
Si noti come il secondo algoritmo sia piu efficacie del primo, questo dipende dal
costo computazionale. Il costo computazionale di un algoritmo e il numero di
operazioni prescritte.
La rappresentazione floating point di un numero “a” reale e a = (-1)
s
q
1 il numero e negativo;
Esempio: a = - 0,1. Analizzo le componenti:
La base N e la base del sistema di numerazione e P va da 0 a 9. Il computer
numera in binario, ovvero in base 2 (le cifre della mantissa sono 0 e 1).
I valori della mantissa vanno da 0 a N – 1 (se la base N e = 2 allora p va da 0 a 1;
se N e 5 allora p va da 0 a 4…).
La rappresentazione floating point di un numero non e unica; noi scegliamo la
rappresentazione normalizzata, ovvero con un N generico.
La rappresentazione floating point normalizzata di un numero e quella che
soddisfa le seguenti ipotesi: p >=
1
𝑁
e < 1, cioe
1
𝑁
<= p < 1. Nel caso di base 10 ho:
0,1 <= p < 1.
L’insieme dei numeri di macchina e:
s
0, a 1
, a 2
, a 3
, …a t
q
, a1 ≠ 0, L <= q <= U}
i parametri di spazio: t, L e U sono tutti dati dalla macchina.
Il numero piu piccolo (m) rappresentabile e ± 0,1 * N
L
. In mathlab il realmin e
2.2251e-308.
Il numero piu grande (M) rappresentabile e ± 0,(N-1)(N-1)(N-1)…. * (N-1) * N
U
In mathlab il realmax e 1.7977e+308.
La regione di underflow e l’intervallo aperto dei numeri in valore assoluto piu
piccoli del piu piccolo. Percio e (-m, m) \ {0}. Questi valori non si possono
rappresentare e il computer li vede come “0”, percio non si puo dividere un
numero per questi numeri.
La regione di overflow e l’intervallo aperto dei numeri in valore assoluto piu
grandi del piu grande. Percio e (-∞, - M) U (M, +∞). Questi valori non si possono
rappresentare e il computer li vede come “-∞” “+∞”.
Se voglio rappresentare un valore che non fa parte ne dell’overflow, ne
dell’underflow, ma che ha piu cifre significative di quelle permesse, devo tagliare
e arrotondare.
Le cifre significative sono le cifre della mantissa.
I computer adottano la tecnica “rounding to even”. La mantissa P di un numero
reale con piu di t cifre viene arrotondata alla mantissa p segnato (p con trattino
in alto) piu vicina e nel caso di equidistanza alla mantissa p segnata che ha
l’ultima cifra pari (l’ultimo bit e zero).
Esempi: scegliamo N = 10, t = 3:
|a 2
s
q
q-t
corrisponde alla distanza tra i due numeri di
macchina.
Da qui derivano gli errori di arrotondamento; un errore assoluto di
arrotondamento dati due numeri a e b (entrambi reali) e il valore assoluto della
differenza (|a – b|), ovvero quanto dista a da b in valore assoluto.
L’errore relativo (rispetto ad a) e |a – b| / |a|; analogamente rispetto a b e
|𝑎−𝑏|
|𝑏|
Se a 1
s
a 2
a 3
…a t
q
e a 2
s
a 2
a 3
…a t
q
allora:
|a 2 – a 1 |
|𝑎 1 |
N^q−t
| 0 .a 1 a 2 a 3 ...| ∗ N^q
|0.a 1
a 2
a 3
...| = C (costante) * N
C dipende da quanto vale il numero a: 0.a 1
a 2
a 3
… e tale che a 1
e diverso da 0,
percio 0.a1a2…at >= 0.a 1
= 0.1 e in questo modo ottengo 𝑝̅ >= N
con p
mantissa di un numero di macchina, percio
1
𝑝
<= N allora C <= N.
Quindi
|a 2 – a 1 |
|𝑎 1 |
1 - t
: ho maggiorato l’errore relativo dei numeri di macchina
(stima dall’alto), il piu grande errore relativo tra i numeri di macchina e N
1 - t
e si
chiama epsilon di macchina.
Esempio MathLab:
pi
ans = 3.
format long
pi
ans = 3.
Il motivo per il quale visualizzo massimo 16 cifre e perche lavoro con una
precisione di 10
, infatti t = 17.
Dato “a” un numero reale non di macchina, sia a il suo arrotondamento: se a > a 1
allora
1
𝑎
1
ā 1
; quindi:
|a – ā|
|a|
|a 2 – a 1 |
|a 1 |
1 - t
detto precisione di macchina.
Al massimo ci sono 52 cifre significative per la mantissa, mentre per l’esponente
massimo ci sono 11 bit (
11
possibilita per rappresentare il numero, che in base
10 mi da il realmax) e 1 bit per il segno.
Le quattro operazioni (+, - , *, /) che un computer puo fare generano degli errori,
non solo perche gli input devono essere arrotondati, ma anche perche il risultato
deve esserlo. Le operazioni di macchina hanno un obiettivo.
Ottengo un errore del tipo 10
Le operazioni di macchina sono +, - , *, / cerchiate (perche sono fatte con degli
arrotondamenti) e associano a due numeri di macchina il risultato arrotondato,
cioe a 1
. A ogni operazione segue un errore di arrotondamento del
risultato.
verifica le proprieta. Infatti l’ordine delle operazioni conta, in particolare la
proprieta associativa non e verificata.
definizione di somma).
Due espressioni matematiche sono equivalenti se danno risultati uguali, a meno
della precisione di macchina (eps/2 e l’ordine e 10
Esempio: N = 10, t = 4, a 1
= 0.5823, a 2
= 0.6214 (entrambi numeri di macchina).
Fare la somma dei due numeri e uguale a fare la somma effettiva, arrotondando il
risultato.
Risultato della somma = 1. 2037
, cioe da arrotondare = 1. 2037 ∗ 10
e
arrotondando ottengo = 0.1204 * 10
1
Il risultato e equivalente a quello che avrei dovuto ottenere?
Per trovare la risposta devo fare la differenza tra i due numeri (il risultato
ottenuto e quello che avrei dovuto ottenere) e trovare l’errore assoluto.
Da qui ricavo l’errore relativo e se il risultato e dell’ordine minore dell’errore di
macchina, allora il risultato e equivalente a quello effettivo.
La somma tra due numeri molto diversi tra loro, di cui uno molto piu piccolo
dell’altro, mi fa scomparire il numero piu piccolo.
Esempio: N = 10, t = 4, a 1
, a 2
Un algoritmo e numericamente stabile se l’errore sui risultati e circa la
precisione di macchina:
|𝑦−𝑦̅ |
|𝑦|
~ precisione di macchina.
Sia f(x 1
, x 2
) = x 1
= y, un problema numerico, prendo y = x 1
, allora:
Questo e il motivo per cui la cancellazione numerica da problemi. Se faccio il
prodotto ottengo un problema ben condizionato.
n
2
𝑖
𝑛 2
𝑙= 1
1/
ed e detta
“norma due”, norma euclidea (distanza in linea d’aria tra due punti del
piano).
𝑖
𝑛
𝑙= 1
, prendo la lunghezza piu grande dei cateti e
decido che e quella la distanza dall’origine.
𝑖
|, cioe il piu grande V.
Queste norme servono per calcolare gli errori.
e una norma di vettore, allora data A ∈ R
m,n
= sup V ∈ R
n
di
||AV||∗
||V||∗
, cioe ||AV||
n
2
TBD (to be defined)…
1
= max 1 <= j <= n di ∑ |aij|
𝑚
1
, cioe la somma dei valori assoluti degli
elementi, sommo in orizzontale e prendo il piu grande dei risultati.
Norme dello stesso tipo sono compatibili tra loro e corrispondono alle relative
norme di vettore.
mxn
, e:
o triangolare superiore se a ij
= 0 quando i > j;
o triangolare inferiore se a ij
= 0 quando i < j.
< j.
= 0 quando |i – j| > 1.
m,n
, la trasposta di A e A
T
m,n
tale che a
T
ij
a ji
{faccio un giro di 90°}.
n,n
, si dice matrice
simmetrica quando A
T
Data una matrice quadrata A ∈ R
nxn
e un vettore b ∈ R
n
, trovare x ∈ Rn, tale che
Ax = b. Se ꓱ la matrice inversa di A e A
e A*A
= I. A ha inversa det(A) ≠ 0.
Come si risolve un sistema lineare? {Posso fare combinazioni lineari e usare
l’algoritmo di eliminazione di Gauss per ottenere una matrice diagonale}.
Suppongo che det(A) ≠ 0 allora ꓱ! x.
Il condizionamento del sistema lineare e un numero K che dipende dai dati del
problema, quindi da A e B, K(A, B).
||x – 𝑥̅ ||
||x||
{errore relativo dei risultati} <= K(A, B)*(
||A – 𝐴
̅ ||
|
| 𝐴
| |
||b – 𝑏
̅
||
|
| 𝑏
| |
) {errore relativo
dei dati}.
Nota: det(A) ≠ 0 il sistema e risolvibile e ha soluzione unica.
Teorema:
Se Ax = b, det(A) ≠ 0. Siano 𝐴
e 𝑏
, con ||A – 𝐴
1
2 (|
| 𝐴
− 1
| |)
allora det(𝐴
) ≠ 0 e
quindi ꓱ! (esiste ed e unico) 𝑥̅ : 𝐴
Inoltre:
||x – 𝑥
̅ ||
||x||
− 1
||A – 𝐴
̅
||
||𝐴||
||b – 𝑏
̅
||
||𝑏||
) dove |
− 1
| e K(A).
Chiamiamo K(A)* = |A|* |A
|* condizionamento di A. Il condizionamento esiste
solo se A e invertibile.
1
b 1
a 1
n
bn
an
allora:
for i = 1_n:
i
bi
ai
Il costo computazionale e n (faccio n operazioni).
) b =
Per trovare la soluzione parto dal basso:
x n
bn
an
x n- 1
*x n
) 1/a n-1n- 1
x n- 2
*x n- 1
*x n
) 1/a n- 2 n- 2
allora la soluzione data sara:
x i
= 1/a ii
(b i
𝑖𝑗
𝑗
𝑛
𝑗=𝑖+ 1
) dove i e l’indice della variabile che sto calcolando.
Ciclo for:
for i=n, n-1,n-2,…..,1:
x i
=1/a ii
(b i
𝑖𝑗
𝑗
𝑛
𝑗=𝑖+ 1
algoritmo per la soluzione di sistemi triangolari diagonali. Algoritmo
sostituzione all’indietro.
Nota: posso dividere per a ii
, perche se il det() ≠ 0 , allora tutti gli elementi della
diagonale sono diversi da zero.
Esiste anche l’algoritmo di sostituzione in avanti:
ho una matrice triangolare inferiore: A = (
) , b = (
for i = 1_n
x i
= 1/a ii
(b i
𝑖𝑗
𝑗
𝑖− 1
𝑗= 1
Il costo computazionale delle matrici risolte con sostituzione in avanti o indietro
e sempre Ѻ(
𝑛
2
2
) {O grande}.
Calcolo del costo computazionale:
r 1
= (a 11
… a 1n
r 2
= (a 21
, a 22
, … a 2n
prendo a 11
e divido: r 2
= (r 2
a 21
𝑎 11
*r 1
) e ottengo 0 (rif. Algoritmo di eliminazione di
Gauss: ottengo una matrice che ha diagonale a 11
, a 22
, … a nn
Per matrici triangolari superiori:
x n
𝑏𝑛
𝑎𝑛
, x i
1
𝑎𝑖𝑖
𝑖𝑗
𝑗
𝑛
𝑗=𝑖+ 1
): sostituzione all’indietro, costo
computazionale: N ⇾ +∞ n
2
Data una matrice quadrata A ∈ R
n,n
, di det(A) ≠ 0, cerchiamo k ∈ R
n
, tale che il
prodotto Ak = b, con b ∈ R
n
Algoritmo di eliminazione di Gauss:
La matrice A 4x4:
Se faccio una combinazione lineare della riga r 2
= (a 21
, a 22
, a 23
, a 24
), b 2
il risultato
non cambia.
Step:
se a 11
≠ 0 ⇒ m 21
𝑎 21
𝑎 11
e al posto della riga r 2
⇽ r 2
r 1
I … viaggiano sulla diagonale e per ogni … cerchio gli elementi sotto di lui e
divido. Altrimenti scelgo l’elemento piu grande in valore assoluto sotto a kk
(sulla
stessa colonna) e scambio le righe.
E’ sempre possibile trovare un elemento non nullo sotto a kk
perche det(A) ≠ 0
(hp).
Applicando questo algoritmo trovo una matrice triangolare superiore:
Gauss
e equivalente ad A.
L’algoritmo di eliminazione di Gauss dice che dati A,b:
for k = 1 : n- 1
se a kk
≠ 0 #altrimenti scambio la r k
con una riga successiva in modo che a kk
≠ 0 e
poi eseguo il ciclo for sopra
for i = k + 1 : n
𝑖𝑘
𝑎
𝑖𝑘
𝑎
𝑘𝑘
ri ⇽ ri – mikrk
b i
⇽ b i
b k
modifico pure il termine noto.
Si puo dimostrare che non servono scambi in questi casi:
𝑖𝑖
𝑖𝑗
𝑛
𝑗= 1
𝑗 ≠𝑖
| somma dei valori
assoluti degli elementi della riga i-esima tranne quella diagonale.
𝑗𝑗
𝑖𝑗
𝑛
𝑖= 1
𝑗 ≠𝑖
n
T
Ax > 0.
Nella pratica lo scambio di righe si fa anche se a kk
≠ 0. Infatti ad ogni passo
dobbiamo calcolare: 𝑚
𝑖𝑘
𝑎
𝑖𝑘
𝑎
𝑘𝑘
Se a kk
e molto piccolo, questo potrebbe causare overflow (problema di stabilita)
e m ik
Per dare stabilita all’algoritmo si adotta la strategia del pivoting parziale: al
passo k del metodo si cerca l’elemento piu grande (in valore assoluto) tra a kk
e gli
elementi successivi sulla colonna k e si scambiano le righe.
N.B. se a ik
e piccolo rispetto ad a kk
allora m ik
= 0. Faremo un errore, ma
l’algoritmo procede, da un risultato.
Costo computazionale: Ѻ(n
3
A, b → (Gauss, n
3
G
= (matrice triangolare superiore), b
G
invece con sostituzione all’indietro (n
2
G
x = b
G
Algoritmo di eliminazione di Gauss: il moltiplicatore m ik
ha due indici, uno per le
righe e uno per le colonne.
Supponiamo che non si siano fatti scambi: chiamo U il risultato dell’algoritmo
(che mi da la matrice triangolare superiore) e con i moltiplicatori faccio una
matrice L = (
𝑖 1
𝑖𝑘
) e la diagonale e 1 in tutta la matrice. Ottengo così
una matrice diagonale inferiore.
Allora A = L*U dove la L e definita coi moltiplicatori e U definita dall’algoritmo di
Gauss. Questa operazione si chiama fattorizzazione della matrice.
L = tril
U = triu
Se invece sono stati fatti scambi?
Definisco la matrice di permutazione: una matrice di permutazione e una
matrice ottenuta a partire dall’identita scambiando le righe. Queste matrici
servono per lo scambio di righe.
Es: P =
come si nota ho cambiato le
righe di A; il prodotto matriciale PA mi fa scambiare le righe; se faccio AP
ottengo A di colonne scambiate.
In generale, esiste P di permutazione tale che: PA = LU.
1
, Ax 1
= b 1
e Ax i
= b i
Definisco y : Ux i
; allora:
𝑖
𝑖
𝑖
𝑖
allora: Ѻ(n
3
/3) + Ѻ(n
2
)*n.
x = A\b e il miglior modo per risolvere un sistema, per esempio per trovare la
posizione reciproca di rette, basta calcolare il rango.
permutazione).
positiva se x
T
Ax > 0 ∀x ∈ R
n
. Una matrice positiva ammette radice
quadrata. Se A e definita positiva allora P = I (identita) allora A = L*U.
T
= A allora U
T
T
= L*U (fattorizzazione migliorata).
Se A ∈ R
nxn
e definita positiva, allora esiste R triangolare superiore, ovvero
triu(R), tale che: A = R
T
Costo computazionale: Ѻ(n
3
/ 6 ), risparmio meta dei conti.
In matlab uso la funzione chol(), che mi fattorizza A in modo che A = R
T
Applicazione 1 – determinante
Se A e spd (simmetrica definita positiva):
T
*R; Ѻ(n
3
T
) * det(R) = det(R)
2
𝑖𝑖
𝑛
𝑖= 1
2
numero di operazioni.
Applicazione 2 – sistema lineare
Se A e spd allora dato b ∈ R
n
, se voglio calcolare x ∈ R
n
, tale che: Ax = b, allora:
T
*R; Ѻ(n
3
𝑅
𝑇
∗Rx
𝑦
= b {
𝑇
𝑛
2
2
𝑛
2
2
due sistemi triangolari; ermitiana:
simmetrica definita positiva. IL COSTO DEL SISTEMA E’ COMUNQUE
Ѻ(n
3
Applicazione 3 – inversa
Se A e spd:
T
*R; Ѻ(n
3
T
T
solo R
Se e triangolare, il costo e Ѻ(n
3
/ 2 ) + Ѻ(n
3
/ 6 ), sistemi lineari => Rc i
= e i
un
elemento della base canonica e c i
e la colonna i-esima Ѻ(n
2
/2)*n = Ѻ(n
3
Sia A ∈ R
m,n
, con m ≠ n, allora A = QR dove Q e una matrice ortogonale, ovvero
T
*Q = I, che ha come dim(Q) = m (righe di A), percio Q e mxm; invece R ha
dim(R) = mxn e r ij
= 0 se i > j.
Caso I
m > n, ho una matrice triangolare superiore; 𝑅 = (
) con 𝑅
nxn
Caso II
m < n, ho una matrice che sono per un blocco e triangolare superiore, mentre per
l’altro blocco ha numeri; trovo allora R = (𝑅
1
) operazione di Gram-Schmidt.
Teorema:
Sia A ∈ R
m,n
m ≥ n, rank(A) = n, ovvero il rango massimo; allora A = QR, 𝑅 = (
det(𝑅
) ≠ 0 con 𝑅
n,n
. Inoltre sia 𝑄
la matrice formata dalle prime n colonne di
= Q ( : , 1 : n), quindi 𝑄
m,n
, allora A = 𝑅
e si puo fare in modo che
𝑖𝑖
0 ∀i = 1, n. Costo computazionale: Ѻ(n
3
Se A ∈ R
n,n
non singolare e A = Q*R, det(R) ≠ 0.
Se voglio risolvere Ax = b, Q
T
T
T
ha un costo Ѻ(n
2
Data A ∈ R
m,n
con m ≥ n e dato b ∈ R
m
, puo non essere x ∈ R
n
tale che A*x = b.
Se Q
T
m
, ||Qr|| 2 = ||r|| 2 ovvero le matrici ortogonali sono
applicazioni lineari che NON cambiano la norma dell’input.
m
2
𝑇
∗ 𝑉 allora ||Q*r|| 2
𝑇
𝑇
𝑇
∗ 𝑟 dove
T
𝑇
∗ 𝑟 = ||r|| 2
Noi dobbiamo minimizzare ||Ay – b|| 2
e dal lemma so che:
||Ay – b|| 2
T
(Ay – b)|| 2
(y e un vettore generico che appartiene a R
n
) e quindi
T
Ay – Q
T
b|| 2
dove chiamo Q
T
Ay = Ry e Q
T
b = c (che sta per vettore colonna).
Quindi cio che devo minimizzare e ||Ry – c|| 2
Ry – c = (
)y – c con 𝑅
n,n
, y ∈ R
n
e y hanno la stessa dimensione) e c ∈ R
m
Analizzo a pezzi:
)y = (
) e 𝑅
*y e un vettore che ∈ R
n
, mentre 0 ∈ R
m-n
(ho
messo m – n perche il risultato deve fare tutto m).
Spezzo ora c:
c = (
1
𝑛
2
𝑚−𝑛
) l’ho scomposto per comodita in due blocchi.
Facendo la differenza tra vettori trovo:
1
2
) e questa sara la norma da minimizzare; siccome c 1
e c 2
sono noti
(quindi fissi), posso cambiare solo y.
Quindi: (||Ry – c|| 2
2
2
2
, la norma al quadrato di un vettore e
come la somma del quadrato di due sottopezzi. Dunque posso cambiare y in
modo da ottenere la norma di c 2
(che corrisponde alla minima norma ottenibile).
2
deve fare zero e per trovare y tale che faccia zero, risolvo un sistema
lineare:
sia x tale che:
x = c 1
(ho solo una soluzione possibile)
||Ax – b|| 2
) 𝑦 – c|| 2
dove c = Q
T
b
1
2
2
2
2
2
deve farmi come risultato la norma di c 2
= ||c 2
2
= min||Ay – b|| 2
∀y ∈ R
n
(soluzione unica).
Steps per risolvere l’algoritmo:
T
b
= c(1:n)
= R(1:n , 1:n) {vuol dire: “estrai i primi n elementi”).
x = c 1
Questi 4 punti sono la soluzione dell’algoritmo per la risoluzione del problema
dei minimi quadrati.
Quando rank(A) non e max perdo il quarto punto dell’algoritmo (quello trova x
tale che…) perche il problema ha ∞
𝑘
soluzioni del sistema lineare.
Supponiamo che esista una retta y = ax + b passante per tutti i punti:
(xi, yi) con i = 1:n