Metodo Jacobi

Salve, ho provato a svolgere questo programma ma non mi trovo con i risultati, potreste illustrarmi come procede, in particolare come utilizzare il criterio di arresto sul residuo relativo.
Grazie
Risposte
"_Ronaldo_CR7-":
Salve, ho provato a svolgere questo programma ma non mi trovo con i risultati, potreste illustrarmi come procede, in particolare come utilizzare il criterio di arresto sul residuo relativo.
Grazie
Se leggi il regolamento al punto 1.2 vedi che:
Chi pone la domanda deve dimostrare lo sforzo che ha fatto per cercare di risolvere la difficoltà, indicare la strada che ha cercato di intraprendere e in ogni caso indicare aspetti specifici da chiarire.
Siccome qui si parla di programmazione Matlab, lo sforzo dovrebbe essere un banale ctrl+c ctrl+v, almeno per partire.
Non basta aggiornare il tuo programma precedente usando la definizione di residuo relativo, i.e. di $\frac{||b-A x_k||}{||b||}$?
Quindi per residuo normalizzato si intende residuo k-esimo in norma diviso norm(b)?
"Quinzio":
[quote="_Ronaldo_CR7-"]
Salve, ho provato a svolgere questo programma ma non mi trovo con i risultati, potreste illustrarmi come procede, in particolare come utilizzare il criterio di arresto sul residuo relativo.
Grazie
Se leggi il regolamento al punto 1.2 vedi che:
Chi pone la domanda deve dimostrare lo sforzo che ha fatto per cercare di risolvere la difficoltà, indicare la strada che ha cercato di intraprendere e in ogni caso indicare aspetti specifici da chiarire.
Siccome qui si parla di programmazione Matlab, lo sforzo dovrebbe essere un banale ctrl+c ctrl+v, almeno per partire.[/quote]
Hai ragione, il mio programma è
function x = jac(A,b,x0,tol,it) x=x0; xold=x0; n=size(A); res=norm(b-A*x); k=1; while res>tol && k<it for i=1:n s=0; for j=1:n if j~=i s=s+A(i,j)*xold(j); end end x(i)=(b(i)-s)/A(i,i); end res=norm(b-A*x); k=k+1; xold=x; end end
Quindi sostituisco res semplicemente cin res diviso res(b) e mi dovrebbe venire?
"_Ronaldo_CR7-":
[quote="Quinzio"][quote="_Ronaldo_CR7-"]
Salve, ho provato a svolgere questo programma ma non mi trovo con i risultati, potreste illustrarmi come procede, in particolare come utilizzare il criterio di arresto sul residuo relativo.
Grazie
Se leggi il regolamento al punto 1.2 vedi che:
Chi pone la domanda deve dimostrare lo sforzo che ha fatto per cercare di risolvere la difficoltà, indicare la strada che ha cercato di intraprendere e in ogni caso indicare aspetti specifici da chiarire.
Siccome qui si parla di programmazione Matlab, lo sforzo dovrebbe essere un banale ctrl+c ctrl+v, almeno per partire.[/quote]
Hai ragione, il mio programma è
function x = jac(A,b,x0,tol,it) x=x0; xold=x0; n=size(A); res=norm(b-A*x); k=1; while res>tol && k<it for i=1:n s=0; for j=1:n if j~=i s=s+A(i,j)*xold(j); end end x(i)=(b(i)-s)/A(i,i); end res=norm(b-A*x); k=k+1; xold=x; end end[/quote]
Usando il tag Code viene ancora piu' bello.
Riguardo all'errore, a un certo puno sono questioni di convenzione.
Mi sembra che abbia senso l'errore normalizzato, calcolato tra due vettori $x$ successivi. Tu fai la stessa cosa nel codice ?
Che norma usi (2, infinito) ?
Cosa dicono le tue slides, il tuo libro, le tue note, riguardo alla convenzione da usare ?
Cos'e' quella 's' che calcoli ? E' un vettore ?
Allora, il professore ci ha indicato l’errore normalizzato come norma di $r^(k)$ diviso r0, dove r0 è $b-Ax_0$, ma con questo metodo non funziona.
Per quanto riguarda la norma, non ci ha detto nulla, solo di usare norm un matlab, quindi credo norma 2
Per quanto riguarda la norma, non ci ha detto nulla, solo di usare norm un matlab, quindi credo norma 2
MatLab mi pare che per default prenda la norma $2$ di un vettore. Comunque c'è scritto nella documentazione. Con "non funziona" intendi che il metodo non converge? Stai scegliendo gli esempi corretti su cui testare il metodo di Jacobi. Cioè, stai utilizzando matrici per le quali la condizione necessaria di convergenza è soddisfatta?
@Quinzio la
@Quinzio la
sè uno scalare che contiene il contributo dei termini extradiagonali, è quello che su wikichiamano $\sigma$