Ottimizzazione Non Vincolata e Ordine Di Convergenza

AttraversamiIlCuore
Ciao a tutti!
Siccome il prof non ha dato dispense su cui seguire, sto cercando di risolvere un esercizio... solo che lo sto facendo "meccanicamente" seguendo un esercizio svolto.. quindi per prima cosa vorrei chiedervi se avete dispense (siti, o qualsiasi cosa) dove venga trattato questo argomento...
Secondo vi ricopio il mio svolgimento dell'esercizio (quello che sono riuscito a fare), se qualcuno può aiutarmi!
Allora... il testo è :
Data la funzione $f(x_1,x_2)=x_1^2+x_2^4+3$ costruire una successione di direzione di discesa che convergano al minimo a partire da $x^((0))=(1/2,1/2)^T$, fornire i primi tre valori della successione dei punti ottenuti da questa e controllare l'errore (in norma infinito, ovvero componente di massimo modulo del vettore) e discutere l'ordine di convergenza del minimo.Allora il mio primo dubbio è sul controllare l'errore... come si fa? E il secondo... come discuto l'ordine?
Per il resto vi copio i miei passaggi :

$f(x_1,x_2)=x_1^2+x_2^4+3$ con $x^((0))=(1/2,1/2)^T$
$nabla f(x_1,x_2)=(2x_1,4x_2^3)$
$nabla^2 f(x_1,x_2)=|( 2 , 0 ),( 0 , 12x_2^2 ) |$ e chiamo questa matrice come H.
1 Iterazione. Imposto il sistema $Hdel=-b$
$| ( 2 , 0 ),( 0 , 12x_2^2 ) | * | ( del_1^((0)) ),( del_2^((0)) ) |= |(-2x_1),(-4x_2^3)|$
Sostituisco il punto $x^((0))$ :
$| ( 2 , 0 ),( 0 , 3 ) | * | ( del_1^((0)) ),( del_2^((0)) ) |= |(-1),(-1/2)|$
E trovo come soluzione
$del_1^((0))=-1/2 ; del_2^((0))=-1/6$
$x^((1))=x^((0))+del^((0))=|(0),(1/3)|$

2 Iterazione. Imposto il sistema $Hdel=-b$
$| ( 2 , 0 ),( 0 , 12x_2^2 ) | * | ( del_1^((1)) ),( del_2^((1)) ) |= |(-2x_1),(-4x_2^3)|$
Sostituisco il punto $x^((1))$ :
$| ( 2 , 0 ),( 0 , 4/3 ) | * | ( del_1^((1)) ),( del_2^((1)) ) |= |(0),(-4/27)|$
E trovo come soluzione
$del_1^((1))=0 ; del_2^((1))=-1/9$
$x^((2))=x^((1))+del^((1))=|(0),(2/9)|$

3 Iterazione. Imposto il sistema $Hdel=-b$
$| ( 2 , 0 ),( 0 , 12x_2^2 ) | * | ( del_1^((2)) ),( del_2^((2)) ) |= |(-2x_1),(-4x_2^3)|$
Sostituisco il punto $x^((2))$ :
$| ( 2 , 0 ),( 0 , 16/27 ) | * | ( del_1^((2)) ),( del_2^((2)) ) |= |(0),(-32/729)|$
E trovo come soluzione
$del_1^((2))=0 ; del_2^((2))=-2/27$
$x^((3))=x^((2))+del^((2))=|(0),(4/27)|$

Risposte
AttraversamiIlCuore
Ciao a tutti!
Sono riuscito a risolvere l'esercizio (se a qualcuno interessa potrei copiarlo qui)... gli unici due punti rimasti in sospeso sono l'ordine di convergenza e l'errore di norma infinito... chi mi sa aiutare?
Grazie :)

canemacchina
mmm, sei sicuro di aver risolto l'esercizio considerando cosa hai scritto prima? perché c'è qualcosa che non mi torna, a partire dal calcolo del gradiente.

Comunque, cerca in rete (purtroppo non posso passarti ciò che ho perché ho un libro stampato!!) qualcosa in merito a "Metodo di newton per sistemi non lineari" e leggi un po'.

In pratica si tratta di trasformare il metodo di Newton per trovare le radici di funzioni unidimensionali al caso multidimensionale. Questo perché la ricerca di minimi (o massimi, in realtà) per funzioni multidimensionali passa per la ricerca dei punti stazionari, ovvero delle radici del gradiente.

Allora, in soldoni:
calcoli il gradiente, dal gradiente calcoli la matrice Jacobiana. A questo punto la direzione è determinata dal fatto che la Jacobiana sia definita positiva o meno, ma nel tuo caso essendo la funzione convessa, sei sicuro che la direzione sia di discesa verso il minimo.

Il metodo lo definisci come:

[tex]\left\lbrace
\begin{array}{l}
J_f(x^{k})d_k = -\nabla f(x^{k})\\
\\
x^{k+1} = x^{k} + d_k\\
\end{array}
\right.[/tex]

