eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programmingPocedura całkowaniaRe: Pocedura całkowania
  • Data: 2009-07-06 20:01:34
    Temat: Re: Pocedura całkowania
    Od: "slawek" <s...@h...pl> szukaj wiadomości tego autora
    [ pokaż wszystkie nagłówki ]



    Użytkownik "Mariusz Marszałkowski" <b...@g...pl> napisał w
    wiadomości grup dyskusyjnych:h2t38s$5mu$...@i...gazeta.pl...
    > Jeśli funkcja dana jest tablicą to ku ścisłości nie da się policzyć jej
    > całki :) Pomijając ten mankament, lepsze wyniki uzyska się wtedy gdy
    > się zastosuje lepszą aproksymację przebiegu pomiędzy znanymi wartościami.
    > A nie znając oryginalnej funkcji, nie wiadomo jak ją lepiej aproksymować
    > :)

    Po prostu wierzymy iż pewna funkcja czasu u(t), która - jeżeli pominiemy
    problemy czysto filozoficzne - opisuje ewolucję pewnego układu. Istnieje też
    model matematyczny, który określa zależności jakie powinna spełniać pewna
    funkcja psi(t), która - biorąc pod uwagę nasze ograniczenia - jest w
    zasadzie równa u(t), a w każdym razie - niezłym jej przybliżeniem. Funkcja
    psi jest ciągła (w danym przypadku), klasy C^n, może spełniać jeszcze
    rozmaite warunki (np. na wartość asymptotyczną itd. itp.)

    Teraz chcemy zbudować model numeryczny. Funkcja psi była i ciągła i miała
    jako dziedzinę R. A komputer liczy na podzbiorze (o skończonej mocy) liczb
    wymiernych. Nawet zapominając o tym że R i liczby Real to trochę dwie różne
    rzeczy - i tak będziemy mieli szeregi skończone zamiast funkcji (rozumianych
    jako odwzorowanie). Mamy teraz jakieś ciągi x[1], x[2], ..., x[n] oraz
    y[1],y[2],...,y[n] i uważamy że one są takie że norma[ y[k] - psi(x[k])]
    jest ogólnie mówiąc mała. Ale że nie mamy pojęcia jakie jest psi, to
    wymyślamy sobie jakąś funkcję f, taką że norma[y[k] - f(x[k])] jest mała. I
    pewnie wtedy funkcja f nienajgorzej aproksymuje funkcje psi, która z kolei
    ma coś wspólnego z u(t), czyli f jakoś tak opisuje u(t). A całka z f
    jakośtam ma się do całki z u.

    Jeżeli całkujemy numerycznie po dyskretnych punktach - to aby to było
    możliwe - konstruujemy sobie jakąś funkcję f. I jeżeli wzór jest wzorem
    trapezów - to f jest łamaną, czyli w niektórych miejscach nie ma pochodnej.
    Ale z jakiś powodów - np. wiemy że psi spełnia pewne rr czy jeszcze z innych
    przyczyn - wiemy że f powinno być np. klasy C^n lub nawet C^nieskończoność.
    I wtedy chyba lepiej aproksymować funkcjami sklejanymi wyższego nieco
    stopnia. To zapewni że tam gdzie trzeba zrobić coś z obliczonymi punktami
    funkcji f - da się zrobić (np. gdy potrzebna będzie 2-ga pochodna to można
    ją policzyć będzie). Całe te całkowanie numeryczne to de facto całkowanie
    funkcji aproksymującej.

    Więc po prostu są dwie sprawy:

    - da się czasem wiedzieć coś więcej o przebiegu funkcji - i najczęściej nie
    jest to coś, co skłania do wzoru trapezów;
    - aproksymacja łamaną nie jest w żadnym razie standardową, bo łamana nie
    jest niczym lepsza niż np. sinusoida.

    > Podstawowa metoda to zwiększanie "n" i użycie trapezów, niestety wraz
    > ze wzrostem "n" wydłuża się czas - ale to wszystko z pewnością już wiesz
    > :)

    Niezupełnie. Aby zwiększyć n, trzeba popracować - koszt O(n^3) operacji się
    mści. Ba, samo całkowanie nie jest sztuką dla sztuki - lecz właśnie jest
    potrzebne do wyznaczania właśnie tych y[k] dla k=1,2,...,n Okazało się, że
    przejście od trapezów do kubicznych splineów dało możliwość zaoszczędzenia
    10 razy na n. Czyli 1000 krotnie szybciej jest. Ale nadal spline'y (jako
    aproksymacja i sumowanie całki obliczonej analitycznie pod splinem o danych
    współczynnikach) to chyba nie jest to co lubię najbardziej - choć sam
    algorytm jest kompaktowy - jakieś 30 linijek, może 50. Ale właśnie szukam
    czegoś lepszego - może mieć i 1000 linijek lub sam-nie-wiem-co.

    > Nie wspominasz nic o metodzie montecarlo, ale jej dokładność także
    > będzie zależała od dokładności aproksymacji wewnątrz przedziałów :)

    Monte Carlo do tego się nie nadaje. Dane są "już" w postaci tablicy. Proste
    sumowanie jej elementów będzie dokładniejsze i szybsze. W zasadzie i tak
    takie sumowanie to metoda trapezów. W MC są narzuty na generowanie liczb
    losowych itd. itp. - to się opłaca w niektórych przypadkach - ale chyba
    właśnie nie przy takim jednowymiarowym całkowaniu.

    > Nie masz takiej możliwości aby jako parametr funkcji całkującej przekazać
    > funkcję całkowaną zamiast tablicy jej wartości?

    Nie, tzn. np. wyznaczenie jakiegokolwiek y=f( ( x[k]+x[k+1] ) / 2 )
    wymagałoby wyliczenia WSZYSTKICH "wartości pomiędzy", czyli (x[m]+x[m+1])/2
    , dla m < k . To delikatnie mówiąc nie jest zbyt komfortowe - bo jak tu np.
    marzyć o zmiennym kroku itd. itp.?!

    slawek


Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: