Ricavare funzione partendo da matrice di risultati

Analisi, algebra lineare, topologia, gruppi, anelli, campi, ...
Rispondi
CyCop
Messaggi: 4
Iscritto il: 12 giu 2007, 17:16

Ricavare funzione partendo da matrice di risultati

Messaggio da CyCop »

Ciao a tutti, sono nuovo del forum ;)
Scrivo perchè ho un problemino, nulla di vitale, ma sono alcuni mesi che ogni tanto ho a che fare con questa tabella di valori (vedi allegato) e vorrei sfruttarla un po' meglio...
Veloce spiegazione:
c'è una condizione principale
in base a quella condizione ci sono 9 serie di risultati, la formula per calcolarle dovrebbe essere la stessa, credo cambi solo una variabile
Il mio problema è che la condizione principale ha un'approssimazione di 5 unità ma in realtà mi servirebbe di 1 e, oltretutto, la tabella si ferma a 100 mentre a me servirebbe almeno fino a 500...
Ho fatto un tool excel che approssima i valori delle curve in modo da darmi i valori intermedi ma non è molto preciso come metodo, se serve magari ve lo posto...
So che ricavare una formula dal grafico o dai risultati non è così semplice ma confido nel vostro aiuto...
A occhio e croce sembrerebbe una mezza curva di gauss ma non riesco a replicare la forumula giusta :roll:
Purtroppo l'università passata da parecchio e senza allenamento mi sono parecchio arrugginito :oops:
Allegati
tabella.zip
(715 Byte) Scaricato 585 volte
Avatar utente
teppic
Moderatore
Messaggi: 726
Iscritto il: 26 ago 2005, 09:50
Località: Parma
Contatta:

Messaggio da teppic »

Curiosità: viene da qualche gioco di ruolo?
CyCop
Messaggi: 4
Iscritto il: 12 giu 2007, 17:16

Messaggio da CyCop »

Ciao Teppic :)
Sì, è parte di un gdr :wink:
Avatar utente
Marco
Site Admin
Messaggi: 1331
Iscritto il: 01 gen 1970, 01:00
Località: IMO '93

Messaggio da Marco »

Boh, io ho provato a metterla in pancia ad una routine di ottimizzazione.

Le forme funzionali che vanno meglio sono la funzione d'errore
$ $\matcal N(x) = \frac{1}{\sqrt2 \pi} \int_{-\infty}^x \exp \left( \frac{t^2}{2} \right) \ dt $

e la funzione logistica:
$ $\frac{1}{1+\exp(-x)} $

Chiamo $ f(x) $ una delle due funzioni sopra, $ F(x) = 100[1-f(x)] $ è la riscalatura che decresce da 100 a 0.

Intruduco due parametri $ \mu $ e $ \sigma $, che mi danno il centro e la pendenza (per la funzione d'errore, sono le classiche media e deviazione stadard).

Allora, mi piacerebbe rappresentare le colonne della tua tabella come
$ $ F \left( \frac{ x - \mu }{\sigma} \right) $, dove $ x $ è la colonna di input (quella che va da 5 a 100).

I parameteri $ \mu $ e $ \sigma $ dipendono dalla colonna $ c=0, \dots, 8 $, e sono bene approssimati da una legge di potenza
$ \mu(c) = k \alpha^c $ e idem per $ \sigma $.

L'ottimizzatore mi trova (approssimando con due decimali), per la funzione d'errore,

$ \mu(c) = 37.26 \cdot 1.10^c $; $ \sigma(c) = 13.70 \cdot 1.11^c $.

Invece per la logistica:

$ \mu(c) = 37.18 \cdot 1.10^c $; $ \sigma(c) = 8.08 \cdot 1.11^c $.

Con entrambe, le tabelle risultanti si discostano dalla tabella voluta al massimo di 5.
[i:2epswnx1]già ambasciatore ufficiale di RM in Londra[/i:2epswnx1]
- - - - -
"Well, master, we're in a fix and no mistake."
CyCop
Messaggi: 4
Iscritto il: 12 giu 2007, 17:16

Messaggio da CyCop »

Ciao Marco, anzitutto grazie della risposta e dello sbattimento però non mi è chiara la formula finale...

usando la funzione logica (per comodità di inserimento in excel) la formula finale verrebbe:

=100*(1-(1/(1+EXP(-f(x)))))

dove f(x) = ((x-(37.18*1,1^c))/(8,08*1,11^c))

ovviamente x = condizione primaria da 5 a 100
e
c = colonna della tabella dei risultati da 0 a 8

è corretta così o mi son perso qualche giro?

Grazie ancora :)
Avatar utente
Marco
Site Admin
Messaggi: 1331
Iscritto il: 01 gen 1970, 01:00
Località: IMO '93

Messaggio da Marco »

No, direi che torna.

Si chiama funzione "logistica" e non "logica". Inoltre, se vuoi, per la funzione d'errore (funzione cumulativa della distribuzione normale standard), esiste già built-in in excel: NORMSDIST nella versione inglese (c'è anche in quella italiana, ma non saprei la traduzione del suo nome).
[i:2epswnx1]già ambasciatore ufficiale di RM in Londra[/i:2epswnx1]
- - - - -
"Well, master, we're in a fix and no mistake."
Avatar utente
teppic
Moderatore
Messaggi: 726
Iscritto il: 26 ago 2005, 09:50
Località: Parma
Contatta:

Messaggio da teppic »