Per quanto riguarda l'ordine di convergenza, i risultati sono noti e questo metodo converge quadraticamente.
In alternativa a questo, puoi sostituire all'interno dell'iterazione [tex]J_f(x^{k})[/tex] con [tex]J_f(x^{0})[/tex], ovvero fare qualcosa di simile al metodo delle corde. In pratica approssimi la Jacobiana di ogni passo con la Jacobiana calcolata sulla prima approssimazione della soluzione, in modo tale da effettuare i calcoli una volta sola (ovvero, supponendo che stai lavorando su un calcolatore, puoi fattorizzare una volta sola ka [tex]J_f[/tex]).
In questo caso però la convergenza scende da quadratica a lineare.

Per quanto riguarda gli errori, io credo tu debba calcolare l'errore sulla soluzione, un po' come si fa quando si parla di errori nel caso della ricerca di radici di funzioni.
In questo caso però la tua soluzione è rappresentata da un vettore e non da uno scalare, percui al posto del calcolo sui valori assoluti usi le norme, ovvero (supponendo che [tex]\overline{x}[/tex] sia la soluzione esatta), potresti dire che:
[tex]\Delta_x = ||\overline{x} - x||_\infty[/tex]
[tex]\varepsilon_x = \dfrac{\Delta_x}{||\overline{x}||_\infty}[/tex]

AttraversamiIlCuore
Ciao! Intanto grazie per la risposta... hai ragione l'esercizio non era corretto eho provveduto a riscriverlo con tutti i passaggi...
Ti ringrazio per la risposta e le formule ma non ho capito molto :S
PRATICAMENTE come dovrei fare? Ad ogni iterazione devo controllare l'errore o è solo un passaggio finale?
Anche se praticamente non saprei come farlo... ti ringrazio ancora :)

canemacchina
Allora, premesso che parlare senza che tu abbia chiaro tutto il concetto diventa un po' complicato (ti ripeto, cerca qualcosa in rete e documentati un po' visto che non hai dispense), sul controllo dell'errore c'è tutta una trattazione particolare.

In primo luogo, quelle "formule" che ti ho dato sono in sostanza la definizione degli errori, da intendere (scusa se sono stato poco chiaro, non sapevo fino a che punto tu avessi studiato certi metodi) come l'errore assoluto commesso (la prima) e l'errore relativo (la seconda).

Il calcolo degli errori passa per la determinazione della soluzione esatta del problema: come ti ho scritto prima [tex]\overline{x}[/tex] è la soluzione esatta. Quindi non è sempre facilmente calcolabile l'errore commesso (anche perché, fosse facile, non avremmo il problema di approssimare le soluzioni!!!)
Quindi, dipende un po' da cosa intende l'esercizio e da cosa devi fare tu.
Nel senso: se ti viene proposta anche la soluzione esatta (o se te la sai calcolare analiticamente) puoi calcolare direttamente l'errore commesso alla fine del terzo passo di iterazione, in modo da quantificare, dopo appunto 3 passi, quanto "vicino" tu sia alla soluzione del problema.

Nella pratica però non si fa questo (ripeto, proprio perché il calcolo dell'errore passa per il calcolo della soluzione esatta). Se ti metti a leggere qualcosa in merito (evito di scriverlo io anche solo per la lunghezza della trattazione) quello che si fa è fare alcune considerazioni sul metodo usato (nel caso specifico quello di Newton, quindi nulla da inventare) e si vede in che modo è possibile ottenere una soluzione approssimata con una certa precisione decisa a priori.

Cerco di spiegarmi meglio:
in generale i metodi iterativi (qualsiasi, non solo quelli per cercare le radici di funzioni) trovano la soluzione finale per approssimazioni successive. Va da se quindi che la soluzione esatta viene definita come il risultato di infinite iterazioni. Ovviamente nessuno può permettersi di eseguire infiniti passi di un qualsiasi algoritmo, quindi è necessario decidere in qualche modo quando è il momento di fermarsi.
In generale quindi si cerca di stimare in che misura l'errore diminuisce ad ogni passo di iterazione (mettiamola in questi termini, non è proprio corretto) e quindi si esegue l'algoritmo fino a che non si raggiunge un errore che rientra nella precisione richiesta.

Ora, in merito al tuo esercizio: per essere più preciso, perché non mi fai vedere un esempio di un esercizio svolto (visto che hai detto che ce l'hai)? Così capisco bene cosa ti viene richiesto.

Ciao!

AttraversamiIlCuore
Ciao!
Intanto ancora grazie per la disponibilità e spiegazioni...
Si intanto sto cercando delle cose in internet, anche perchè fare le cose meccanicamente non è che mi entusiasmi molto... anzi...
Per quanto riguarda l'errore, non mi viene data la soluzione precisa a priori (il testo è precisamente quello che ho copiato)...
E per l'esercizio, purtroppo, ho solamente svolta la parte riguardante le iterazioni... per questo mi sono trovato in difficolta sull'errore e sull'ordine... uff!
Grazie ancora per la disponibilità :) io continuo a cercare... speriamo!

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