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
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
↑ 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
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
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
Zdravím,
pokud chceš naprogramovat funkci Standard Normal Distribution a nechceš použít dostupné prostředky (Excel atd), je vzorec zde (2),
(Opravený vzorec)
Zbývá ještě naprogramovat vzorec pro funkci erf() který najdeš zde (1).
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.
Offline
↑ 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 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
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 ? :/
Offline
↑ 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) a místo potřebujeme dosadit
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
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:
??
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
Offline
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
á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
ta druha otazka je lahka
je deinicia funkcie
a ked mas (pozor na duplicitne pouzivanie symbolov)
tu substituuj a dostanes
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
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 - 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 , tak budeme používat přibližný výpočet pro . Nejspíš je pohodlnější do programu zapracovat rovnou aproximaci , 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