TechBlog cikkei

Exponenciális interpolálás 3 ponton

Unknown magic content: 'mathml'

Egy zenei fórumon a következő problémába futottam: valaki exponenciálisan szeretne paramétereket skálázni. Ez azt jelenti, hogy van egy $[x_\min, x_\max]$ intervallum, amit exponenciálisan le szeretne képezni egy $[y_\min, y_\max]$ intervallumra. A feltétel, amit előírt, hogy van egy bizonyos $x_\mathrm{avg}$ szám, aminek a képe az $y_\mathrm{avg}$ számnak kell, hogy legyen (az eddig megadott hat valós szám tehát előre ismert paraméter).

Ebből kéne kitalálni, hogy melyik az az $y = a \mathrm{exp}\left(bx\right) + c$ alakú függvény, ami az egyik intervallumot a másikra képezi.

Elsőre látszik, hogy itt a kulcs a $b$ paraméter meghatározása lesz. Ha ugyanis $b$ ismert, akkor $a$ és $c$ meghatározása visszavezetődik egy lineáris egyenletrendszer megoldására, a következő módon:

$a = \frac{y_\min - y_\mathrm{avg}}{\mathrm{exp}\left(bx_\min\right) - \mathrm{exp}\left(bx_\mathrm{avg}\right)}$

$c = y_\min - a \mathrm{exp}\left(bx_\min\right)$

A probléma tehát tényleg a $b$ paraméter megadásán múlik.

Ha az ember kellően sokat ügyeskedik, akkor a fenti kifejezések visszahelyettesítésével végül a következő egyenletig jut el:

$\frac{\gamma^{\alpha-1} - 1}{\gamma^{\beta-1} - 1} = \frac{y_\min - y_\mathrm{avg}}{y_\max - y_\min}$,

ahol $\alpha = \frac{x_\mathrm{avg}}{x_\min}$ , $\beta = \frac{x_\max}{x_\min}$ és $\gamma = \mathrm{exp}\left(bx^\min\right)$. Vagyis, ha sikerülne a fenti egyenletből $\gamma$-t meghatározni, akkor kész is vagyunk.

És ez az a pont, ahol elakadtam...

Utoljára módosította SAdam 2012.VIII.28 17:02-n
Bejegyzés módosítása | PermaLink
Szavazás letiltva.

Hozzászólások

9

UPi 2012.VIII.27 21:38

Van MathML! Az első két képletet átírtam, a többit meghagyom házi feladatnak :P


SAdam 2012.VIII.28 18:01

Unknown magic content: 'mathml'
Mivel $\gamma$ egy exponenciális dolog, ezért biztosan pozitív. Ha felteszem, hogy $x_\min<x_\mathrm{avg}<x_\max$ és $y_\min<y_\mathrm{avg}<y_\max$, akkor egyrészt a két exponens ($\alpha-1$ és $\beta-1$) biztosan pozitív, másrészt, a jobb oldalon biztosan egy negatív szám áll (a számláló negatív, a nevező pozitív). Mivel a fentiekből az is következik, hogy $\alpha<\beta$, ezért a bal oldalon kizárásos alapon a számlálónak kell negatívnak lennie, a nevezőnek pedig pozitívnak, vagyis egy olyan $\gamma$ számot keresünk, aminek egy adott hatványa kisebb, mint 1, de egy másik (annál nagyobb) hatványa már nagyobb, mint 1. Erős a gyanúm, hogy ilyen (pozitív) $\gamma$ nem létezik...

SAdam 2012.VIII.28 18:03

(Válaszképp erre)

... ami persze azért tűnik ellentmondásosnak, mert ha veszek egy tetszőleges exponenciális függvényt, és három különböző x-hez generálok három y értéket, akkor azoknak értelemszerűen megoldást kellene, hogy adjanak. Szóval valamit elszámoltam, úgy tűnik.


Descant 2012.IX.05 11:18

Nem megy nekem a mathml. Nem Sadam a kulcs igazából a c paraméter, téged a b érdekel de a kettő egymást fejezi ki. Én arra jutottam, egy kis legkisebb négyzetek és két közelítős megoldás után, hogy

