Il condizionamento fa riferimento all'errore inerente. Se

sono elevati in modulo, allora a un piccolo errore

sulla rappresentazione dei dati corrisponde un grande errore su

, e il problema è
mal condizionato.
Esempio 1.7
Consideriamo un'equazione del tipo

Per calcolare le radici si ha la formula

.
Se
, per calcolare
sto sommando due quantità quasi uguali, e quindi c'è un grande errore di cancellazione. Invece il calcolo di
non dà problemi.
Viceversa, se
, l'errore di cancellazione si ha per
. Allora posso rimodellizzare il problema: se
, allora calcolo
con la formula solita senza avere problemi, invece calcolo
ricordando che

quindi

e il problema torna ad essere stabile, dopo essere stato rimodellizzato.
La stabilità è connessa all'errore algoritmico, e riguarda l'ordine esatto con cui vengono fatte le operazioni. L'errore algoritmico viene generato nella valutazione di
.
è una funzione razionale, cioè ha un'espressione analitica data da un numero finito di operazioni di somma e sottrazione.
L'errore algoritmico è una combinazione lineare degli errori locali generati nelle singole operazioni.
Simbolicamente,

dove

è indipendente dalla round of unit, e tiene conto della combinazione lineare dei coefficienti.
Se ho un problema mal condizionato, l'analisi dell'errore algoritmico è inutile, perché questo errore è trascurabile rispetto all'errore inerente.
Esercizio 1.2
Analizzare l'errore nel calcolo della funzione

Chiamiamo

l'algoritmo

che è dato dai seguenti passi:
- Pongo
;
- Pongo

- eseguo l'operazione
.
Nella moltiplicazione tengo conto che
, mentre nella sottrazione si ha
e
.
Rappresento graficamente l'algoritmo:


Vogliamo rappresentare la formula generale come somma di errore algoritmico e inerente.

e sostituendo a

le loro espressioni in termini di

si ha:

I primi due termini rappresentano l'errore inerente, mentre gli altri tre rappresentano l'errore algoritmico.
Se

è piccolo, il problema è mal condizionato, e l'errore inerente domina.
Esercizio 1.3
Ricavare lo stesso risultato per via analitica.

