Wątek przeniesiony 2018-05-27 16:26 z Off-Topic przez furious programming.

Zadanie z metod numerycznych - potrzebna pomoc

0

Witam, borykam się aktualnie z problemem zaliczenia przedmiotu metod numerycznych. Pozostało mi siedem dni na realizację zadania.
Przede mną stoi zadanie napisania programu (gui) w języku c# o takim zagadnieniu:

Obliczyć pole obszaru znajdującego się pod wykresem wielomianu interpolacyjnego Lagrange'a. Jako dane wejściowe należy podać ilość węzłów interpolacji, a następnie uporządkowany ich zbiór. Wynikiem mabyć liczba określająca pole powierzchni.

O metodach numerycznych nie wiem praktycznie nic. Z zajęć które były prowadzone nie dało się praktycznie nic wynieść. Czy byłby ktoś w stanie pomóc mi z tym? Pomóc, wskazać co powinienem przyswoić żeby być w stanie napisać taki program. Przedstawić matematyczne rozwiązanie zadania, cokolwiek.

0
Matesel napisał(a):

O metodach numerycznych nie wiem praktycznie nic. Z zajęć które były prowadzone nie dało się praktycznie nic wynieść.

Jeśli to prawda, to zmień uczelnię. Jak najszybciej.

PS. Przepraszam za złośliwość, nie mogłem się powstrzymać...

0

Przepraszam za odświeżenie, ale może jednak znajdzie się ktoś, kto ogarnia choć trochę problematykę. :)

0

Dla węzłów (0,1) (2,5) (4,17) wielomianem interpolującym jest f(x) = x^2 + 1. Co tu jest "pod wykresem"?

0

Zadanie z ręki profesora, z pewnością ma rozwiązanie poprawne.
Pytałem ludzi zajmujących się matematyką i otrzymałem tego typu odpowiedź:

Rozwiązanie zadania składa się z:

  • wyznaczenia wielomianu Lagrange'a opartego na trzech danych węzłach interpolacji:

(x_{i},y_{i}), \ \ i=1,2,3;

  • wyznaczenia kwadratury Newtona-Cotesa dla tego wielomianu;

  • obliczenia kwadratury Newtona-Cotesa.

0

W zgodzie z treścią zadania to:

  1. Weźmy n+1 dowolnych węzłów, jednoznacznie wyznaczamy wielomian interpolujący (jest na Wiki wzór jak to się robi, wystarczy podstawić).
  2. Scałkujmy wielomian - z tego co rozumiem na przedziale od x_0to x_n. Moim zdaniem kwadratura Newtona-Cotesa brzmi trochę strasznie, w tym wypadku wolałbym "złożony wzór trapezów".
0

Dobrze, stoję na początkowym etapie prac - mam program, który przyjmuje liczbę węzłów i pozwala wprowadzić wartości X,Y dla każdego z węzłów.
Kolejny krok to wyznaczenie wielomianu interpolacyjnego.
Znalazłem coś takiego -> http://www.algorytm.org/procedury-numeryczne/interpolacja-lagrange-a.html ale to służy wyłącznie do wyznaczenia wartości funkcji w szukanym X, więc nie jest rozwiązaniem, którego poszukuję. Z tych wzorów z wiki to niewiele jestem w stanie zrozumieć, zawsze się w takich sprawach gubię jak nie wiem. Myślę o tym od rana, a dzisiaj przynajmniej większą część prac muszę opracować, jutro po pracy będzie mało czasu, a jutro powinienem to wysłać.

Na razie jeszcze myślę nad innym zagadnieniem - mam w poleceniu, że musi to być uporządkowany zbiór. Powinienem podane węzły posortować? Xy mogę, tylko jak później sprawić, żeby Yki poleciały na odpowiednie miejsca w swojej tablicy? Czy też powinienem to zrobić w ten sposób, że jak ktoś poda X mniejszy od któregoś z poprzednio wpisanych, to wyrzucać komunikat, że X[i] nie może być mniejszy od poprzednio wpisanych X i po prostu dać od nowa do wpisania wartość tego konkretnego X[i]?

__
Próbowałem napisać funkcję do sortowania i odpowiedniego przypisania y.

        public static void sortuj(int [] xx)
        {
            for(int i=0; i<w; i++)
            {
                xx2[i] = xx[i];
            }

            Array.Sort(xx);

            for(int i=0; i<w; i++)
            {
                for (int j=0; j<w; j++)
                {
                    if (xx[i] == xx2[j])
                        yy2[i] = yy[j];
                }
            }
        }

W to ilość węzłów.
Najpierw do drugiej tablicy xx2 dopisuję wartości z tablicy xx gdzie znajdują się wartości X wpisane przez użytkownika.
Następnie sortuję tablicę xx.
Kolejna pętla -> tutaj biorę od xx[0], czyli najmniejszego elementu. Szukam mu elementu równego z tablicy xx2.
Jak znajdę element, to do drugiej tablicy yy2[0] dopisuję wartość z tablicy yy (powinna ona odpowiadać wartości wpisanej przy X podczas wypełniania przez użytkownika).
Efekt: błędny wynik. wywołanie yy2[0] zawsze daje wynik 0.

0

Coś mi w tym podejściu nie pasuje. Skoro wielomian interpolacyjny jest wielomianem, to czemu nie wyznaczyć dokładnej wartości całki? Nie jest to także całkowite omijanie problemu, bo część numeryczna znajduje się w wyznaczaniu tego wielomianu.

0

Nie do końca rozumiem, ale póki co stoję na kwestii wyznaczenia wielomianu. Za nic nie wiem jak to zrealizować.

0
enedil napisał(a):

Coś mi w tym podejściu nie pasuje. Skoro wielomian interpolacyjny jest wielomianem, to czemu nie wyznaczyć dokładnej wartości całki? Nie jest to także całkowite omijanie problemu, bo część numeryczna znajduje się w wyznaczaniu tego wielomianu.

Z tego co googlałem parę dni temu problem nazywa się "interpolacja i całkowanie funkcji wielomianem Lagrange'a".
Najpierw tworzysz wielomian interpolacyjny a potem go całkujesz.
https://pl.wikibooks.org/wiki/Metody_numeryczne_fizyki/Ca%C5%82kowanie_numeryczne_funkcji_interpolacyjnej
https://golinski.faculty.wmi.amu.edu.pl/zemn/lecture04.pdf

0

http://bc.pollub.pl/Content/1370/metody.pdf

Na stronie 38 znalazłem coś, co mogłoby pomóc wyznaczyć wielomian. to z y0 * (x-x1).... tylko nie mam pojęcia jak przenieść to na program, skoro trzeba tam wstawić niewiadomą X. Może ktoś pomóc?

1 użytkowników online, w tym zalogowanych: 0, gości: 1