Metodo Excel di Carlizza
Rispondo qui a questo articolo per comodità, dove, mio malgrado, ho paura sia nato un lieve diverbio dovuto a qualche piccola incomprensione.
Come prima cosa mi preme precisare che non ho mai avuto intenzione di scrivere "banner" provocatori.
Ciò che ho scritto nel mio ultimo commento è semplicemente stato una citazione a quanto
paolo.carlizza aveva scritto nel commento precedente, nel tentativo di mettere in luce che conoscere il condizionamento del problema in anticipo è spesso una delle cose più difficili da raggiungere.
Preciso anche che non intendevo certo mancargli di rispetto (e perché mai dovrei??), invece indendevo segnalare che il metodo da lui usato risente di gravi problemi numerici di condizionamento (e non solo).
Se non correggiamo questo punto, rischiamo che qualcuno utilizzi il suo metodo e si ritrovi a non capire come mai non converge.
Non convergere può anche significare avere dei risultati errati e non essere in grado di rendersi conto che lo siano, che rappresenta il rischio più grave, senza una analisi della sensitivity del metodo.
Detto questo, devo spendere qualche parola in più sul problema.
Cercherò di essere pratico, portando esempi concreti e utilizzando il suo sistema non lineare, in modo da non infarcire il post con troppa teoria e renderlo più accessibile. Vediamo se mi riesce.
Il problema é:
Risolvere il seguente sistema non lineare:

al posto di utilizzare
e
ho utilizzato x e y, secondo la trasformazione:

per comodità, essendo il sistema 2x2.
Usero Mathematica quale solutore numerico (ma con Matlab, Derive o qualunque altro software non cambia nulla). Excel non va bene perché non è un solutore numerico e non dovrebbe essere utilizzato per risolvere nulla che non sia un foglio di calcolo.
Come si differenzia un foglio di calcolo da un problema matematico?
Un problema matematico richiede sempre la conoscenza del condizionamento e con Excel questo non è mai possibile.
I fogli di calcolo Excel possono essere usati per fare calcoli che non siano problemi matematici.
(anche io talvolta uso i fogli di calcolo, ne avevo fatto uno per tenere a mente quando scadono le medicine che tengo in casa e la loro quantità rimanente nell'armadietto.)
OK, quindi definisco tre funzioni, a(x,y) b(x,y) c(x,y), così:
c(x,y) è la somma dei quadrati, che ho fatto espandere per poterne vedere la formula ad occhio.
Come dicevo prima, cioè senza scrivere formule, proviamo a disegnare a(x,y)
poi b(x,y)
Il problema è chiaramente non lineare, ma, come si vede, a parte l'accumulazione in 0 di b(x,y) è molto poco non lineare.
Me lo aspettavo, per le considerazioni che ho già fatto nei commenti all'articolo.
Da come sono fatti i grafici mi aspetto che il problema sia quasi separabile e questo è il motivo per il quale il metodo con Excel, fatto in due passi, cioè cercando prima la soluzione per x e poi quella per y funzionicchia.
Scrivo funzionicchia perché ho una soluzione, ma non sono comunque in grado di valutarne la precisione numerica.
Inoltre la funzione che cerca l'obiettivo, in Excel, mi dice che non è riuscita a convergere (non potrebbe mai perché può lavorare solo su una delle due variabili) e quindi non ha risolto il problema, ma semplicemente raggiunto il numero massimo di iterazioni permesso.
Quanto migliora la precisione ad ogni iterazione? Questo non è dato saperlo, ma poiché la non linearità non è troppo marcata possiamo dire che la precisione aumenta ad ogni iterazione, motivo per il quale, in questo caso specifico, il metodo funzionicchia.
Adesso disegno c(x,y)
Si nota che la non linearità del problema è peggiorata molto, pur restando il problema quasi separabile.
Per rendersene conto meglio (e per non farmi dire che vi frego con le scale
) calcoliamo:
a(0.1,0.1)=-20.5437
b(0.1,0.1)=-69.999
mentre
c(0.1,0.1)=5321.9
Risolviamo il problema con il solutore numerico, volendo ottenere 6 cifre significative corrette:
Si vede che il problema ha sei soluzioni complesse e solo una reale, l'ultima.
Cerchiamo adesso di renderci conto a spanne di quali possono essere i problemi di condizionamento del problema.
Conoscendo la soluzione, possiamo provare a perturbarla un po' per vedere cosa succede.
In genere un problema è ben condizionato se per una variazione
degli ingressi corrisponde una variazione dell'ordine di
delle soluzioni.
Tanto più questo criterio non è vero tanto peggio è condizionato il problema.
Mi aspetto che la funzione problematica sia b(x,y), perché è quella più non lineare e che ha un punto di accumulazione.
Però vediamo, faccio generare 10 valori a caso con cui perturbo la soluzione:
Purtroppo avevo ragione.
Vediamo cosa succede con c(x,y).
Allora perché (grossomodo) Excel tira fuori una soluzione?
La risposta a questa domanda è nella natura del problema. Se vado sufficientemente vicino alla soluzione in modo casuale percorrendo la linea di livello del grafico meno non lineare, quindi usando la ricerca dell'obiettivo in Excel nella direzione di x -che corrisponde all'operazione svolta- sarò sufficientemente lontano dal punto di accumulazione in modo da percorrere la linea di livello perpendicolare in modo tale per cui il numero massimo di iterazioni che esegue Excel mi porti sufficientemente vicino alla soluzione.
Si capisce anche perché questo metodo non va bene, si affida al caso e dopo tutti i calcoli svolti garantisce una sola cifra decimale corretta.
Per averne una percezione più precisa, proviamo a variare in c(x,y) di poco la soluzione, sia in x, sia in y.
Oltre al condizionamento del problema (x varia da 5.30342 a 5.3 nel primo grafico e y da 1.81683 a 1.816 nel secondo e si ottengono quelle differenze !) si vede quanto convenga muoversi lungo x.
Per mettere in crisi il metodo è sufficiente prendere un altro problema, poco diverso.
Questo:

a(x,y) è tal quale a quella di prima, mentre è stata peggiorata la non linearità di b(x,y), introducendo una accumulazione anche sull'asse y.
Ecco il grafico della somma dei quadrati, che evidenzia la cosa:
Adesso non è più possibile usare il trucco di prima perché manca una direzione preferenziale.
Spero di aver chiarito le mie ragioni e di essere rimasto dentro un ambito critico costruttivo.
Ciao,
Pietro.
Come prima cosa mi preme precisare che non ho mai avuto intenzione di scrivere "banner" provocatori.
Ciò che ho scritto nel mio ultimo commento è semplicemente stato una citazione a quanto
Preciso anche che non intendevo certo mancargli di rispetto (e perché mai dovrei??), invece indendevo segnalare che il metodo da lui usato risente di gravi problemi numerici di condizionamento (e non solo).
Se non correggiamo questo punto, rischiamo che qualcuno utilizzi il suo metodo e si ritrovi a non capire come mai non converge.
Non convergere può anche significare avere dei risultati errati e non essere in grado di rendersi conto che lo siano, che rappresenta il rischio più grave, senza una analisi della sensitivity del metodo.
Detto questo, devo spendere qualche parola in più sul problema.
Cercherò di essere pratico, portando esempi concreti e utilizzando il suo sistema non lineare, in modo da non infarcire il post con troppa teoria e renderlo più accessibile. Vediamo se mi riesce.
Il problema é:
Risolvere il seguente sistema non lineare:

al posto di utilizzare
e
ho utilizzato x e y, secondo la trasformazione:
per comodità, essendo il sistema 2x2.
Usero Mathematica quale solutore numerico (ma con Matlab, Derive o qualunque altro software non cambia nulla). Excel non va bene perché non è un solutore numerico e non dovrebbe essere utilizzato per risolvere nulla che non sia un foglio di calcolo.
Come si differenzia un foglio di calcolo da un problema matematico?
Un problema matematico richiede sempre la conoscenza del condizionamento e con Excel questo non è mai possibile.
I fogli di calcolo Excel possono essere usati per fare calcoli che non siano problemi matematici.
(anche io talvolta uso i fogli di calcolo, ne avevo fatto uno per tenere a mente quando scadono le medicine che tengo in casa e la loro quantità rimanente nell'armadietto.)
OK, quindi definisco tre funzioni, a(x,y) b(x,y) c(x,y), così:
c(x,y) è la somma dei quadrati, che ho fatto espandere per poterne vedere la formula ad occhio.
Come dicevo prima, cioè senza scrivere formule, proviamo a disegnare a(x,y)
poi b(x,y)
Il problema è chiaramente non lineare, ma, come si vede, a parte l'accumulazione in 0 di b(x,y) è molto poco non lineare.
Me lo aspettavo, per le considerazioni che ho già fatto nei commenti all'articolo.
Da come sono fatti i grafici mi aspetto che il problema sia quasi separabile e questo è il motivo per il quale il metodo con Excel, fatto in due passi, cioè cercando prima la soluzione per x e poi quella per y funzionicchia.
Scrivo funzionicchia perché ho una soluzione, ma non sono comunque in grado di valutarne la precisione numerica.
Inoltre la funzione che cerca l'obiettivo, in Excel, mi dice che non è riuscita a convergere (non potrebbe mai perché può lavorare solo su una delle due variabili) e quindi non ha risolto il problema, ma semplicemente raggiunto il numero massimo di iterazioni permesso.
Quanto migliora la precisione ad ogni iterazione? Questo non è dato saperlo, ma poiché la non linearità non è troppo marcata possiamo dire che la precisione aumenta ad ogni iterazione, motivo per il quale, in questo caso specifico, il metodo funzionicchia.
Adesso disegno c(x,y)
Si nota che la non linearità del problema è peggiorata molto, pur restando il problema quasi separabile.
Per rendersene conto meglio (e per non farmi dire che vi frego con le scale
a(0.1,0.1)=-20.5437
b(0.1,0.1)=-69.999
mentre
c(0.1,0.1)=5321.9
Risolviamo il problema con il solutore numerico, volendo ottenere 6 cifre significative corrette:
- Codice: Seleziona tutto
NSolve[{a[x, y] == 0, b[x, y] == 0}, {x, y}, WorkingPrecision -> 6]
{{x -> 1.71953 + 0.114097 I, y -> -5.44535 + 0.184554 I},
{x -> 1.71953 - 0.114097 I, y -> -5.44535 - 0.184554 I},
{x -> -0.858314 - 1.58777 I, y -> 2.63683 + 4.52357 I},
{x -> -0.858314 + 1.58777 I, y -> 2.63683 - 4.52357 I},
{x -> -0.964107 + 1.48853 I, y -> -2.47649 + 4.66043 I},
{x -> -0.964107 - 1.48853 I, y -> -2.47649 - 4.66043 I},
{x -> 1.81684, y -> 5.30342}}
Si vede che il problema ha sei soluzioni complesse e solo una reale, l'ultima.
Cerchiamo adesso di renderci conto a spanne di quali possono essere i problemi di condizionamento del problema.
Conoscendo la soluzione, possiamo provare a perturbarla un po' per vedere cosa succede.
In genere un problema è ben condizionato se per una variazione
degli ingressi corrisponde una variazione dell'ordine di
delle soluzioni.Tanto più questo criterio non è vero tanto peggio è condizionato il problema.
Mi aspetto che la funzione problematica sia b(x,y), perché è quella più non lineare e che ha un punto di accumulazione.
Però vediamo, faccio generare 10 valori a caso con cui perturbo la soluzione:
Purtroppo avevo ragione.
Vediamo cosa succede con c(x,y).
Allora perché (grossomodo) Excel tira fuori una soluzione?
La risposta a questa domanda è nella natura del problema. Se vado sufficientemente vicino alla soluzione in modo casuale percorrendo la linea di livello del grafico meno non lineare, quindi usando la ricerca dell'obiettivo in Excel nella direzione di x -che corrisponde all'operazione svolta- sarò sufficientemente lontano dal punto di accumulazione in modo da percorrere la linea di livello perpendicolare in modo tale per cui il numero massimo di iterazioni che esegue Excel mi porti sufficientemente vicino alla soluzione.
Si capisce anche perché questo metodo non va bene, si affida al caso e dopo tutti i calcoli svolti garantisce una sola cifra decimale corretta.
Per averne una percezione più precisa, proviamo a variare in c(x,y) di poco la soluzione, sia in x, sia in y.
Oltre al condizionamento del problema (x varia da 5.30342 a 5.3 nel primo grafico e y da 1.81683 a 1.816 nel secondo e si ottengono quelle differenze !) si vede quanto convenga muoversi lungo x.
Per mettere in crisi il metodo è sufficiente prendere un altro problema, poco diverso.
Questo:

a(x,y) è tal quale a quella di prima, mentre è stata peggiorata la non linearità di b(x,y), introducendo una accumulazione anche sull'asse y.
Ecco il grafico della somma dei quadrati, che evidenzia la cosa:
Adesso non è più possibile usare il trucco di prima perché manca una direzione preferenziale.
Spero di aver chiarito le mie ragioni e di essere rimasto dentro un ambito critico costruttivo.
Ciao,
Pietro.

)