ln((ymin-c)/(yavg-c))/(x1-x2)=ln((yavg-c)/(ymax-c))/(xavg-xmax)=ln((ymax-c)/(ymin-c))/(xmax-xmin) egyenletet kell megoldani numerikusan a (-inf,ymin) tartományon

upload:Descant/untitled.bmp ezek az egyes szakaszokból meghatározott b-k

upload:untitled2.bmp ezek meg a külömbségek

amit meg is lehet csinálni ha ymin-től indulsz el negatív irányban mert a metszetig monoton.

Nekem is van egy kérdésem tudod, hogy exponenciális lefolyású folyamatoknál miért szokás jó sokáig mérni?

Ettől a szartól nem tudtam aludni.


SAdam 2012.IX.05 12:04

(Válaszképp erre)

Átírtam LaTeX-be a fenti képletet, hogy a későbbiekben egyszerű legyen az élet (copy+paste+latex futtatás):

 \[\frac{\log\left(\frac{y_\mathrm{min}-c}{y_\mathrm{avg}-c}\right)}{x_\mathrm{min}-x_\mathrm{avg}}=\frac{\log\left(\frac{y_\mathrm{avg}-c}{y_\mathrm{max}-c}\right)}{x_\mathrm{avg}-x_\mathrm{max}}=\frac{\log\left(\frac{y_\mathrm{max}-c}{y_\mathrm{min}-c}\right)}{x_\mathrm{max}-x_\mathrm{min}}\]

Ami azt illeti, az α=x<sub>min</sub>–x<sub>avg</sub>, β=x<sub>avg</sub>–x<sub>max</sub> és γ=x<sub>max</sub>–x<sub>min</sub> kifejezések (amiket ismerünk, mert az x-ek ismertek) bevezetésével ez könnyen nullára rendezhető:

αln(y<sub>max</sub>–c) + βln(y<sub>min</sub>–c) + γln(y<sub>avg</sub>–c) = 0

Vagy LaTeX-esen:

 \[\alpha\log(y_\mathrm{max}-c)+\beta\log(y_\mathrm{min}-c)+\gamma\log(y_\mathrm{avg}-c)=0\]

A baj csak az, hogy ezt még mindig nem tudom analitikusan megoldani. Az eredeti problémafelvetés arról szólt, hogy kéne egy olyan megoldás, amit utána le tudok programozni C-ben, lehetőleg úgy, hogy ne menjen rá egy hetem arra, hogy a megoldást magát leprogramozzam. Vagyis egy egyszerű formulát keresek, amit csak begépelek egy programsorba, és kidobja a paramétereket. Abban reménykedem, hogy mivel van egy egyenletem és egy ismeretlenem (jelen esetben ez a c változó), csak akad valami analitikus megoldás. Még csak integrálok meg deriválások sincsenek benne...


SAdam 2012.IX.05 12:19

(Válaszképp erre)

Hm... most látom, hogy a nullára rendezést elszúrtam. Mármint ott, hogy ha a törtek számlálója és nevezője egyszerre negatív, akkor az eredeti, törtes felírás működik, viszont a kivonásoknál abszolút-értéket kell venni. Szóval a fenti képletben a logaritmusok argumentumai mind abszolút-értékben szerepelnek, valamint a programozásnál oda kell figyelni arra, hogy vagy mind pozitívak, vagy mind negatívak legyenek az abszolútértékek argumentumai.


Descant 2012.IX.05 12:09

Sadam egy ilyet leprogramozni nem egy hét. Szerintem még viszonylag gyorsan bekonvergálna, akár azzal a deriváltja hol metszi a 0 tengely módszerrel. Nem hiszem, hogy van rá analitikus megoldás.


Wigy 2012.IX.05 16:05

Nekem van egy levezetésem, amiben eljutottam idáig:

$a_1*x^{b_1}+a_3*x^{b_2}+a_3*x^{b_3}=0$

Ennek a megoldásán sokat segítene, ha kiköthetjük, hogy $b_2$ számtani átlaga $b_1$-nek és $b_3$-nak


Descant 2012.IX.05 16:51

(Válaszképp erre)

Mi a1;a3? A második tagban az nem a2 akart lenni? Mi b1, b2 és b3? Mi az x eddig csak indexes x-ek voltak

Tagek: