[Metody numeryczne] Obliczanie wartości funkcji elementarnyc

Szysiek
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 8 lut 2013, o 22:23
Płeć: Mężczyzna
Lokalizacja: Łódź

[Metody numeryczne] Obliczanie wartości funkcji elementarnyc

Post autor: Szysiek »

Witam, mam takie pytanie:

Jak oblicza się numerycznie wartości funkcji elementarnych np. \(\displaystyle{ \sin (1.3\pi)}\)

Z góry dziękuję za odpowiedź.
szw1710

[Metody numeryczne] Obliczanie wartości funkcji elementarnyc

Post autor: szw1710 »

Ze wzoru Maclaurina.
Szysiek
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 8 lut 2013, o 22:23
Płeć: Mężczyzna
Lokalizacja: Łódź

[Metody numeryczne] Obliczanie wartości funkcji elementarnyc

Post autor: Szysiek »

A mógłby ktoś rozpisać ten przykład z pierwszego postu? Najlepiej z jakimś komentarzem, bo jakoś nie mogę tego pojąć do końca. Byłbym wdzięczny.
miodzio1988

[Metody numeryczne] Obliczanie wartości funkcji elementarnyc

Post autor: miodzio1988 »

Nie. Jaki masz wzór podany przez kolege?
szw1710

[Metody numeryczne] Obliczanie wartości funkcji elementarnyc

Post autor: szw1710 »

Szysiek, a czy Ty masz to implementować, czy wystarczy Ci odpowiednia biblioteka?
Szysiek
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 8 lut 2013, o 22:23
Płeć: Mężczyzna
Lokalizacja: Łódź

[Metody numeryczne] Obliczanie wartości funkcji elementarnyc

Post autor: Szysiek »

To jest pytanie, które często lubi padać na zaliczeniu. Więc muszę wytłumaczyć jak się wylicza te wartości funkcji.
szw1710

[Metody numeryczne] Obliczanie wartości funkcji elementarnyc

Post autor: szw1710 »

Radzę więc poszukać w opisach oprogramowania, kalkulatorów itp. tego, wg jakiego algorytmu się to robi. Bo niekoniecznie wzór Maclaurina czy Taylora będzie najszybszy w rozwiązaniu praktycznym. Metody numeryczne to bardzo rozległa dziedzina wiedzy. A pewnie o taki przedmiot chodzi. Kto wie czy np. nie aproksymuje się funkcjami sklejanymi

Ja bym do tego tak podszedł: wiadomo, że aby wyznaczyć funkcje trygonometryczne dowolnego kąta, wystarczy je znać dla kątów ostrych. Więc badałbym jaka jest dokładność obliczeń np. sinusa wzorem Maclaurina w przedziale \(\displaystyle{ \left[0,\frac{\pi}{2}\right]}\). Wiadomo, że

\(\displaystyle{ \left|\sin x-\left(x-\frac{x^3}{3!}+\dots+(-1)^{n+1}\frac{x^{2n-1}}{(2n-1)!}\right)\right|\le\frac{|x|^{2n+1}}{(2n+1)!}}\)

To właśnie oszacowanie błędu we wzorze Maclaurina dla sinusa. No i wystarczy że podstawisz sobie \(\displaystyle{ x=\frac{\pi}{2}}\), a szybciutko zobaczysz, jak wysokiego \(\displaystyle{ n}\) potrzeba dla z góry zadanej dokładności. Powiedzmy \(\displaystyle{ 10}\)-miejscowej, czyli rzędu \(\displaystyle{ 10^{-11}}\) (wtedy \(\displaystyle{ 10}\) miejsc po przecinku jest pewnych).

Nawiasem mówiąc to wystarczy dla wszystkich funkcji trygonometrycznych - znając sinusa kąta ostrego, znasz od razu cosinusa, tangensa i cotangensa. Tylko jeszcze jest kwestia dzielenia, która produkować może duże błędy w zaokrągleniach.
ksisquare
Użytkownik
Użytkownik
Posty: 132
Rejestracja: 1 cze 2012, o 07:04
Płeć: Mężczyzna
Lokalizacja: Polska
Pomógł: 15 razy

[Metody numeryczne] Obliczanie wartości funkcji elementarnyc

Post autor: ksisquare »

Pade i CORDIC
Awatar użytkownika
mdd
Użytkownik
Użytkownik
Posty: 1897
Rejestracja: 14 kwie 2013, o 10:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 2 razy
Pomógł: 512 razy

Re: [Metody numeryczne] Obliczanie wartości funkcji elementarnyc

Post autor: mdd »

Materiały dla ciekawskich i poszukujących:

Kod: Zaznacz cały

http://www.andraka.com/files/crdcsrvy.pdf


CORDIC II: A New Improved CORDIC Algorithm:

Kod: Zaznacz cały

http://liu.diva-portal.org/smash/get/diva2:912029/FULLTEXT01.pdf
Awatar użytkownika
mdd
Użytkownik
Użytkownik
Posty: 1897
Rejestracja: 14 kwie 2013, o 10:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 2 razy
Pomógł: 512 razy

Re: [Metody numeryczne] Obliczanie wartości funkcji elementarnyc

Post autor: mdd »

Ciekawa prezentacja:

Kod: Zaznacz cały

https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwiugtLAyNztAhWEHXcKHevqBEEQFjAAegQIBRAC&url=https%3A%2F%2Fwww.mit.bme.hu%2Fsystem%2Ffiles%2Foktatas%2Ftargyak%2F8497%2FCORDIC_ppt.pdf&usg=AOvVaw3h1cCQwMxVkdiS8X0xxNt4
szw1710

Re: [Metody numeryczne] Obliczanie wartości funkcji elementarnyc

Post autor: szw1710 »

Zobaczę. :) Archeologia górą. Brawo za znalezienie wykopaliska. :)
Awatar użytkownika
mdd
Użytkownik
Użytkownik
Posty: 1897
Rejestracja: 14 kwie 2013, o 10:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 2 razy
Pomógł: 512 razy

Re: [Metody numeryczne] Obliczanie wartości funkcji elementarnyc

Post autor: mdd »

Świetny materiał:

Kod: Zaznacz cały

https://repositories.lib.utexas.edu/bitstream/handle/2152/1472/arbaughj20424.pdf


Wszystkiego dobrego w Nowym Roku!
Awatar użytkownika
mdd
Użytkownik
Użytkownik
Posty: 1897
Rejestracja: 14 kwie 2013, o 10:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 2 razy
Pomógł: 512 razy

Re: [Metody numeryczne] Obliczanie wartości funkcji elementarnyc

Post autor: mdd »

Uogólniony CORDIC w pigułce:

Kod: Zaznacz cały

https://en.wikibooks.org/wiki/Digital_Circuits/CORDIC


"Scale free CORDIC":

Kod: Zaznacz cały

https://hal.archives-ouvertes.fr/hal-01327460/document
Awatar użytkownika
mdd
Użytkownik
Użytkownik
Posty: 1897
Rejestracja: 14 kwie 2013, o 10:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 2 razy
Pomógł: 512 razy

Re: [Metody numeryczne] Obliczanie wartości funkcji elementarnyc

Post autor: mdd »

Kod: Zaznacz cały

https://en.wikipedia.org/wiki/Logarithm
Feynman's algorithm

While at Los Alamos National Laboratory working on the Manhattan Project, Richard Feynman developed a bit-processing algorithm that is similar to long division and was later used in the Connection Machine. The algorithm uses the fact that every real number \(\displaystyle{ 1 < x < 2}\) is representable as a product of distinct factors of the form \(\displaystyle{ 1 + 2^{−k}}\). The algorithm sequentially builds that product \(\displaystyle{ P}\): if \(\displaystyle{ P \cdot (1 + 2^{−k}) < x}\), then it changes \(\displaystyle{ P}\) to \(\displaystyle{ P \cdot (1 + 2^{−k})}\). It then increases \(\displaystyle{ k}\) by one regardless. The algorithm stops when \(\displaystyle{ k}\) is large enough to give the desired accuracy. Because \(\displaystyle{ \log(x)}\) is the sum of the terms of the form \(\displaystyle{ \log(1 + 2^{−k})}\) corresponding to those \(\displaystyle{ k}\) for which the factor \(\displaystyle{ 1 + 2^{−k}}\) was included in the product \(\displaystyle{ P}\), \(\displaystyle{ \log(x)}\) may be computed by simple addition, using a table of \(\displaystyle{ \log(1 + 2^{−k})}\) for all \(\displaystyle{ k}\). Any base may be used for the logarithm table.

Kod: Zaznacz cały

https://math.stackexchange.com/questions/879241/feynmans-algorithm-for-computing-a-logarithm-of-a-number-in-1-2
ODPOWIEDZ