Virheenmetsästysketju

Seuraa 
Viestejä1473
Liittynyt6.6.2009

Ajattelin pistää tällaisen ketjun, jonka tarkoituksena on auttaa jonkin ongelman kanssa jumiin jääneitä ja tuottaa tyydytystä pätemishaluisille. Eli tähän ketjuun kaikki matematiikan, fysiikan, kemian ja muidenkin tieteenalojen hengentuotokset, joissa on selvästi jokin virhe, mutta et itse löydä sitä. Monta vierasta silmäparia löytää varmasti virheen nopeammin.

Avaisin pelin yksinkertaisella PNS-käyränsovitusongelmalla, jonka parissa olen tämän illan tapellut ja karsinut virheitä. Yksi pirulainen on kuitenkin vielä löytämättä, sillä käyrä ei sovitu lainkaan edes kahteen datapisteeseen. Manuaalisesti parametrejä haarukoimalla kyllä saan oivan sovituksen aikaiseksi.
Käppyrähän on
y=a*e^(-b*x)+c,
jossa a ja b ovat sovitettavat parametrit, c:n määrään itse. Pienellä pyörittelyllä saadaan
ln(y-c)=ln(a)-b*x.
PNS-muoto olisi siis
f=S(ln(a)-b*X-ln(Y-c))²,
missä S on se summa-sigma. Sitten minimoimaan eli pitäisi saada
df/da=0 ja df/db=0.
Lasketaan osittaisderivaatat
df/da=2/a*S(ln(a)-b*X-ln(Y-c)) ja df/db=2*S((ln(a)-b*X-ln(Y-c))(-X))
=>
-b*S(X)-S(ln(Y-c))+n*ln(a)=0
-ln(a)*S(X)+S(X*ln(Y-c))+b*S(X²)=0
Merkitään:
A=S(X), B=S(X²), C=S(ln(Y-c)), D=S(X*ln(Y-c))
=>
-b*A-C+n*ln(a)=0 (1)
-ln(a)*A+D+b*B=0 (2).
Ratkaistaan b yhtälöstä (1)
b=(n*ln(a)-C)/A
ja sijoitetaan tähän ln(a) yhtälöstä (2)
b=(n*(D+b*B)/A-C)/A <=> b=(n*D-A*C)/(1-B)
=>
a=exp((D+b*B)/A)

Noh, huomasin sitten vihdoin ja vihoviimein virheeni. Naurettava huolimattomuusvirhe yhtälön pyörittelyssä, jota en kerta kaikkiaan nähnyt. Mieli tekisi poistaa laskuni, mutta onhan ketjulla oltava kunnon avaus!
b=(n*(D+b*B)/A-C)/A <=> b=n/A²*(D+b*B)-C/A <=> b=n*D/A²+n*b*B/A²-C/A <=> b=(n*D/A²-C/A)/(1-n*B/A²) <=> b=(n*D-A*C)/(A²-n*B)

Kommentit (1)

Uusimmat

Suosituimmat