Calcolo numerico (metodo SOR)
Buonasera, volevo sapere se esiste una formula per calcolare anticipatamente il numero di iterazioni necessarie per ottenere una soluzione con una tolleranza fissata, di un sistema lineare, utilizzando rispettivamente i metodi di Jacobi, Gauss-Seidel ed SOR. Grazie anticipatamente.
Risposte
Se mai succede, succede solo in casi molto particolari.
In generale, credo tu debba usare un controllo sull'errore di tipo "a posteriori".
In generale, credo tu debba usare un controllo sull'errore di tipo "a posteriori".
"Raptorista":
Se mai succede, succede solo in casi molto particolari.
In generale, credo tu debba usare un controllo sull'errore di tipo "a posteriori".
Il mio libro recita questo: "In generale per avere una riduzione della norma dell'errore iniziale e(0) di una quantità fissata toll=10^(-r) occorre che k>(r/(-log(ro(E))) dove per ro(E) si intende il raggio spettrale della matrice di iterazione."
E' corretto questo? Ho provato ad applicare quanto sopra risolvendo un sistemain Matlab ilproblema è che rispetto alle iterazioni calcolate con Matlab in particolare nel calcolo del numero di iterazioni con SOR ottengo un numero di iterazioni minori applicando la formula rispetto a quelleeffettivamente ottenute con Matlab. Sono abbastanza convinto che lo script sia giusto.. Quindi non capisco perchè..
Io invece non capisco nulla di quello che hai scritto.
Sistema quell'accozzaglia di simboli, usa le formule, USA LE VIRGOLE e cerca di essere chiaro.
Sistema quell'accozzaglia di simboli, usa le formule, USA LE VIRGOLE e cerca di essere chiaro.
"Raptorista":
Io invece non capisco nulla di quello che hai scritto.
Sistema quell'accozzaglia di simboli, usa le formule, USA LE VIRGOLE e cerca di essere chiaro.
"Raptorista":
Se mai succede, succede solo in casi molto particolari.
In generale, credo tu debba usare un controllo sull'errore di tipo "a posteriori".
Il mio libro recita questo: "In generale per avere una riduzione della norma dell'errore iniziale $ e^(0) $ di una quantità fissata $ text(toll)=10^(-r) $ occorre che $ k>(r/(-log(text(ro(E)))) $, dove per $ ro(E) $ si intende il raggio spettrale della matrice di iterazione e, per $ k $ il numero di iterazioni."
E' corretto questo?
Ho implementato il metodo SOR in Matlab per risolvere questo esercizio:
Si risolva il sistema lineare $ Ax=b $, dove $ A=((2, -1 ,0 ,0 ,0), (-1 ,2 ,-1 ,0 ,0), (0 ,-1 ,2 ,-1 ,0), (0 ,0 ,-1 ,2 ,-1), (0, 0 ,0 ,-1 ,2)) $ e $ b $ si ottiene imponendo che la soluzione vera sia $ x=(1 ,1 ,1 ,1 ,1) $.
Si calcoli il numero di iterazioni impiegato dal metodo SOR, e si metta a confronto con il numero di iterazioni calcolate analiticamente.
Usare $ text(toll)=10^(-10) $.
Quello che non mi torna è che sperimentalmente ottengo $ k=24 $ iterazioni mentre analiticamente, ovvero usando la formula $ k>(r/(-log(text(ro(E)))) $ , ottengo $k>21$ iterazioni. Mi confermate che non può essere corretto?
Quando la tolleranza è dell'ordine di \(1e-10\), è possibile che gli errori di arrotondamento si facciano sentire e quindi un algoritmo ci metta più passi del minimo teorico per convergere.
Da qui a dire se è questo il caso, non mi sento così sicuro... Di certo sarebbe stato sospetto se ne avessi impiegate di meno
Da qui a dire se è questo il caso, non mi sento così sicuro... Di certo sarebbe stato sospetto se ne avessi impiegate di meno

"Raptorista":
Quando la tolleranza è dell'ordine di \(1e-10\), è possibile che gli errori di arrotondamento si facciano sentire e quindi un algoritmo ci metta più passi del minimo teorico per convergere.
Da qui a dire se è questo il caso, non mi sento così sicuro... Di certo sarebbe stato sospetto se ne avessi impiegate di meno
Mmmm... Il fatto è che ho implementato anche i metodi di Jacobi e Gauss-Seidel e, facendo lo stesso esercizio, ovvero calcolando il numero di iterazioni sperimentalmente e teoricamente, li ottengo che il numero di iterazioni sperimentali è minore del numero di iterazioni teoriche.
Il punto è che questo argomento è stato trattato un po' velocemente a lezione e mi sembra di ricordare che comunque il prof. aveva detto, che se teoricamente si ottengono valori un po' maggiori è normale perchè stiamo facendo una stima.
Ho quindi interpretato la formula $ k>(r/(-log(ro(E)))) $ così: "per avere la certezza di avere una tolleranza inferiore a quella assegnata, il numero di iterazioni deve essere maggiore di $ k $"
E' corretta la mia interpretazione?
Per quanto riguarda gli errori di arrotondamento non vorrei dire una fesseria ma se l'errore di macchina è $ 10^(-16) $ non dovrebbero essere praticamente trascurabili?
Anche perchè ho provato a ridurre la tolleranza fino a $ 10^(-5) $ ma per il metodo SOR non cambia la sostanza...
La tua interpretazione è corretta, e infatti se tu partissi da una guess iniziale che è già la soluzione esatta avresti convergenza in un passo.
Per l'arrotondamento, ricorda che in aritmetica floating point i numeri non sono distribuiti uniformemente sull'intervallo di rappresentazione, ma la precisione varia in base alle grandezze in gioco: puoi rappresentare con precisione anche numeri dell'ordine di \(1e-300\), se vuoi, ma se li sommi a numeri dell'ordine di \(1e50\) perdi informazione.
Comunque, in questo caso non sembra essere quello il problema.
Il punto focale è che tutte queste informazioni sono di carattere asintotico, quindi vanno sempre prese "con le pinze".
Se il numero di iterazioni reali non si discosta molto da quello teorico previsto, direi che puoi ritenerti abbastanza soddisfatto.
Per l'arrotondamento, ricorda che in aritmetica floating point i numeri non sono distribuiti uniformemente sull'intervallo di rappresentazione, ma la precisione varia in base alle grandezze in gioco: puoi rappresentare con precisione anche numeri dell'ordine di \(1e-300\), se vuoi, ma se li sommi a numeri dell'ordine di \(1e50\) perdi informazione.
Comunque, in questo caso non sembra essere quello il problema.
Il punto focale è che tutte queste informazioni sono di carattere asintotico, quindi vanno sempre prese "con le pinze".
Se il numero di iterazioni reali non si discosta molto da quello teorico previsto, direi che puoi ritenerti abbastanza soddisfatto.
"Raptorista":
La tua interpretazione è corretta, e infatti se tu partissi da una guess iniziale che è già la soluzione esatta avresti convergenza in un passo.
Per l'arrotondamento, ricorda che in aritmetica floating point i numeri non sono distribuiti uniformemente sull'intervallo di rappresentazione, ma la precisione varia in base alle grandezze in gioco: puoi rappresentare con precisione anche numeri dell'ordine di \(1e-300\), se vuoi, ma se li sommi a numeri dell'ordine di \(1e50\) perdi informazione.
Comunque, in questo caso non sembra essere quello il problema.
Il punto focale è che tutte queste informazioni sono di carattere asintotico, quindi vanno sempre prese "con le pinze".
Se il numero di iterazioni reali non si discosta molto da quello teorico previsto, direi che puoi ritenerti abbastanza soddisfatto.
Ok perfetto! Grazie mille della disponibilità!
Alla prossima!
