Sin - dyskretyzacja, z określeniem błedu

Własności funkcji trygonometrycznych i cyklometrycznych. Tożsamości. RÓWNANIA I NIERÓWNOŚCI.
oneiro
Użytkownik
Użytkownik
Posty: 15
Rejestracja: 14 mar 2010, o 14:32
Płeć: Mężczyzna
Lokalizacja: Polska

Sin - dyskretyzacja, z określeniem błedu

Post autor: oneiro »

Witam,

Tworzę pewien program, w którym potrzeba przebieg sinusoidy zdyskretyzować (tj. z ciągłego przebiegu sinusa, zrobić n-punktów, leżących na przebiegu sinusa).

Teoretycznie sprawa jest prosta, ale jest kolejny warunek - szybkość i dokładność dyskretyzacji (z naciskiem na dokładność). Dane punkty, zostaną węzłami w metodzie elementów skończonych MES/FSM, połączę elementami i wrzucę do odpowiedniego programu.

Całość ma działać na zasadzie optymalizacji (funkcja celu, parametry, zakresy zamiennych - mój program sprzężony z MES'em).

Wracając do problemu - potrzebuję tak określić punkty, aby było ich możliwie jak najmniej, a jednocześnie, alby otrzymać jak najmniejszy błąd. Z tym błędem wyobrażam sobie tak, że określam go na poziomie x % (np. 10% błędu względnego pola, moment bezwładności lub innego parametr geometrycznego).

Wiadomo, że w "środku" wykresu przebieg jest liniowy, dlatego (tak na oko to określiłem) dla dziedziny od \(\displaystyle{ - \pi /12}\) do \(\displaystyle{ \pi /12}\) zakładam liniowość - rysunek poniżej.

Kod: Zaznacz cały

http://wstaw.org/w/1jDO/



Może ktoś zetknął się z podobnym problemem i potrafiłby mi pomóc.
Adifek
Użytkownik
Użytkownik
Posty: 1567
Rejestracja: 15 gru 2008, o 16:38
Płeć: Mężczyzna
Lokalizacja: Ostrzeszów/Wrocław
Podziękował: 8 razy
Pomógł: 398 razy

Sin - dyskretyzacja, z określeniem błedu

Post autor: Adifek »

Nie łatwiej skorzystać z gotowych bibliotek i np. policzyć wartości sinusa na odpowiednio dobranych punktach?

Dla określenia błędu możesz użyć szacowania \(\displaystyle{ \left| \sin x - \sin y\right| \le \left| x-y\right|}\)-- 26 sierpnia 2012, 22:06 --Jeżeli chcesz zaś liczyć bez bibliotek, za pomocą rozwinięcia w szereg Taylora, to oszacowanie będzie zależeć od przedziału.

Będać powiedzmy na przedziale \(\displaystyle{ \left[a,b \right]}\) oznaczamy \(\displaystyle{ M=max(|a|,|b|)}\).

Wtedy błąd dla rozwinięcia pierwszych \(\displaystyle{ n}\) wyrazów będziemy szacować:

\(\displaystyle{ \left| \frac{\sin ^{(n+1)}(\theta x)}{(n+1)!}x^{n+1}\right| \le \frac{M^{n+1}}{(n+1)!}}\)
oneiro
Użytkownik
Użytkownik
Posty: 15
Rejestracja: 14 mar 2010, o 14:32
Płeć: Mężczyzna
Lokalizacja: Polska

Sin - dyskretyzacja, z określeniem błedu

Post autor: oneiro »

Jeśli możesz przybliżyć mi temat bibliotek, bo nie rozumiem.

Być może chodzi Ci o to, że chcę zbudować funkcję sin, bez korzystanie z gotowych bibliotek na sin (np. math.h w c/c++ sin(x) ). Nie, nie o to mi chodzi.

Mam np. taką sinusoidę (w zasadzie to cosinusoida, ale mniejsza o to):

Kod: Zaznacz cały

http://wstaw.org/w/1jF5/


Problem jest taki, że na razie podział jednego okresu na n-punktów jest równy. Chcę tak zrobić, aby:
- około extremów było gęściej
- na środku (odcinek liniowy) mniej punktów

W dodatku, aby błąd aproksymacji (dyskretyzacji) był minimalny (tj z założoną dokładnością). I problem sprowadza się do określania, gdzie i ile punktów powinno być, aby przy zadanym względem błędzie (błąd np. pola jednego okresu - sinusoida ma grubość, długość razy grubość da mi pole idealne, a z dyskretyzacji, wyjdzie mi pole +/- o np. 3% mniejsze, lub inny warunek na moment bezładności ).

Po prostu potrzebuję informacji - gdzie wstawiać punkty, aby było jak najlepiej odwzorowana sinusoida, przy jak najmniejszej ilości punktów, przy zadanej dokładności.
Adifek
Użytkownik
Użytkownik
Posty: 1567
Rejestracja: 15 gru 2008, o 16:38
Płeć: Mężczyzna
Lokalizacja: Ostrzeszów/Wrocław
Podziękował: 8 razy
Pomógł: 398 razy

Sin - dyskretyzacja, z określeniem błedu

Post autor: Adifek »

Twojego rysunku nijak nie rozumiem. Sądzę też, że niepotrzebnie utrudniasz sobie życie, bo da się to wykonać nawet przy jednostajnym podziale i nie zwiększać znacząco liczby punktów.
Problem jest taki, że na razie podział jednego okresu na n-punktów jest równy. Chcę tak zrobić, aby:
- około extremów było gęściej
- na środku (odcinek liniowy) mniej punktów
A to jest wręcz sprzeczne z tym, co chcesz osiągnąć. Najwięcej punktów powinno być tam, gdzie sinusoida najszybciej rośnie (maleje), podczas gdy w okolicach ekstremów robi to akurat najwolniej. Przykład:

\(\displaystyle{ \sin (0,05) -\sin (-0,05) \approx 0,1}\)
ale
\(\displaystyle{ \sin (1,57) - \sin (1,56) \approx 0,0006}\)

Ogólnie z twierdzenia Lagrange'a widać, że im większa pochodna, tym gęściej musiałbyś rozmieszczac punkty.
oneiro
Użytkownik
Użytkownik
Posty: 15
Rejestracja: 14 mar 2010, o 14:32
Płeć: Mężczyzna
Lokalizacja: Polska

Sin - dyskretyzacja, z określeniem błedu

Post autor: oneiro »

Tutaj akurat nie chodzi o szybkość rośnięcia (coś a'la pochodna), ale o, nazwałbym to, liniowością.

W środku funkcja sin jest w miarę liniowa, dopiero "zakrzywia się" bliżej extremów i chodzi mi o uchwycenie tych zmian.
Stworzę jeden okres sinusa np. 10 punktów, z czego większość punktów umieszczę bliżej extremów, aby przy jak najmniejszej liczbie punktów oddać krzywiznę. A krzywizna będę aproksymowana tak:
- 10 punktów, leżących na ciągłym (oryginalnym) przebiegu sinusa
- łącze je liniami (elementami w metodzie MES)

Liczba i umiejscawianie punktów decydują o "jakości" odzwierciedlenia sinusa. Dlatego zależy mi, aby punkty były bliżej ekstremów, a mniej w linowym odcinku sinusa.

Ale brakuje mi jakiegoś kryterium podziału (albo bardziej praktycznej realizacji)
ODPOWIEDZ