Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 14. 11. 2015 16:31

novyclen
Zelenáč
Příspěvky: 7
Škola: EU
Pozice: student
Reputace:   
 

Error Function

Ahojte, prosím vás o radu. Práve si prezerám ako naprogramovať excelovskú funkciu NORMSDIST - http://www.codeproject.com/Articles/408 … ORMSDIST-z - a vôbec neviem prísť nato odkiaľ autor vzal hodnoty konštánt od "a1" až po "a5" a hodnotu konštanty "p". Môžete mi, prosím, pomôcť a napísať mi, čo sú to za čísla aký je ich pôvod?

Ďakujem

Offline

 

#2 15. 11. 2015 06:11

OndrasV
Místo: Praha
Příspěvky: 513
Škola: VŠE (1997-2004), FEL (2014-??)
Pozice: mudrlant
Reputace:   31 
 

Re: Error Function

↑ novyclen:Obávám se, že to budeš muset probrouzdat příslušnou práci nebo si zagooglit. Nic přímočarého to nebude.

Offline

 

#3 15. 11. 2015 09:22

jelena
Jelena
Místo: Opava
Příspěvky: 30020
Škola: MITHT (abs. 1986)
Pozice: plním požadavky ostatních
Reputace:   100 
 

Re: Error Function

Zdravím,

↑ novyclen: možná ještě pro upřesnění - nemyslíš "naprogramovat" jen nastavení funkce v EXCEL? Jelikož v odkazu je spíš zaměření na techniku přibližného výpočtu a porovnání s tím, co dává různá verze EXCEL, zda to opravdu potřebuješ.

↑ OndrasV: OT: přečteno, děkuji, žádný problém :-)

Offline

 

#4 15. 11. 2015 10:28

novyclen
Zelenáč
Příspěvky: 7
Škola: EU
Pozice: student
Reputace:   
 

Re: Error Function

Jelena - no potrebujem naprogramovať (aj v tomto som začiatočník :))taký calculator kde potrebujem, aby to vypočítalo ako keby NORMSDIST(x). Preto sa snažím porozumieť čo presne táto funkcia robí a ako ju naprogramovať. Zistil som, že ide o pravdepodobnosť, že NV bude <=X. Ide teda o distribučnú funkciu. Teraz to potrebujem naprogramovať a neviem si rady. Všetky zdroje, čo som našiel obsahujú tie konštanty a nikde neviem nájsť, že odkiaľ ich vzali. Čo sú to za čísla?

Tu sú tiež (v tom druhom príklade):

https://www.daniweb.com/programming/sof … excel-in-c

Offline

 

#5 15. 11. 2015 11:33 — Editoval mák (15. 11. 2015 21:45)

mák
Místo: Vesmír, Galaxie MD
Příspěvky: 869
Reputace:   62 
 

Re: Error Function

Zdravím,
pokud chceš naprogramovat funkci Standard Normal Distribution a nechceš použít dostupné prostředky (Excel atd), je vzorec zde (2),
${\it NormSDist}\left(x\right)={{\mathrm{erf}\left({{x}\over{\sqrt{2
 }}}\right)+1}\over{2}}$
(Opravený vzorec)


Zbývá ještě naprogramovat vzorec pro funkci erf() který najdeš zde (1).
$\mathrm{erf}\left(z\right)={{2}\over{\sqrt{\pi}}}\,\int_{0
 }^{z}{e^ {- t^2 }\;dt}$
Ten se provádí integrací. což je obyčejná suma ve smyčce.
Pokud nechceš integrovat, můžeš si vybrat jednu z aproximací, která je uvedena níže.


LibreOffice Verze: 7.6.6.3, Maxima 5.47.0 (SBCL)

Offline

 

#6 15. 11. 2015 11:39

jelena
Jelena
Místo: Opava
Příspěvky: 30020
Škola: MITHT (abs. 1986)
Pozice: plním požadavky ostatních
Reputace:   100 
 

Re: Error Function

↑ novyclen:

děkuji, piš, prosím, vždy přesné znění úlohy, kterou řešíš. Pokud máš programovat (v čem?) výpočet NormDistr a ve Tvém programu není nic, co by přímo tuto funkcí počítalo (nebo jiná zabudovaná pomůcka, která umožní počítat tuto funkci), potom musíš vycházet z faktu, že integrál od funkce $e^{-x^2}\d x $ nejde vyjádřit pomocí elementárních funkcí (nejde počítat některou "běžnou" metodou integrování) a musí nastoupit vhodná numerická metoda. 
Výsledky vhodných numerických metod jsou shrnuty v této částí článku a erf. Odkud pochází vypočtené hodnoty - viz přímo AaS, konkrétně. Pokud tato aproximace splňuje Tvé účely výpočtu, potom původ koeficientů je z odkazu a z výpočtu, který byl proveden numerickou metodou za použití techniky. A můžeš ho využit i ve své prací.

Jinak hodnoty NormDist jsou tabelovány. Stačí to tak? Děkuji.

Offline

 

#7 15. 11. 2015 11:41

jelena
Jelena
Místo: Opava
Příspěvky: 30020
Škola: MITHT (abs. 1986)
Pozice: plním požadavky ostatních
Reputace:   100 
 

Re: Error Function

↑ mák: Zdravím, nechám zde povídání s odkazy, pokud nevadí, jinak je to skoro totéž, co již jsi napsal, omluva za duplicitu.

Offline

 

#8 15. 11. 2015 15:30

novyclen
Zelenáč
Příspěvky: 7
Škola: EU
Pozice: student
Reputace:   
 

Re: Error Function

