Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Vlastní implementace funkce arcsin(x)

Všechny Vás tu zdravím a zároveň úzkostlivě žádám nějakého dobrého programátora a nespíš i matematika, který by mi byl schopen pomoci.
Mám naprogramovat v jazyku C vlastní funkci arcus sinus, podle Taylorovy řady, což mám, jenže, v případě konvergence Taylorovy řady pro arcsin je u mezních hodnot |x|≈1 velmi pomalá. Např. pro výpočet arcsin(1) trvá 10 - 15 minut. Vím že se dá nějak udělat, že funkci rozvinu u nějakého čísla, které dobře konverguje, např. 0.5, jenže uživatel zadá např. arcsin(0.9) a já nevím, jak z čísla dostat výsledek 1.11976951 s tím, že provedu konvergenci ve vhodnějším intervalu.
Např. momentálně mé výpočty jsou takovéto:
asin(0.1) = 0.10016742116 6 iterací
asin(0.5) = 0.52359877560 17 iterací
asin(0.9) = 1.1197695150 94 iterací
asin(0.9999) = 1.5566540689 50590 iterací

no a já potřebuji např. výsledek i pro asin(0.9999999999999999), co že několik miliónů iterací a trvá to strašně dlouho.
Prý jde se nějak posunout do rozsahu, kde funkce konverguje rychleji, jenže nevím jak.
Může nějaká moc hodná duše poradit.
Předem díky a kdyžtak se ptejte na doplňující informace.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Mohl by být užitečný tip (hned bod 1) odsud : http://mathoverflow.net/questions/104321/numerical -c…
hynajs 26.11.2013 09:32
hynajs
rekurzivnim v tomto pripade urcite ne (nekontrolovatelne riziko stack overflow). Asi si chcel napisa…
MM.. 26.11.2013 11:02
MM..
V tomto smyslu: pokud se už spočetlo 1.3.5/2.4.6 a máme spočíst 1.3.5.7/2.4.6.8, není nutné násobit…
hynajs 26.11.2013 11:22
hynajs
A pocitanie stylom (povodny)*(7/8) neni z haldiska presnosti to same jak pocitanie stylom (povodnyvr… nový
MM.. 26.11.2013 11:37
MM..
To si musi skusit. Ano. Reprezentace funkce Taylorovým polynomem patří určitě k lehčím partiím ve v… poslední
hynajs 26.11.2013 12:02
hynajs
a samozrejme x na n-tu sa nerata dementne funkciou pow, ale ze si na zaciatku nastavim x_na_ntu = 1;… nový
MM.. 26.11.2013 11:46
MM..

Mohl by být užitečný tip (hned bod 1) odsud :

http://mathoverflow.net/questions/104321/numerical -computation-of-arcsin-and-arctan-for-real-numbers

Ale nezkoušel jsem, takže z fleku nevím, zda není lepší rada výše (Manyk).

Co se týče Taylorovy řady arcsin , zkus se zamyslet nad rekurzívním naprogramováním podílů 1.3.5/2.4.6 atd. - to by mohlo výpočet zefektivnit.

A pocitanie stylom (povodny)*(7/8) neni z haldiska presnosti to same jak pocitanie stylom (povodnyvrchny*7)/(povodnyspodny*8), to druhe by mohlo byt presnejsie na zaciatku, ale nepresnejsie po vela iteraciach, ale neviem teraz zhlavy to by sa muselo poriadne matematicky presetrit ze pri ktorom postupe vznika jaka nepresnost u takehoto nasobenia a delenia datoveho typu double.

P.S> to moze byt konieckoncov aj jeho problem, ze mu tam po milion iteraciach vznikaju tak obrovske cisla ze ten faktorial ak je v premennej double ma nenormalnu nepresnost. Mozno by bolo dokonca aj lepsie pocitat stylom (povodny)*(7/8) aby tam nevznikali sialene velke cisla = velka nepresnost datoveho typu. To si musi skusit.

To si musi skusit.

Ano.
Reprezentace funkce Taylorovým polynomem patří určitě k lehčím partiím ve vš matematice.
I já jsem žil léta v domnění, že v případě potřeby není problém spočítat hodnotu se žádanou přesností.
To jsem si tedy myslel pěknou blbost.
Před časem jsem si umanul (popíchnut kolegou), že napíšu program, který spočte cifru pí třeba na 100000 místě.
Což o to, numerické metody existují a lze je snadno vyhledat. Taky příslušné cykly není problém v základu napsat.
Ale pak přijde vystřízlivění, když se řeší problémy, o nichž píšeš Ty i tazatel.

Cifru pí na 100000 místě sice spočítat umím, ale musel bych PC nechat zapnuté asi 14 dní nebo měsíců (teď nevím přesně). Ještě jsem tento problém nedořešil.

a samozrejme x na n-tu sa nerata dementne funkciou pow, ale ze si na zaciatku nastavim x_na_ntu = 1; a potom na zaciatku kazdej iteracie urobim x_na_ntu *= x;
Pri velkom pocte iteracii je to trilionkrat efektivnejsie. Ja som myslel ze to ich mali naucit v skole (ze zlozitost O(n^neco) je fuj a O(n) je mnam :)

Zpět do poradny Odpovědět na původní otázku Nahoru