eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.comp.programming › Simpson vs. Niski Cotes
Ilość wypowiedzi w tym wątku: 185

  • 71. Data: 2012-11-13 23:33:11
    Temat: Re: Simpson vs. Niski Cotes
    Od: kenobi <p...@g...com>

    W dniu poniedziałek, 12 listopada 2012 10:47:02 UTC+1 użytkownik AK napisał:
    > Użytkownik "slawek" <s...@h...pl> napisał:
    >
    >
    > Poza tym to co zamiesciles to nie zadne C
    >
    > Top jakis potworek programisty niedouka.
    >

    ciekawe moze by bylo uslyszec co z tym kodem
    jest nie tak, ale szczerze mowiac nie
    podejrzewam że tak sie wyraże 'możliwosci
    sensownej odpowiedzi w tym temacie'

    (Imo jest to kawałek zupełnie normalnego/dobrego kodu w c


  • 72. Data: 2012-11-13 23:54:13
    Temat: Re: Simpson vs. Niski Cotes
    Od: Baranosiu <r...@w...pl>

    Dnia 13.11.2012 kenobi <p...@g...com> napisał/a:
    > nie moja dzialka :O, mam co innego do roboty :o
    > (ostatnio troche czytam o shaderach - i moge powiedziec ze troche
    > beznadziejne oneż są)

    To sprawdź różne języki shaderów, nie samym DirectX (HLSL) żyje
    człowiek :D Mi bardziej podchodzi GLSL (ten z OpenGL) no i przy okazji
    GLSL jest bardziej "przenośny" (Windows, Linux, czy nawet tablety z
    nowszymi ARM-ami i Androidem) a HLSL jakby nie patrzeć przywiązuje do
    jednego systemu operacyjnego (i pewnie są też zwolennicy HLSL - ok, ja
    po prostu subiektywnie wybrałem GLSL na zasadzie "coś wybrać trzeba,
    bo wszystkiego dobrze poznać się nie da").

    A co do numeryki (w tym całkowania), to można mieć różne podejścia,
    albo zagłębić się w matematyczną stronę i mieć pełne zrozumienie
    "dlaczego", albo zaufać fachowym opracowaniom i tylko wiedzieć "jak"
    dany algorytm działa (bez wnikania w teorię dlaczego akurat tak a nie
    inaczej) - przykładowo aby z powodzeniem stosować tw. Pitagorasa wcale
    nie trzeba znać dowodu tego twierdzenia (nie trzeba wiedzieć dlaczego
    jest prawdziwe), wystarczy znać założenia (kiedy można je stosować) i
    tezę (wzorek).


  • 73. Data: 2012-11-14 00:06:51
    Temat: Re: Simpson vs. Niski Cotes
    Od: bartekltg <b...@g...com>

    W dniu 2012-11-13 23:33, kenobi pisze:
    > W dniu poniedziałek, 12 listopada 2012 10:47:02 UTC+1 użytkownik AK napisał:
    >> Użytkownik "slawek" <s...@h...pl> napisał:
    >>
    >>
    >> Poza tym to co zamiesciles to nie zadne C
    >>
    >> Top jakis potworek programisty niedouka.
    >>
    >
    > ciekawe moze by bylo uslyszec co z tym kodem
    > jest nie tak, ale szczerze mowiac nie
    > podejrzewam że tak sie wyraże 'możliwosci
    > sensownej odpowiedzi w tym temacie'
    >
    > (Imo jest to kawałek zupełnie normalnego/dobrego kodu w c

    "Normalny", bo się kompiluje. Ale nie jest poprawny.

    Błąd jest tutaj:

    > #define NPTS 10000 /* NPTS must be even! */

    > double x[NPTS+1];
    > double y[NPTS+1];

    Tak, liczba przedziałów ma być parzysta.
    Tak, to oznacza, że liczba punktów powinna
    być o jeden większa. Tyle, że sławek następnie
    konsekwentnie używa wyłącznie zmiennych x[1]..x[NPTS]
    W żadnej jogo funkcji nie użył x[0].

    Pomylił się czy przepisał bezrefleksyjnie z języka o tablicach
    indeksowanych od 1, nieistotne. Skutek jest taki:

    Mamy 999 przedziałów!

    x[1] = a //OK
    x[n] = b //ok

    Funkcje całkujące są niby poprawne, ale przez nieparzystą
    liczbę przedziałów dwie ostatni wagi są zawyżone!
    Funkcja jest tam lekko ujemna, stąd przekłamanie wyniku.

    Chętni mogą łatwo oszacować o ile:)
    sin(5)exp(-5)=-0.00646


    Drobna poprawka i wszystko bangla:

    #define NPTS 10001 /* NPTS must be even! */

    double x[NPTS+1];
    double y[NPTS+1];

    i mamy

    exact 0.5022749400837604
    tapez 0.5022749194248539
    simpson 0.5022749400837597

    exact od simpsona różni się o 7 na ostatniej
    wypluwanej liczbie:) 7*10^-16 !

    Kod, kompilator i wynik:
    http://codepad.org/ohuGkmiC


    OT, literówka, ale wykłócać się na grupie, że oto
    obalił to i owo to mógł.

    pzdr
    bartekltg




  • 74. Data: 2012-11-14 00:17:00
    Temat: Re: Simpson vs. Niski Cotes
    Od: "AK" <n...@n...com>

    Użytkownik "bartekltg" <b...@g...com> napisał:

    > Tyle, że sławek następnie konsekwentnie używa wyłącznie
    > zmiennych x[1]..x[NPTS]
    > W żadnej jogo funkcji nie użył x[0].

    :) Kpilem sobie jawnie z jego fortranowych nalecialosci (indeksy od 1) i też się "nie
    kapnął"
    gdzie popełnił gruby błąd.

    PS: Dobrze, żę problem nie jest dwywymiarowy bo by "poleciał" po kolumnach :).
    W klasycznym Fortranie (F4, F77) macierze ułożone są w pamięci kolumnami a nie
    tak
    jak w Algolu czy C/C++/Javie/C#/VB wierszami

    AK


  • 75. Data: 2012-11-14 00:43:31
    Temat: Re: Simpson vs. Niski Cotes
    Od: bartekltg <b...@g...com>

    W dniu 2012-11-14 00:17, AK pisze:
    > Użytkownik "bartekltg" <b...@g...com> napisał:
    >
    >> Tyle, że sławek następnie konsekwentnie używa wyłącznie
    >> zmiennych x[1]..x[NPTS]
    >> W żadnej jogo funkcji nie użył x[0].
    >
    > :) Kpilem sobie jawnie z jego fortranowych nalecialosci (indeksy od 1) i
    > też się "nie kapnął"
    > gdzie popełnił gruby błąd.

    Zastanawiam się, czy to nie jest jeden wielki trolling;)


    > PS: Dobrze, żę problem nie jest dwywymiarowy bo by "poleciał" po
    > kolumnach :).
    > W klasycznym Fortranie (F4, F77) macierze ułożone są w pamięci
    > kolumnami a nie tak
    > jak w Algolu czy C/C++/Javie/C#/VB wierszami

    Ja tam zawsze sprawdzam;)

    >> reshape(1:9,3,3)
    ans =
    1 4 7
    2 5 8
    3 6 9

    O, ukryty Fortran!
    :)


    Jeśli dobrze pamiętam, BLAS może przechowywać i tak i tak,
    w zależności od tego odpala odpowiedni algorytm.
    W sumie to nie jest żadna łaska, skoro i tak funkcje przyjmują
    parametr mówiący, czy nie traktować macierzy jak transponowanej.


    pzdr
    bartekltg


  • 76. Data: 2012-11-14 07:53:41
    Temat: Re: Simpson vs. Niski Cotes
    Od: kenobi <p...@g...com>

    W dniu środa, 14 listopada 2012 00:06:53 UTC+1 użytkownik bartekltg napisał:
    > W dniu 2012-11-13 23:33, kenobi pisze:
    >
    > > W dniu poniedziałek, 12 listopada 2012 10:47:02 UTC+1 użytkownik AK napisał:
    >
    > >> Użytkownik "slawek" <s...@h...pl> napisał:
    >
    > >>
    >
    > >>
    >
    > >> Poza tym to co zamiesciles to nie zadne C
    >
    > >>
    >
    > >> Top jakis potworek programisty niedouka.
    >
    > >>
    >
    > >
    >
    > > ciekawe moze by bylo uslyszec co z tym kodem
    >
    > > jest nie tak, ale szczerze mowiac nie
    >
    > > podejrzewam że tak sie wyraże 'możliwosci
    >
    > > sensownej odpowiedzi w tym temacie'
    >
    > >
    >
    > > (Imo jest to kawałek zupełnie normalnego/dobrego kodu w c
    >
    >
    >
    > "Normalny", bo się kompiluje. Ale nie jest poprawny.
    >
    >
    >
    > Błąd jest tutaj:
    >
    >
    >
    > > #define NPTS 10000 /* NPTS must be even! */
    >
    >
    >
    > > double x[NPTS+1];
    >
    > > double y[NPTS+1];
    >
    >
    >
    > Tak, liczba przedziałów ma być parzysta.
    >
    > Tak, to oznacza, że liczba punktów powinna
    >
    > być o jeden większa. Tyle, że sławek następnie
    >
    > konsekwentnie używa wyłącznie zmiennych x[1]..x[NPTS]
    >
    > W żadnej jogo funkcji nie użył x[0].
    >
    >
    >
    > Pomylił się czy przepisał bezrefleksyjnie z języka o tablicach
    >
    > indeksowanych od 1, nieistotne. Skutek jest taki:
    >
    >
    >
    > Mamy 999 przedziałów!
    >
    >
    >
    > x[1] = a //OK
    >
    > x[n] = b //ok
    >
    >
    >
    > Funkcje całkujące są niby poprawne, ale przez nieparzystą
    >
    > liczbę przedziałów dwie ostatni wagi są zawyżone!
    >
    > Funkcja jest tam lekko ujemna, stąd przekłamanie wyniku.
    >
    >
    >
    > Chętni mogą łatwo oszacować o ile:)
    >
    > sin(5)exp(-5)=-0.00646
    >
    >
    >
    >
    >
    > Drobna poprawka i wszystko bangla:
    >
    >
    >
    > #define NPTS 10001 /* NPTS must be even! */
    >
    >
    >
    > double x[NPTS+1];
    >
    > double y[NPTS+1];
    >
    >
    >
    > i mamy
    >
    >
    >
    > exact 0.5022749400837604
    >
    > tapez 0.5022749194248539
    >
    > simpson 0.5022749400837597
    >
    >
    >
    > exact od simpsona różni się o 7 na ostatniej
    >
    > wypluwanej liczbie:) 7*10^-16 !
    >
    >
    >
    > Kod, kompilator i wynik:
    >
    > http://codepad.org/ohuGkmiC
    >
    >
    >
    >
    >
    > OT, literówka, ale wykłócać się na grupie, że oto
    >
    > obalił to i owo to mógł.
    >

    bład błedem ale mi chodziło o to ze jest to
    dobry (nawet fajnie zwarty) kod w c, (ja bym
    tylko zmienil definy na const int, [jako ze preprocesor tak naprawde w pewnym sensie
    nie jest czescia c i byl raczej tak traktowany nawet przez ritchiego jedynie jako
    zewnetrzne narzedzie, (co mozna wyczytac w
    historycznej nocie ritchiego*]

    (przy tym jak ktos zrobi merytoryczny bład to
    nie dureń nie jełopi z tego powodu)

    fir (finite impulse response)

    * "Many other changes occurred around 1972-3, but the most important was the
    introduction of the preprocessor, partly at the urging of Alan Snyder [Snyder 74],
    but also in recognition of the utility of the the file-inclusion mechanisms available
    in BCPL and PL/I. Its original version was exceedingly simple, and provided only
    included files and simple string replacements: #include and #define of parameterless
    macros. Soon thereafter, it was extended, mostly by Mike Lesk and then by John
    Reiser, to incorporate macros with arguments and conditional compilation. The
    preprocessor was originally considered an optional adjunct to the language itself.
    Indeed, for some years, it was not even invoked unless the source program contained a
    special signal at its beginning. This attitude persisted, and explains both the
    incomplete integration of the syntax of the preprocessor with the rest of the
    language and the imprecision of its description in early reference manuals."


  • 77. Data: 2012-11-14 08:30:50
    Temat: Re: Simpson vs. Niski Cotes
    Od: kenobi <p...@g...com>

    pozatym ew troche cos dziwnie z tymi
    nawiasami, chyba dodalbym tu pare spacji *
    i byloby czytelniej, (ale pozatym mz jest to
    dobry kod)

    (sam jak patrze na swoje kody to czasem
    rozstrzelam wyrazenia z operatorami a czasem
    nie, zalezy od sytuacji, jak niektore zbitki
    rażą to chyba wtedy, (choc ja sam pewnie nie pisze moze bynajmniej wzorcowego kodu,
    ale chyba w miare ok )


  • 78. Data: 2012-11-14 09:01:52
    Temat: Re: Simpson vs. Niski Cotes
    Od: kenobi <p...@g...com>

    W dniu wtorek, 13 listopada 2012 23:54:20 UTC+1 użytkownik Baranosiu napisał:
    > Dnia 13.11.2012 kenobi <p...@g...com> napisał/a:
    >
    > > nie moja dzialka :O, mam co innego do roboty :o
    >
    > > (ostatnio troche czytam o shaderach - i moge powiedziec ze troche
    >
    > > beznadziejne oneż są)
    >
    >
    >
    > To sprawdź różne języki shaderów, nie samym DirectX (HLSL) żyje
    >
    > człowiek :D Mi bardziej podchodzi GLSL (ten z OpenGL) no i przy okazji
    >
    > GLSL jest bardziej "przenośny" (Windows, Linux, czy nawet tablety z
    >
    > nowszymi ARM-ami i Androidem) a HLSL jakby nie patrzeć przywiązuje do
    >
    > jednego systemu operacyjnego (i pewnie są też zwolennicy HLSL - ok, ja
    >
    > po prostu subiektywnie wybrałem GLSL na zasadzie "coś wybrać trzeba,
    >
    > bo wszystkiego dobrze poznać się nie da").
    >

    no wlasnie przegladam tutoriale do glsl'a
    i nizbyt mi sie to podoba, do tego cos
    zaslyszalem ze sa spore niekompatybilnosci
    miedzy roznymi kartami, do tego pewne
    'sciezki wykonania' sa podobno
    niepodopracowywane na niektorych kartach
    (i dzialaja ale wolno) tak ze odnosze
    nie za dobre wrazenie o tym wszystkim :/


  • 79. Data: 2012-11-14 09:06:26
    Temat: Re: Simpson vs. Niski Cotes [Off: no coz, bede sukcesywnie i cierpliwie odpowiadal na kazdy post tego dresa fira, natomiast innych prosze o nieodzywanie sie do tego zlosliwego indywiduum dopoki nie zacznie nas zwyczajnie szanowac]
    Od: "AK" <n...@n...com>

    Użytkownik "kenobi" <p...@g...com> napisał w wiadomości
    news:e438ba6a-15c4-4f60-bdb9-f6a8c1beff68@googlegrou
    ps.com...
    W dniu środa, 14 listopada 2012 00:06:53 UTC+1 użytkownik bartekltg napisał:
    > W dniu 2012-11-13 23:33, kenobi pisze:

    "
    > fundamentalne problemy ze soba to ma grupowa dresiarnia, ja sie po prostu k-jowo
    czuje po
    > boreliozie, nie sposob o tym nie pisac bo to ciagly i silny ból - pisanie o tym to
    jedna

    I to ci przeszkadza wykazac _minimum_ szacunku dla grupy/innych i wycinac cytaty ?
    Byles o to proszony dziesiatki juz chyba razy.
    Jestes czlowieku zwyczajnym rozkapryszonym, zlosliwym w stosunku do innych dupkiem,
    a twoja choroba (w ktora wierze) ma sie nijak do tego.
    Jestem przekonany ze bez niej zachowywal bys sie tak samo, bo to kwestia charakteru
    i elementarnej przyzwoitosci.

    AK
    "


  • 80. Data: 2012-11-14 12:02:52
    Temat: Re: Simpson vs. Niski Cotes
    Od: "slawek" <s...@h...pl>


    Użytkownik "AK" <n...@n...com> napisał w wiadomości grup
    dyskusyjnych:k7ukdi$1nb$...@n...task.gda.pl...
    > :) Kpilem sobie jawnie z jego fortranowych nalecialosci (indeksy od 1) i
    > też się "nie kapnął"
    > gdzie popełnił gruby błąd.

    W Matlabie indeksy idą od?

    To jeszcze doucz się, że w Fortanie /można/ mieć indeksy od 0 - tak,
    dzisiejszy Fortran jest jednak /trochę/ inny niż kiedyś.

    Błąd naprawdę był - tzn. liczba punktów była parzysta, a miała być parzysta
    liczba przedziałów. To zresztą jest podstawowy problem z "Simpsonem" - nie
    da się go ładnie zastosować do dowolnej liczby punktów/przedziałów. Co
    ciekawe, po poprawieniu wynik zgadza się z analitycznym co do... 1.11E-14
    procenta, czyli... znowu mamy "zły epsilon". lol

    Szkoda, trzeba będzie poszukać innej funkcji - może x**13 w przedziale
    [1001.0, 1001.69], może nawet takiej, że jest równa zero wszędzie poza
    punktami w których x*k+q jest całkowite, ale tylko wtedy gdy A < x < B, choć
    całkowana w [a,b] takim że a < A oraz B < b. Ta pierwsza ma czwartą pochodną
    13*12*11*10*x**9, co dla x > 1000.0 daje wartości większe niż 1.0E31 i
    powinno "rozwalić Simpsona". (Ale trzeba będzie uważać, aby nie zaszkodzić
    trapezom.) Ta druga jest czuła na przesunięcie "o jeden piksel" i będzie
    dawać zupełnie inne rezultaty dla różnych q - choć powinna dawać identyczne
    jeżeli suport nie jest poza [a,b].

    Cały problem jaki rzeczywiście jest, to brak dobrej metody "obliczania RMS"
    która mogłaby operować na zmieniającej się ilości danych. Np. z przetwornika
    otrzymuje się co 1/1000 sekundy nową parę (x,y) - a to ma się odzwierciedlać
    w dokładniejszym RMS. Jeżeli używać innych metod niż całkowanie trapezami -
    to każdy kolejny punkt zmienia sposób w jaki poprzednio już istniejące
    punkty zostaną użyte w obliczeniach. Nie da się liczyć "nowego RMS" jako
    "stare RMS" + poprawka, gdyż przeskakują wagi wzdłuż osi odciętych. Podobnie
    jest niestety i ze spline'ami - zmiana w jednym miejscu pociąga za sobą
    nielokalnie cały spline.

    Do tego jeszcze jeden problem: jeżeli są to punkty x[i], y[i], mające być
    danymi określonymi z niepewnościami dx[i], dy[i], gdzie i = 1,..., n, to z
    reguły Simpsona wynika, iż gdy uda się nam dokładniej mierzyć dla parzystych
    to będzie z tego znacznie lepsza poprawa dokładności całki niż w przypadku
    dokładniejszych nieparzystych. Ok, dokładniejszy rachunek musiałby
    uwzględniać korelacje, ale jeżeli np. mierzymy szum - to korelacji może nie
    być.


strony : 1 ... 7 . [ 8 ] . 9 ... 19


Szukaj w grupach

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: