Aiuto con Matlab, plottare errore relativo al variare di k

mathix1
salve a tutti, ho bisogno di una piccola mano. ho creato uno script che risolve un sistema lineare con gauss, jacobi e gauss-seidel, più precisamente lo scrivo esegue 3 funzioni:

nelle prime righe ho A (matrice 4x4), b, il vettore x0=[0,0,0,0] e Nmax=10 (numero di iterate)
le 3 funzioni sono:
x=A\b <-- risolvo prima con gauss
[x_j,k]=jacobi(A,b,x0,Nmax)
[x_gs,k]=gauss_seidel(A,b,x0,Nmax)

domanda 1:
come calcolo l'errore relativo dei 3 vettori x, x_j e x_gs?

domanda 2:
mi viene chiesto di plottare l'errore relativo al variare k, sapreste darmi qualche consiglio?
come dovrei fare il grafico? non ho la piu pallida idea di come realizzarlo

Risposte
walter891
per calcolare l'errore relativo devi conoscere la soluzione esatta del sistema, se non ti viene fornita dal testo di solito si prende come riferimento quella ottenuta col comando backslash. Per fare il grafico devi mettere sull'asse delle ascisse i valori di $k$ e sull'asse delle ordinate i 3 valori della soluzione che hai ottenuto, invece di usare il comando plot può essere opportuno fare dei grafici su scala logaritmica per renderli più leggibili

mathix1
sapresti dirmi come ottenere l'errore relativo dalla funzione "x=A\b"?

walter891
se il testo non ti dà altre informazioni consideri quella come soluzione esatta e calcoli $e=||x-x_(ex)||/||x_(ex)||$ dove $x_(ex)$ è appunto la soluzione di x=A\b

mathix1
"walter89":
se il testo non ti dà altre informazioni consideri quella come soluzione esatta e calcoli $e=||x-x_(ex)||/||x_(ex)||$ dove $x_(ex)$ è appunto la soluzione di x=A\b

ma poi la soluzione di x=A\b devo passarla come input alle varie funzioni oltre al vettore x0?

mathix1
altra domanda, nelle varie funzioni jacobi e gauss seidel io calcolo l'errore relativo tra x0 e la la soluzione x dopo la decima iterata, ma forse ho compreso male la traccia e devo calcolare l'errore relativo tra la soluzione esatta trovata con gauss e quella delle due funzioni jacobi e gauss seidel.

secondo te è cosi? e per fare in questo modo devo passare la soluzione esatta come input oltre a x0 alle due funzioni jacobi e gauss seidel?

walter891
le funzioni lavorano indipendentemente dalla soluzione esatta, l'errore lo devi calcolare dopo aggiungendo qualche riga allo script: prima calcoli i 2 errori relativi con la formula che ti ho scritto poi metti i comandi per fare il grafico. Però non capisco cosa rappresenta $k$ nel tuo codice

mathix1
"walter89":
le funzioni lavorano indipendentemente dalla soluzione esatta, l'errore lo devi calcolare dopo aggiungendo qualche riga allo script: prima calcoli i 2 errori relativi con la formula che ti ho scritto poi metti i comandi per fare il grafico. Però non capisco cosa rappresenta $k$ nel tuo codice

$\k$ è l'indice dell'ultima iterata, ma l'ho tolto e al suo posto ho fatto restituire un array "err" che contiene l'errore relativo calcolato ad ogni iterata.
dopodiché plotto i due array err al variare di k. è giusto in questo modo? e a cosa mi serve x=A\b a questo punto?

ps: hai un MP

grazie ancora per l'aiuto che mi stai dando, scusa se ti scoccio con tutte queste domande

walter891
ok se vengono calcolati gli errori all'interno della funzione poi devi solamente plottarli, ci sono vari modi per risolvere questo tipo di esercizi e bisogna stare attenti alle richieste. Ovviamente se l'errore deve variare con $k$ è giusto che sia calcolato a ogni passo del ciclo

mathix1
vorrei implementare una funzione che controlli che la matrice A di input sia quadrata e che il vettore b e x0 siano della stessa lunghezza di A. il codice è semplice ma dove lo implemento di preciso?

in pratica il mio lavoro attuale (cioè senza controlli) consiste di una funzione che prende in input A,b,x0,Nmax e omega, e al suo interno vengono richiamate le funzioni jacobi e gauss seidel e la funzione che plotta i risultati.

1. metto i controlli dentro una funzione e la richiamo prima delle altre? (ho provato e mi da errore)
2. se metto i controlli direttamente nella funzione principale ottengo sempre errore.
qualche consiglio?

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.