![{\displaystyle =\mathrm {fl} \{\mathrm {fl} [\mathrm {fl} (x)*\mathrm {fl} (x)]-\mathrm {fl} [\mathrm {fl} (y)*\mathrm {fl} (y)]\}}](//restbase.wikitolearn.org/it.wikitolearn.org/v1/media/math/render/svg/d38deff955395ecf731c896d5fc27a11e273e23c)
![{\displaystyle =\mathrm {fl} \{\mathrm {fl} [(1+\varepsilon _{x})*|x|*(1+\varepsilon _{x})*|x|]-\mathrm {fl} [(1+\varepsilon _{y})*|y|*(1+\varepsilon _{y})*|y|]\}}](//restbase.wikitolearn.org/it.wikitolearn.org/v1/media/math/render/svg/bc48d889737933cea594a986bd225da6539643ba)



e al primo ordine:



Valuto l'errore relativo:




e si ottiene lo stesso risultato di prima.
Rimodellizzo il problema applicando l'algoritmo 2.



Assumo che sto facendo conti sui numeri macchina, perché l'errore inerente si può calcolare a parte, cioè pongo
. Graficamente ottengo:

quindi

e allora, siccome

ottengo:


Esercizio 1.4
Ricavare lo stesso risultato per via analitica.

![{\displaystyle \mathrm {fl} [\mathrm {fl} (x(1+\varepsilon _{x})+y(1+\varepsilon _{y}))*\mathrm {fl} (x(1+\varepsilon _{x})-y(1+\varepsilon _{y}))]=}](//restbase.wikitolearn.org/it.wikitolearn.org/v1/media/math/render/svg/289678ca5cf6dc429689c8aa34550198909cd982)
![{\displaystyle (1+\varepsilon _{3})[(1+\varepsilon _{1})(x(1+\varepsilon _{x})+y(1+\varepsilon _{y}))*(1+\varepsilon _{2})*[x(1+\varepsilon _{x})-y(1+\varepsilon _{y})]]=}](//restbase.wikitolearn.org/it.wikitolearn.org/v1/media/math/render/svg/e97a8a5d1f8cc14bb30952a68e41d5b5e62c6e67)
Al primo ordine
![{\displaystyle (1+\varepsilon _{3})[(1+\varepsilon _{1})*(1+\varepsilon _{2})*[x^{2}(1+2\varepsilon _{x})-y^{2}(1+2\varepsilon _{y})]=}](//restbase.wikitolearn.org/it.wikitolearn.org/v1/media/math/render/svg/96e55ddd89c06c47300b76a0beea5442975296c4)
![{\displaystyle (1+\varepsilon _{1}+\varepsilon _{2}+\varepsilon _{3})*[x^{2}(1+2\varepsilon _{x})-y^{2}(1+2\varepsilon _{y})]=}](//restbase.wikitolearn.org/it.wikitolearn.org/v1/media/math/render/svg/8477630d2e327ba2f31e8900d88d652263a898a6)






Gli ultimi due addendi rappresentano l'errore inerente, uguale a quello del primo algoritmo, mentre

Nel primo algoritmo:

invece

Il secondo algoritmo è stabile e indipendente dai dati, ma quando

è piccolo il problema diventa mal condizionato quindi questo
vantaggio non serve a niente, tranne nel caso in cui

e

sono numeri macchina.
La cosa migliore è quella di fare subito le operazioni rischiose (somma e sottrazione), e di lasciare moltiplicazioni e divisioni per ultime, in modo che l'errore accumulato sia minore.
Calcolo l'errore della funzione

e considero




L'errore inerente dipende dai dati e dal loro numero.
Se sono nella situazione in cui gli

hanno tutti segni concordi, allora:

Quindi, tenendo anche conto che

, si ha:



Allora in questo caso il problema è ben condizionato, mentre nel caso generale l'errore inerente dipende dal valore dei dati e dal loro numero.
Rappresento il grafo dell'errore relativo nel caso della somma di quattro numeri
ponendo:
,
;

Il grafico è

Suppongo che

siano numeri macchina, quindi

, e rimane:

e sostituendo ai coefficienti le loro espressioni:



Sostituisco le espressioni di

espressi in funzione delle

:

allora anche l'errore algoritmico dipende dai dati.
Esercizio 1.5
Trovare l'espressione dell'errore algoritmico per via analitica.
Suppongo che gli
siano numeri macchina, cioè che
.

![{\displaystyle \{[(x_{1}+x_{2})+x_{3}]+x_{4}\}}](//restbase.wikitolearn.org/it.wikitolearn.org/v1/media/math/render/svg/c32d2cb9e7f77ab44d2538a126421a6da1d77ae1)
![{\displaystyle \mathrm {fl} \{\mathrm {fl} [\mathrm {fl} (x_{1}+x_{2})+x_{3}]+x_{4}\}}](//restbase.wikitolearn.org/it.wikitolearn.org/v1/media/math/render/svg/3d0c38c050e42e9c53f41c8ebc8929f4e096c8fa)
+x_{4}\}(1+\varepsilon _{3})}](//restbase.wikitolearn.org/it.wikitolearn.org/v1/media/math/render/svg/7eea564c16e965cf18eedad148912fc9cc2e0649)
Eseguendo i prodotti e trascurando i termini di ordine superiore al primo:
+x_{4}\}(1+\varepsilon _{3})}](//restbase.wikitolearn.org/it.wikitolearn.org/v1/media/math/render/svg/7396b935e7f8a913785eefd0a7e0c0a792296861)


Allora





e si ottiene il risultato precedente.
Nel caso della somma di
numeri si ottiene la formula generale:

Se invece gli
sono di segno concorde, allora

quindi, applicando la disuguaglianza triangolare, ottengo:


Allora l'errore algoritmico non dipende dai dati.
Ottimizzazione dell'algoritmo per la somma di n numeri[modifica | modifica wikitesto]
Procedimento 1: Per ridurre l'errore nella somma, conviene ordinare i numeri per valore assoluto, dal più piccolo al più grande. In questo modo risulta che, se considero le medie aritmetiche dei primi
numeri, si ha:


quindi



Esercizio 1.6
Verificare che

Verifico per induzione: per

, si ha:

Suppongo vero l'asserto per

, e lo dimostro per

.

Isolando l'ultimo termine della somma:

e applicando il passo induttivo al secondo addendo ottengo:
![{\displaystyle n+[(n-1)^{2}+(n-1)-2]/2=}](//restbase.wikitolearn.org/it.wikitolearn.org/v1/media/math/render/svg/de289994358cf0da629432ae2a8b299daccd11b7)
![{\displaystyle n+[n^{2}+1-2n+n-1-2]/2=}](//restbase.wikitolearn.org/it.wikitolearn.org/v1/media/math/render/svg/0a399a8473ae52bbdd82a8eea4fb38d5ae1c6154)
![{\displaystyle n+[n^{2}-n-2]/2=}](//restbase.wikitolearn.org/it.wikitolearn.org/v1/media/math/render/svg/3d93fa83d5c46539bd5a487488aadb1268d7ebab)
![{\displaystyle [n^{2}+2n-n-2]/2={\frac {n^{2}+n-2}{2}}}](//restbase.wikitolearn.org/it.wikitolearn.org/v1/media/math/render/svg/a2c77a89e2fa9877c62864fea8849fb960e97dde)
Applicando l'esercizio e sostituendo nella formula 1 ottengo:


e l'errore è dell'ordine di

.
Procedimento 2: Supponiamo di avere
numeri da sommare. Allora




Calcoliamo

In questo caso c'è una funzione di libreria

tale che per ogni

,

, dove

.
- Calcoliamo l'errore inerente:


quindi
- Applicando l'algoritmo
si ha:
Rappresento il grafo:
Sapendo che
si ha:
Questo è un algoritmo stabile qualsiasi siano i due numeri
e
.
- Per via analitica, supponendo che
e
calcolo l'errore del primo algoritmo:![{\displaystyle e^{x+y}=e^{x}*e^{y}=\mathrm {fl} [\mathrm {fl} (e^{x})*\mathrm {fl} (e^{y})]}](//restbase.wikitolearn.org/it.wikitolearn.org/v1/media/math/render/svg/109a304fec6c817d5b4c73d998813d4ed82be2f7)
![{\displaystyle =\mathrm {fl} [e^{x}*(1+\varepsilon _{1})*e^{y}*(1+\varepsilon _{2})]}](//restbase.wikitolearn.org/it.wikitolearn.org/v1/media/math/render/svg/a9d597290a464417f9efeab4bb291f446c9e5106)

e al primo ordine:
quindi


- Applico l'algoritmo 2
e pongo

e assumendo
, e sapendo che
si ha:
Quando
è piccolo, l'algoritmo 2 è più stabile, mentre è meno stabile quando
è grande.
- Per via analitica, calcolo l'errore algoritmico del secondo algoritmo.
![{\displaystyle e^{x+y}=\mathrm {fl} [e^{\mathrm {fl} (x+y)}]}](//restbase.wikitolearn.org/it.wikitolearn.org/v1/media/math/render/svg/c30a4f0508591ab9ce37dda0074d57c2240e2d05)


Al primo ordine:![{\displaystyle = [e^{x+y}+e^{x+y}*\varepsilon_1]*(1+\varepsilon_2)}](//restbase.wikitolearn.org/it.wikitolearn.org/v1/media/math/render/svg/c1ea05fc7c588b768a1c6440b50de46338ad2830)

Calcolo l'errore relativo:
e al primo ordine rimane: