Risoluzione delle equazioni esponenziali

andregiran
Andrea Girandi, economista e studioso di matematica e statistica, propone un nuovo metodo generale di risoluzione delle equazioni esponenziali.

Il metodo, detto delle iterazioni successive, parte dal calcolo del logaritmo della media aritmetica semplice dei termini esponenziali. La base del logaritmo è data invece dalla media geometrica ponderata delle basi, dove i pesi sono costituiti dai logaritmi naturali delle basi stesse.

L'algoritmo, applicabile al caso in cui le basi abbiano lo stesso segno e l'esponente sia diverso da zero, è illustrato in dettaglio al seguente link, al quale è possibile effettuare il download del relativo file word (dalla barra superiore del menu di dropbox):

https://www.dropbox.com/s/r9o7d5mfeswup ... i.doc?dl=0

Di seguito si riporta il link a un file Excel che contiene una simulazione dell'algoritmo esponenziale con 2 iterazioni e 5 basi. La cella B33 del file restituisce l'errore di approssimazione, che (come si può notare) è del tutto trascurabile (al più, alcuni milionesimi) già alla seconda iterazione!

(Si osserva infatti che le difficoltà di calcolo segnalate dal collega nel messaggio sottostante derivano esclusivamente da un problema transitorio del suo programma, non da un problema di validità dell'algoritmo proposto).

E' possibile in ogni caso eseguire delle prove modificando le celle con i valori delle 5 basi, alla riga 7, e della somma degli esponenziali, nella cella B16. L'unica cella che non si modifica è B20 (cioè il valore dell'esponente, essendo questo non noto); tutte le altre sì, inclusa la B33 relativa all'errore di approssimazione, che resterà sempre trascurabile.

https://www.dropbox.com/s/hgm90d2z808oi ... i.xls?dl=0

Risposte
Studente Anonimo
Studente Anonimo
ATTENZIONE: pensavo che fosse [tex]a_j^{\text{ln}(a_j)}=e[/tex] e questo è evidentemente falso. Quando ho tempo riprovo a fare una simulazione. Quanto scritto sotto andrebbe cancellato ma lo lascio perché potrebbe tornare utile.

-------

Interessante. Però vedo due problemi. Il primo è che nel tuo scritto non mi sembrano esserci dimostrazioni. Il secondo è che ho provato a fare delle prove col programma Mathematica e questo è il risultato: le equazioni

[tex]2^x+2^x+3^x = 2^3+2^3+3^3[/tex],
[tex]3^x+4^x+4^x = 3^3+4^3+4^3[/tex],
[tex]2^x+3^x = 2^2+3^2[/tex],
[tex]3^x+4^x = 3^2+4^2[/tex]

vengono risolte con poche iterazioni, mentre le equazioni:

[tex]3^x+4^x+5^x = 3^3+4^3+5^3[/tex],
[tex]3^x+6^x = 3^2+6^2[/tex]

risultano ostiche: dopo duecentomila iterazioni continua a darmi i valori (rispettivamente) 6.26588 e 34.4208.

Potrei aver interpretato male il testo e aver di conseguenza sbagliato a scrivere il codice, in ogni caso tu hai provato a fare un po' di prove con un programma? Credo che sia importante.

Poi non capisco perché scrivi [tex]{a_j}^{\text{ln}(a_j)}[/tex] e non semplicemente [tex]e[/tex].

Ecco le righe di codice.


andregiran
Ciao Martino,

la scrittura aj ^ ln(aj) ha un valore diverso da e. In altri termini, vado semplicemente ad elevare le basi degli esponenziali, aj, per il loro logaritmo in base e. Il risultato in generale è diverso da e. Infatti, solo se la base fosse e il risultato sarebbe uguale ad e.

Riguardo alle iterazioni, ho fatto diverse simulazioni in Excel che già alla seconda iterazione danno errori di approssimazione infinitesimali. Credo quindi sia un problema del tuo programma, che è probabilmente risolvibile con poche modifiche. Inserirò a breve il link ad un file .xls di dropbox.

Studente Anonimo
Studente Anonimo
Eh lo so, me ne sono appena accorto :p
Quando ho tempo riprovo a fare qualche simulazione.

Comunque perché il tuo articolo sia valido bisognerebbe scrivere la dimostrazione formale.
Cioè, non hai scritto proprio in "matematichese" :)

Ciao

andregiran
Ecco il link al file Excel (chiedo venia per la versione un po' "antiquata" di office).

https://www.dropbox.com/s/aka7cqf41ahbr ... ioni.xls?m

Ho scelto di sviluppare un esempio con 5 basi. Come si può notare, la cella B33 restituisce l'entità dell'errore di stima, che è "infinitesimale" già alla seconda iterazione. Ho scelto volutamente numeri piccoli, ma è agevole verificare (modificando a piacere i valori delle basi aj nelle celle da B7 a F7) che l'errore resta trascurabile. Ovviamente, anche il valore della somma è modificabile a piacere, nella cella B16.

Unico accorgimento: le basi devono avere tutte lo stesso segno. L'unica cella che come vedrete non viene modificata è B20 (vero valore dell'esponente - ovvio, se lo sapessimo già a priori non avrebbe senso il problema) - ma l'entità dell'errore di stima, nella cella B33, ci dice in ogni caso di quanto stiamo sbagliando, essendo noto il valore della somma, che scegliamo noi a piacere (nel mio esempio, è pari a 8,80E-06... negligible!).

Sarebbe bello se si riuscisse a sviluppare in Matlab o altri software un algoritmo automatizzato a infinite iterazioni... avremmo un autentico programma da brevettare che (con basi dello stesso segno e exp diverso da zero) non sbaglierebbe mai!

andregiran
Giusto. Alla dimostrazione formale sto lavorando...

Ma il concetto è intuitivo: il valore della somma delle basi elevate al nuovo esponente, cioè a quello che si ottiene ad ogni iterazione, è sempre più vicino a c, cioè al vero valore della somma degli aj^x.

Questo è dovuto al fatto che la "correzione" dell'esponente originario è basata proprio sul rapporto (o scostamento %) tra la somma degli esponenziali "distorti" e la vera somma, data da c. In pratica, si rettifica l'esponente ad ogni iterazione correggendolo con il logaritmo di questo rapporto, che attenua il margine di errore ad ogni step.

Essendo il nuovo esponente sempre più preciso del precedente, il nuovo valore del logaritmo sarà sempre più vicino a 0 (poiché il rapporto tende a 1 per n che tende a infinito), e alla fine lo stesso fattore correttivo sarà trascurabile. Comunque darò una dimostrazione più formale.


"Martino":
Eh lo so, me ne sono appena accorto :p
Quando ho tempo riprovo a fare qualche simulazione.

Comunque perché il tuo articolo sia valido bisognerebbe scrivere la dimostrazione formale.
Cioè, non hai scritto proprio in "matematichese" :)

Ciao

Studente Anonimo
Studente Anonimo
Ecco le ultime prove che ho fatto. 10 iterazioni sembrano essere sufficienti per molti casi.


andregiran
"Martino":
Ecco le ultime prove che ho fatto. 10 iterazioni sembrano essere sufficienti per molti casi.



Ottimo! Sui miei file Excel ne bastano 2 o 3... In ogni caso il tuo programma è già molto migliorato. Possiamo dirlo, abbiamo un nuovo metodo risolutivo delle equazioni esponenziali, su cui creare nuovi software.

Studente Anonimo
Studente Anonimo
Possiamo dirlo, abbiamo un nuovo metodo risolutivo delle equazioni esponenziali, su cui creare nuovi software.
Che sia un metodo risolutivo ci credo, ma ho paura che non sia nuovo... conosci il metodo delle tangenti di Newton? Mi sembra abbastanza simile al tuo nel caso particolare che consideri. Il metodo delle tangenti è un algoritmo iterativo che permette di approssimare la soluzione di una qualsiasi equazione definita da una curva sufficientemente regolare (e la convergenza è veloce). Quindi quello che hai permesso di fare con la tua idea si sapeva già fare. Bisognerebbe controllare se il tuo metodo è essenzialmente diverso da quello di Newton oppure no. Prova a darci un'occhiata.

andregiran
"Martino":
Possiamo dirlo, abbiamo un nuovo metodo risolutivo delle equazioni esponenziali, su cui creare nuovi software.
Che sia un metodo risolutivo ci credo, ma ho paura che non sia nuovo... conosci il metodo delle tangenti di Newton? Mi sembra abbastanza simile al tuo nel caso particolare che consideri. Il metodo delle tangenti è un algoritmo iterativo che permette di approssimare la soluzione di una qualsiasi equazione definita da una curva sufficientemente regolare (e la convergenza è veloce). Quindi quello che hai permesso di fare con la tua idea si sapeva già fare. Bisognerebbe controllare se il tuo metodo è essenzialmente diverso da quello di Newton oppure no. Prova a darci un'occhiata.


In realtà, il metodo delle tangenti di Newton-Raphson è diverso dal mio e (non vorrei peccare di immodestia) un po' meno preciso, perché parte dal procedimento di interpolazione lineare (reiterata) del grafico di f(x) attraverso l'equazione delle rette tangenti al grafico della funzione in un punto ottenute con le derivate del primo, secondo ordine e così via. Applicato al problema esponeziale, si tratterebbe di trovare rette interpolanti del diagramma dell'equazione:

f(x) = Sommatoria (aj^x) - c = 0, dove x è la variabile in ascissa. Ovviamente gli aj sono noti, per cui è possibile tracciare un grafico qualitativo di f(x) e pensare di applicare il metodo delle tangenti.

Si tratterebbe anzitutto di dare due valori "arbitrari" all'esponente x: uno, ad esempio, calcolato sostituendo agli aj il minimo tra gli stessi aj; l'altro, calcolato a partire dal max(aj). Dopodiché, con interpolazione lineare, si può arrivare a una sorta di "media", il cui valore viene raffinato progressivamente ad ogni step.

Ma l'algoritmo di Newton, sfortunatamente, non garantisce sempre la convergenza, soprattutto quando la derivata prima, f'(x) varia notevolmente in un intorno di 0. Quindi, gli step successivi potrebbero portare a valori di x più distanti da quello vero. Inoltre, vi possono essere problemi relativi all'esistenza di f'(x).

Il mio metodo, basato invece sul calcolo logaritmico, garantisce sempre la convergenza (tranne il caso banale x=0, che di per sè, essendo immediatamente verificabile, non richiede algoritmi risolutivi!). In comune con il metodo di Newton-Raphson, il mio ha certamente il meccanismo di approssimazioni successive del valore di x per iterazione.

Avevo invece pensato alla possibilità di sostituire il mio metodo con il metodo della trasformata di Fourier... In altri termini, riuscire a formulare in altro modo l'espressione data dalla somma di n logaritmi. Ma sembra che si possa applicare a un numero limitato di casi.

Studente Anonimo
Studente Anonimo
Ma l'algoritmo di Newton, sfortunatamente, non garantisce sempre la convergenza, soprattutto quando la derivata prima, f'(x) varia notevolmente in un intorno di 0. Quindi, gli step successivi potrebbero portare a valori di x più distanti da quello vero. Inoltre, vi possono essere problemi relativi all'esistenza di f'(x).
Non capisco bene cosa intendi dire. Il metodo delle tangenti risolve il problema per qualsiasi curva almeno [tex]C^1[/tex], mentre la curva che consideri tu, [tex]f(x) = \sum_{i=1}^m {a_j}^x - c[/tex], è un caso molto particolare e non ritengo che il tuo metodo sia "più preciso". Come ti dico, secondo me l'unica cosa da controllare è se le idee che usi tu si distanziano concettualmente da quelle del metodo delle tangenti oppure no. Vedi anche la pagina in inglese. La mia opinione è questa, poi vedi tu :) ciao.

andregiran
"Martino":
Ma l'algoritmo di Newton, sfortunatamente, non garantisce sempre la convergenza, soprattutto quando la derivata prima, f'(x) varia notevolmente in un intorno di 0. Quindi, gli step successivi potrebbero portare a valori di x più distanti da quello vero. Inoltre, vi possono essere problemi relativi all'esistenza di f'(x).
Non capisco bene cosa intendi dire. Il metodo delle tangenti risolve il problema per qualsiasi curva almeno [tex]C^1[/tex], mentre la curva che consideri tu, [tex]f(x) = \sum_{i=1}^m {a_j}^x - c[/tex], è un caso molto particolare e non ritengo che il tuo metodo sia "più preciso". Come ti dico, secondo me l'unica cosa da controllare è se le idee che usi tu si distanziano concettualmente da quelle del metodo delle tangenti oppure no. Vedi anche la pagina in inglese. La mia opinione è questa, poi vedi tu :) ciao.


Intendo dire che se la derivata prima cambia rapidamente, non è detto che le interpolazioni successive migliorino la stima di x, potendo essere molto diverso il coefficiente angolare delle singole rette. Questo può accentuare la differenza tra i valori delle controimmagini. In questo senso, il metodo di Newton pecca un po' di precisione.

Il metodo che io propongo invece non è basato sulle rette tangenti, ossia non ricorre al calcolo differenziale. Quindi, è qualitativamente diverso. Inoltre assicura sempre la convergenza.

Studente Anonimo
Studente Anonimo
Credo che un'applicazione oculata del metodo di Newton permetta di risolvere qualsiasi equazione del tipo [tex]\sum_{j=1}^m {a_j}^x = c[/tex] con convergenza assicurata (cioè, è possibile scegliere un buon punto di partenza e non cadere in loop). Gli esponenziali sono [tex]C^{\infty}[/tex] quindi non ci sono problemi di regolarità. Tuttavia è solo la mia impressione. Per ottenere pareri più autorevoli sposto l'argomento in analisi numerica.

andregiran
Ok, forse è una sezione più appropriata.

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