Marco ha scritto:NORMSDIST nella versione inglese (c'è anche in quella italiana, ma non saprei la traduzione del suo nome).
DISTRIB.NORM.ST :?

Sto da giorni provando a trovare un'interpolazione più accurata. Forse tra un po' arrivo a qualcosa.
Avatar utente
FeddyStra
Messaggi: 403
Iscritto il: 19 set 2006, 15:34
Località: 45° 7' 19.2'' N 7° 23' 20.1'' E

Messaggio da FeddyStra »

Mi sono limitato a inserire i dati della prima colonna $ v_0 $, ma se serve posso fare anche le altre.
Se ho capito bene il problema, questi valori si riescono ad approssimare abbastanza bene con la formula
$ \displaystyle Round \left ( \frac a {1+b x^5} \right) $ con $ a=98.55099101976144... $ e $ b=1.4163436899165551...\cdot 10^{-8} $.
In questo modo ho ottenuto una tabella $ \lbrace99, 98, 98, 94, 87, 73, 57, 40, 27, 18, 12, 8, 6, 4, 3, 2, 2, 1, 1, 1\rbrace $ che si discosta di al massimo $ 1 $ da quella data.

Aggiunta successiva

Colonna $ v_1 $.
Formula di approssimazione:
$ \displaystyle Round \left ( \frac a {1+b x^5} \right) $
con $ a=98.00327186316913... $
e $ b=9.39148326192361...\cdot 10^{-9} $.
Tabella generata: $ \lbrace98, 98, 97, 95, 90, 80, 66, 50, 36, 25, 17, 12, 8, 6, 4, 3, 2, 2, 1, 1\rbrace $; con un errore massimo di 2.
[quote="julio14"]Ci sono casi in cui "si deduce" si può sostituire con "è un'induzione che saprebbe fare anche un macaco", ma per come hai impostato i conti non mi sembra la tua situazione...[/quote][quote="Tibor Gallai"]Ah, un ultimo consiglio che risolve qualsiasi dubbio: ragiona. Le cose non funzionano perché lo dico io o Cauchy o Dio, ma perché hanno senso.[/quote]To understand recursion, you fist need to understand recursion.
[tex]i \in \| al \| \, \pi \, \zeta(1)[/tex]
CyCop
Messaggi: 4
Iscritto il: 12 giu 2007, 17:16

Messaggio da CyCop »

Si chiama funzione "logistica" e non "logica"
:oops:

per la distribuzione normale ho trovato il comando anche in openoffice
DISTRIB.NORM(Probabilità; Media; Deviazione standard; Cumulativo)

FeddyStra, effettivamente la tua formula è quella che si avvicina di più anche se non ho ben capito come ci sei arrivato... :?

Sto provando parecchi algoritmi che + o - si adattano al tipo di curva ma non ne vengo a capo...
Ho provato anche il sofisticatissimo metodo della "botta di fortuna" cercando grafici simili su google per trovare delle formule che potesse andare bene ma nulla :(

Vedo se posso dare qualche indizio, elenco di seguito altre formule del programma così magari da dare qualche spunto...

Xn=X1*N^2

Yn=(K*N^2)/z

X=k*(1+(sqrt(L1)/10))*(1+(sqrt(L2)/10))*(1+(sqrt(L3)/10))*etc...

le tre formule non hanno legami tra loro, le ho solo postate per mostrare il "modus operandi" del programmatore...
Queste erano semplici, infatti sono state trovate quasi subito, ma quella inerente la tabella suddetta ormai sono quasi 2 anni che in molti provano a trovarla senza successo...

EDIT: secondo voi il MatLab potrebbe essermi utile?
Avatar utente
FeddyStra
Messaggi: 403
Iscritto il: 19 set 2006, 15:34
Località: 45° 7' 19.2'' N 7° 23' 20.1'' E

Messaggio da FeddyStra »

CyCop ha scritto:FeddyStra, effettivamente la tua formula è quella che si avvicina di più anche se non ho ben capito come ci sei arrivato... :?
Ho ipotizzato che la formula per ogni colonna $ v_i $ fosse del tipo $ \displaystyle f(x)=\frac a {1+b x^5} $. A questo punto calcolo $ r(x)=(f(x)-t(x))^2 $, dove $ t(x) $ è il valore nella tabella corrispondente alla condizione principale $ x $. Ovviamente posso calcolare $ r(x) $ solo per i valori di $ t(x) $ che conosco, ovvero per $ $x=5, 10, 15, ..., 100$ $. $ r(x) $ è quindi lo scarto quadratico della funzione $ f(x) $ rispetto ai dati della tabella $ t(x) $. Se ora sommo i valori di $ r(x) $ ottengo una misura di errore $ E=r(5)+r(10)+r(15)+...+r(100) $ che è una funzione di $ a $ e di $ b $. Sorge allora il problema di minimizzare $ E $. Uguagliando a zero le derivate parziali di $ E $ rispetto ad $ a $ e $ b $ e risolvendo (con approssimazione), ottengo i due risultati che ti ho fornito. Ovviamente devo controllare che le derivate parziali seconde in quei punti siano positive per essere sicuro di aver trovato dei minimi e non dei massimi. Poi, dal momento che i valori della tabella sono interi, ho aggiunto un $ Round $ davanti...
CyCop ha scritto:secondo voi il MatLab potrebbe essermi utile?
Io personalmente preferisco Derive e Mathematica.
[quote="julio14"]Ci sono casi in cui "si deduce" si può sostituire con "è un'induzione che saprebbe fare anche un macaco", ma per come hai impostato i conti non mi sembra la tua situazione...[/quote][quote="Tibor Gallai"]Ah, un ultimo consiglio che risolve qualsiasi dubbio: ragiona. Le cose non funzionano perché lo dico io o Cauchy o Dio, ma perché hanno senso.[/quote]To understand recursion, you fist need to understand recursion.
[tex]i \in \| al \| \, \pi \, \zeta(1)[/tex]
Rispondi