ach, ja tomu asi nerozumiem. Neviem sa z toho vysomáriť :(

Rozumiem, že výraz NormSDist (vyššie uvedený) je distribučná funkcia normovaného normálneho rozdelnia, ale neviem ako si mám prepojiť erf s touto distribučnou funkciou.

To "z" je v mojom prípade x/sqrt(2) alebo za tým "z" môže byť čokoľvek?

Prosím vás, v nasledujúcom obrázku sa dotyčným ako podarilo dostať to dCND ? Oni ako keby namiesto "e^-(x^2)" dosadili funkciu hustoty pre normované normálne rozdelenie... To prečo ? :/

//forum.matweb.cz/upload3/img/2015-11/97831_1.png

Offline

 

#9 15. 11. 2015 18:10

jelena
Jelena
Místo: Opava
Příspěvky: 30020
Škola: MITHT (abs. 1986)
Pozice: plním požadavky ostatních
Reputace:   100 
 

Re: Error Function

↑ novyclen:

můžeš, prosím, napsat přesně zadání, které máš vyřešit?

viz kolega ↑ mák:, který napsal (jen trochu upravím závorku) ${\it NormSDist}\left(x\right)={{\mathrm{erf}\left({{x}\over{\sqrt{2
 }}}\right)+1}\over{2}}$ a místo $\mathrm{erf}\left({{x}\over{\sqrt{2
 }}}\right)$ potřebujeme dosadit
$\mathrm{erf}\(\frac{x}{\sqrt{2
 }}\)=\frac{2}{\sqrt{\pi}}\int_{0
 }^{\frac{x}{\sqrt 2}}e^ {- t^2 }\;dt$

A pokud potřebuješ zapracovat do programu část výpočtu integrálu, tak nastupuje některá metoda aproximace, jak je v odkazech, co již v tématu jsou.

To "z" je v mojom prípade x/sqrt(2) alebo za tým "z" môže byť čokoľvek?

ano, je to x/sqrt(2). Řekni, co, prosím, děláš, do kterého předmětu a jak znělo zadání. Děkuji.

Offline

 

#10 15. 11. 2015 19:53

novyclen
Zelenáč
Příspěvky: 7
Škola: EU
Pozice: student
Reputace:   
 

Re: Error Function

Jelena, takže mám za úlohu spraviť projekt z programovania a ja som si zvolil, že si naprogramujem kalkulačku na výpočet ceny opcií. V exceli to nie je problém vyrátať. Zadajú sa parametre, použije sa funkcia NORMSDIST a hotovo. Lenže ak to chcem naprogramovať (C#), musím naprogramovať aj samotné NORMSDIST. A preto sa snažím tú funkciu pochopiť.

Viem, že NORMSDIST nejakého čísla mi vlastne vyráta pravdepodobnosť, že NV bude <= ako to číslo. Ale matematicky si to žiaľ neviem dať dokopy :(

Rozumiem správne, že distribučná funkcia normovaného normálneho rozdelenia má tvar:
${\it NormSDist}\left(x\right)={{\mathrm{erf}\left({{x}\over{\sqrt{2
 }}}+1\right)}\over{2}}$ ??

ja sa tomu snažím matematicky porozumieť, ale nedokážem presne pochopiť tie jednotlivé vzťahy...

prečo napr. v tom predošlom printscreene funguje vzťah:

dCND = 1.0 - 1.0 / Math.Sqrt(2 * Convert.ToDouble(Math.PI.ToString())) *
                Math.Exp(-L * L / 2.0) * (a1 * K + a2 * K  * K + a3 * Math.Pow(K, 3.0) +
                a4 * Math.Pow(K, 4.0) + a5 * Math.Pow(K, 5.0)); ??

kde oni naprogramovali to erf? však mi tam predsa chýba e^(-x^2)

akými matematickým vzťahmi dospeli k tomu tvaru a nemuseli postupovať napríklad podľa spôsobu uvedeného tu:
http://www.codeproject.com/Articles/408 … ORMSDIST-z ?

Naozaj budem vďačný, ak mi to niekto vysvetlí alebo mi nejakým spôsobom znázorní postup. Ďakujem pekne

//forum.matweb.cz/upload3/img/2015-11/13597_1.png

Offline

 

#11 15. 11. 2015 21:48

mák
Místo: Vesmír, Galaxie MD
Příspěvky: 869
Reputace:   62 
 

Re: Error Function

Zdravím ↑ jelena:, děkuji za opravu vzorce, který jsem chybně opsal.


LibreOffice Verze: 7.6.6.3, Maxima 5.47.0 (SBCL)

Offline

 

#12 15. 11. 2015 22:18 — Editoval Brano (15. 11. 2015 22:55)

Brano
Příspěvky: 2650
Reputace:   229 
 

Re: Error Function

a mas nejaky dovod na to aby si sa snazil vyrobit vlastnu implementaciu erf prave v tomto projekte? ved ani exp resp. nasobenie neimplementujes.
(samozrejme pre svoj vlastny rozvoj si poimplementuj vsetko na co najdes dostatok casu a chuti)

cize v prvej iteracii podla mna pokojne pouzi dostupny kod, ked ho verejne poskytuju zadarmo :-)
http://www.johndcook.com/blog/csharp_erf/
(nemyslim si ze by to bolo v tomto pripade nejake podvadzanie, lebo to vyzera ze tvoj projekt sa tyka primarne tych opcii a programovania a nie studia spinavych trikov z numeriky)

Inak samozreme plati to co pisali ostatni - jedna sa o nejak vhodne navrhnutu kvadraturu; a na to je vzdy vela moznosti, ktore mozu vyzerat aj znacne rozne a budu rozne presne, takze zato moze v podstate mat niekto jeden vzorec a niekto iny, iny vzorec

tu som ich zopar nasiel
http://people.math.sfu.ca/~cbm/aands/page_299.htm
ta 7.1.28 sa mi zda dokonca najjednoduchsie naprogramovatelna - a mas tam aj citaciu odkial je, tak ak by si velmi tuzil po odvodenii tak skus zhanat ten clanok
tieto aproximacie su pravdepodobne optimalizovane na jednoduchost/rychlost vypoctu; ak ti o rychlost neide a chces lubovolnu presnost, tak mozes pouzit Taylorov rozvoj, ten sa najde velmi jednoducho a mas ho aj tu
https://en.wikipedia.org/wiki/Error_fun … lor_series
- samozrejme potom musis pouzivat dostatocne presnu aritmetiku, lebo cim viac scitani a nasobeni mas; tym viac chyb sa ti nazbiera

Offline

 

#13 16. 11. 2015 16:53

novyclen
Zelenáč
Příspěvky: 7
Škola: EU
Pozice: student
Reputace:   
 

Re: Error Function

áno, viem o tom kóde. Ale trošku ustúpme od toho programovania. Ja sa to snažím pochopiť z matematického pohľadu. Nie je mi jasný pôvod/postup úprav jednotlivých vzorcov. Prepáčte, že postupujem tak staromódne, ale na papier som si napísal to, čo sa snažím pochopiť a prikladám to sem ako prílohu. Priamo do papiera som napísal, ktorým vzorcom nerozumiem. Neviem aký je ich pôvod/ako sme ich upravili a tak.

Môžete sa, prosím, niekto na to pozrieť a pomôcť mi s tým? chcel by som tomu rozumieť nielen to dať do kódu. ďakujem veľmi pekne :)

Tu je tá fotka (nemohol som to priamo sem prilepiť, pretože to malo viac ako 300kb):

http://www.fastimages.eu/images/matnqn.jpg

Offline

 

#14 16. 11. 2015 23:48 — Editoval Brano (16. 11. 2015 23:50)

Brano
Příspěvky: 2650
Reputace:   229 
 

Re: Error Function

ta druha otazka je lahka
$\mathrm{erf}\(z\)=\frac{2}{\sqrt{\pi}}\int_{0}^{z}e^ {- t^2 }\;dt$
je deinicia funkcie $\text{erf}$

a ked mas (pozor na duplicitne pouzivanie symbolov)
$\int_{-\infty}^x\frac{1}{\sqrt{2\pi}}e^{-\frac{s^2}{2}}ds=\frac{1}{2}+\int_{0}^x\frac{1}{\sqrt{2\pi}}e^{-\frac{s^2}{2}}ds$
tu substituuj $s=\sqrt{2}t$ a dostanes
$\frac{1}{2}+\int_{0}^{\frac{x}{\sqrt2}}\frac{1}{\sqrt{\pi}}e^{-t^2}dt$
co je presne to co chces.

PS: to rozlisenie z fotaku je aj tak naprd, takze tu fotku mozes otvorit v nejakom programceku a zlepsit kompresiu vysledneho .jpg

Offline

 

#15 17. 11. 2015 22:33

jelena
Jelena
Místo: Opava
Příspěvky: 30020
Škola: MITHT (abs. 1986)
Pozice: plním požadavky ostatních
Reputace:   100 
 

Re: Error Function

Zdravím,

byla jsem v PM vyzvána k doplnění k tématu a původně jsem i měla v plánu doplňovat, ale k mému potěšení v tématu již doplnil kolega ↑ Brano: (ovšem autor tématu ještě jednou prosí o upřesnění úprav). Já bych na úvod opět zopakovala, co jsme již řekli, že samotna funkce (erf) se programovat nebude, programuje se její přibližný výpočet.
Voleb přibližného výpočtu je dostatek, jelikož funkce je hodně populární a hodně užitečná. Ale stejně dobře by posloužilo, pokud program umožňuje mít uloženou tabulku již vypočtených číselných hodnot CDF a z této tabulky jen hodnotu vybrat.
Nejsem si jistá, zda pro programování je nutné rozumět celé podstatě pojmu. Osobně bych se spokojila jen s aplikaci vzorce nebo algoritmu ze seriózního zdroje (což AaS jsou). V tomto materiálu se mi zdá celkem jednoduchou a zábavnou formou je látka vyložena.
Kolega se ještě dotazuje na "přímo" aproximaci $\Phi (x) $- v odkazu na wikipedii od autorů Zelen a Sewero (opět to posílá na AaS, což už jsme také diskutovali). Je to stejný přístup - jelikož musíme použit přibližný výpočet pro $\mathrm{erf}(x)$, tak budeme používat přibližný výpočet pro $\Phi(x)=f(\mathrm{erf}(x))$. Nejspíš je pohodlnější do programu zapracovat rovnou aproximaci $\Phi$, tak to opět lze provést dle odkazovaného algoritmu. Pořád zůstává možnost překontrolovat vlastní výpočet s použitím funkce NormDistr v EXCEL (přes výhrady bylo ukázáno, že výsledek je srovnatelný), nebo ve WA Odkaz (pod příslušnou funkci vybrat plaitext input a doplnit své hodnoty.

Nechám to tady v tématu a ještě jednou - osobně bych se tomu do hloubky nevěnovala, pokud by mi řekli, že něco mám zapracovat a našla bych algoritmus v seriózním zdroji (nebo bych uměla si provést ověření, že v pořádku). Zdravím a přeji zdary :-)

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson