Czym jest całka? Całkowanie numeryczne

Podobne dokumenty
Przez F(C) oznaczamy figurę narysowaną w kartezjańskim układzie współrzędnych, która ograniczona jest przez:

Metody numeryczne. materiały do wykładu dla studentów. 7. Całkowanie numeryczne

II. RÓŻNICZKOWANIE I CAŁKOWANIE NUMERYCZNE Janusz Adamowski

Całkowanie numeryczne - metoda prostokątów

Całkowanie numeryczne - metoda Simpsona

Zajęcia: VBA TEMAT: VBA PROCEDURY NUMERYCZNE Metoda bisekcji i metoda trapezów

Programowanie - wykład 4

Obliczanie całek. Instytut Fizyki Akademia Pomorska w Słupsku

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

C++ wprowadzanie zmiennych

Całkowanie numeryczne

Całkowanie numeryczne

MATLAB Prowadzący: dr hab. inż. Marek Jaszczur Poziom: początkujący

Wstęp do Informatyki

Podstawy Programowania Podstawowa składnia języka C++

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

Ćwiczenia podstawowe, zestaw 5, część 1

Rachunek całkowy - całka oznaczona

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

Wykłady 11 i 12: Całka oznaczona

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Część 4 życie programu

Struktury Struktura polami struct struct struct struct

Podstawy języka skryptowego Lua

Model odpowiedzi i schemat oceniania do arkusza I

Zadanie 2: Arytmetyka symboli

Algorytmy, reprezentacja algorytmów.

Całkowanie numeryczne

Podstawy OpenCL część 2

Całkowanie numeryczne przy użyciu kwadratur

Lab 10. Funkcje w argumentach funkcji metoda Newtona. Synonimy nazw typów danych. Struktury. Tablice struktur.

Interpolacja, aproksymacja całkowanie. Interpolacja Krzywa przechodzi przez punkty kontrolne

Kilka słów o metodzie Monte Carlo

Rozwiązanie. #include <cstdlib> #include <iostream> using namespace std;

WYRAŻENIA ALGEBRAICZNE

7. Pętle for. Przykłady

Wyjątki (exceptions)

1 Podstawy c++ w pigułce.

3. Instrukcje warunkowe

#include <iostream> using namespace std; void ela(int); int main( ); { Funkcja 3. return 0; }

Ilustracja metody Monte Carlo do obliczania pola obszaru D zawartego w kwadracie [a, b] [a, b].

WYMAGANIA EDUKACYJNE Z MATEMATYKI DLA KLASY DRUGIEJ LICEUM OGÓLNOKSZTAŁCĄCEGO ZAKRES PODSTAWOWY

Mechanizm dziedziczenia

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

WYMAGANIA EDUKACYJNE NIEZBĘDNE DO OTRZYMANIA PRZEZ UCZNIA POSZCZEGÓLNYCH ŚRÓDROCZNYCH I ROCZNYCH OCEN KLASYFIKACYJNYCH Z MATEMATYKI

Pętla for. Wynik działania programu:

Struktura pliku projektu Console Application

Metody numeryczne w przykładach

METODY ROZWIĄZYWANIA RÓWNAŃ NIELINIOWYCH

Wstęp do programowania

Ciągi liczbowe wykład 3

5. Rekurencja. Przykłady

Metody rozwiązywania równań nieliniowych

INFORMATYKA ELEMENTY METOD NUMERYCZNYCH.

Weźmy wyrażenie. Pochodna tej funkcji wyniesie:. Teraz spróbujmy wrócić.

Metody numeryczne. Instytut Sterowania i Systemów Informatycznych Wydział Elektrotechniki, Informatyki i Telekomunikacji Uniwersytet Zielonogórski

Wykłady z Matematyki stosowanej w inżynierii środowiska, II sem. 2. CAŁKA PODWÓJNA Całka podwójna po prostokącie

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Przekazywanie argumentów wskaźniki

Z52: Algebra liniowa Zagadnienie: Zastosowania algebry liniowej Zadanie: Operatory różniczkowania, zagadnienie brzegowe.

Jak napisać listę jednokierunkową?

Matematyka I. Bezpieczeństwo jądrowe i ochrona radiologiczna Semestr zimowy 2018/2019 Wykład 12

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

Szukanie rozwiązań funkcji uwikłanych (równań nieliniowych)

Egzamin z Metod Numerycznych ZSI, Egzamin, Gr. A

Programowanie komputerowe. Zajęcia 1

WYMAGANIA EDUKACYJNE NIEZBĘDNE DO UZYSKANIA ŚRÓDROCZNYCH I ROCZNYCH OCEN KLASYFIKACYJNYCH Z MATEMATYKI W KLASIE I GIMNAZJUM

Ruch jednostajnie zmienny prostoliniowy

Programowanie proceduralne w języku C++ Pętle, tablice

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

ROZKŁAD MATERIAŁU DO II KLASY LICEUM (ZAKRES ROZSZERZONY) A WYMAGANIA PODSTAWY PROGRAMOWEJ.

OCENIANIE ARKUSZA POZIOM PODSTAWOWY

I - Microsoft Visual Studio C++

WYMAGANIA EDUKACYJNE NA POSZCZEGÓLNE OCENY. (zakres podstawowy) klasa 2

Szablon klasy std::vector

Wstęp do programowania

Całka oznaczona zastosowania (wykład 9; ) Definicja całki oznaczonej dla funkcji ciagłej

PODKARPACKI SPRAWDZIAN PRZEDMATURALNY Z MATEMATYKI DLA KLAS DRUGICH POZIOM PODSTAWOWY

Wymagania edukacyjne z matematyki

Zakładamy, że są niezależnymi zmiennymi podlegającymi (dowolnemu) rozkładowi o skończonej wartości oczekiwanej i wariancji.

Pliki wykład 2. Dorota Pylak

Podstawy programowania w C++

Wymagania na egzamin poprawkowy z matematyki w roku szkolnym 2017/2018 klasa pierwsza Branżowa Szkoła

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

FUNKCJA LINIOWA, RÓWNANIA I UKŁADY RÓWNAŃ LINIOWYCH

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

FUNKCJA KWADRATOWA. Zad 1 Przedstaw funkcję kwadratową w postaci ogólnej. Postać ogólna funkcji kwadratowej to: y = ax + bx + c;(

Wstęp do programowania

Wymagania na egzamin poprawkowy z matematyki w roku szkolnym 2018/2019 klasa 1 TŻiUG

MACIERZE. Sobiesiak Łukasz Wilczyńska Małgorzata

Wstęp do programowania

Przedmiotowy system oceniania

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

Tablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119

Wstęp do informatyki- wykład 7

Egzamin z Metod Numerycznych ZSI, Grupa: A

Modelowanie rynków finansowych z wykorzystaniem pakietu R

PLAN WYNIKOWY (zakres podstawowy) klasa 2. rok szkolny 2015/2016

Transkrypt:

Całkowanie numeryczne jest to zagadnienie z metod elementów skończonych (MES). Korzystając z całkowania numerycznego możemy obliczyć wartość dowolnej całki jednowymiarowej oznaczonej. Wynik jest zawsze obarczony pewnym błędem, ponieważ wartość całki w C++ liczona jest w przybliżeniu. Czym jest całka? Całka oznaczona z dowolnej funkcji f(x) w przedziałach [a,b], jest to pole figury ograniczone wykresem funkcji f(x) oraz osią X w przedziałach [a,b]. Dla przykładu rozważmy funkcję. Narysuję jej wykres w przedziale [-4,3]. Całkę z tej funkcji przedstawia oznaczone na niebiesko pole: Całkowanie numeryczne W artykule opiszę kilka podstawowych metod całkowania numerycznego i skupię się na przedstawieniu ich implementacji w języku C++. Różne metody całkowania numerycznego dają różną dokładność. Są metody dokładniejsze i mniej dokładne, jednak ich prawdziwa skuteczność zależy od rodzaju funkcji jaką badamy. Każda metoda całkowania numerycznego opiera się na tej samej koncepcji. Funkcję, którą całkujemy dzielimy na określoną liczbę przedziałów. Ilość przedziałów jest dowolna i Karol Trybulec p-programowanie.pl 1

zależy od niej dokładność wyniku, który otrzymamy. Wynikiem całki jest suma pól poszczególnych przedziałów. Metoda prostokątów C++ Metoda prostokątów jest najmniej dokładną metodą całkowania. Polega ona na podzieleniu obszaru całowanego na x prostokątów (przedziałów). Pola prostokątów dodaje się do siebie i otrzymuje przybliżony wynik całki. Posłużmy się ponownie funkcją oraz całką z tej funkcji. Obszar całkowania [Xp, Xk] podzieliłem na n równych części, w tym wypadku n=3. Litera h oznacza krok całkowania czyli wysokość pojedynczego prostokąta. Jej wartość wyznaczamy ze wzoru: Pole pojedynczego prostokąta określa wzór:, dla i=1..3 Aby poznać długość podstawy f(xi) musimy użyć iteratora. Występuje prosta zależność: Karol Trybulec p-programowanie.pl 2

Sprawdźmy obliczenia podstawiając odpowiednie liczby do powyższego wzoru: Aby otrzymać ostateczny wynik całki należy zsumować pola prostokątów: Kod programu w C++ liczący dowolną całkę metodą prostokątów: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 #include <iostream> #include <cstdlib> using namespace std; // funkcja do scalkowania double f1(double x) return -x*x-x+10; int main() float xp, xk, h, calka; int n; // przedzialy xp = -2; xk = 1; // im wieksze n tym wieksza dokladnosc (tym wiecej prostokątow) n = 3; h = (xk - xp) / (float)n; cout << "krok: h=" << h << endl; calka = ; for (int i=1; i<=n; i++) calka += f1(xp + i*h)*h; cout << "Wynik calkowania metoda prostokatow: " << calka << endl; system("pause"); return ; Karol Trybulec p-programowanie.pl 3

Metoda trapezów C++ Metoda trapezów daje dość dokładne wyniki, szczególnie przy dużej dokładności N. Polega ona na podzieleniu obszaru całowanego na x trapezów (przedziałów), których pola na końcu sumuje się. W dalszym ciągu wykorzystajmy funkcję. Obliczmy z niej całkę:. Obszar został podzielony na 3 równe części (n=3). W tym wypadku 3 przedziały dają w miarę dokładny wynik (trapezy są bardzo dobrze dopasowane), jednak aby zyskać większą dokładność warto utworzyć przynajmniej 1000 podziałów. Litera h jest tym razem wysokością trapezu. Ponieważ mamy tylko 3 przedziały, wysokość łatwo odczytać z rysunku. Gdybyśmy chcieli większą dokładność, moglibyśmy wygenerować np. 100 trapezów, wtedy wysokość liczylibyśmy ze wzoru: Wykorzystajmy wzór na pole trapezu znany z gimnazjum: Karol Trybulec p-programowanie.pl 4

Przekształćmy wzór dostosowując go do naszego rysunku. Pole i-tego trapezu określa wzór: Zauważ, że zamiast podstaw a i b we wzorze pojawiły się wartości funkcji f(xi). Długości podstaw trapezów kończą się w miejscu gdzie przecinają się z wykresem dlatego można je obliczyć wprost z funkcji. Przykładowo aby poznać długość górnej podstawy pierwszego trapezu wystarczy obliczyć wartość funkcji f(x0), a więc do funkcji wstawiamy za x liczbę -2. Otrzymamy wynik 8 co można w tym wypadku odczytać z rysunku. Wartość całki (Pc) w przybliżeniu równa jest sumie pól wszystkich trapezów. W naszym przypadku posiadamy 3 trapezy stąd: Rozpisując wzór dla 3 trapezów dojdziemy do postaci: Wzór można uprościć, wyłączając przed nawias część wspólną poszczególnych sum: Wyprowadzony wzór podaje nam w przybliżeniu wartość liczonej przez nas całki, przy podziale na 3 trapezy. Zwróć uwagę: mając określoną liczbę trapezów n, sumujemy ich wszystkie podstawy pamiętając aby pierwszą i ostatnią podzielić przez 2. Na końcu mnożymy wynik sumy przez wysokość pojedynczego trapezu. Całość bardzo łatwo zaimplementować w C++ posługując się pętlą for. W pętli sumujemy wszystkie podstawy, pomijając graniczne xp i xk (czyli x0 i x3): dla i=1..2 Po wyjściu z pętli liczymy długości podstaw brzegowych zgodnie z wyprowadzonym wzorem i dzielimy je przez 2: Na samym końcu sumujemy poszczególne podstawy i mnożymy przez krok H (wysokość): Karol Trybulec p-programowanie.pl 5

Kod programu w C++ liczący dowolną całkę metodą trapezów: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 #include <iostream> #include <cstdlib> using namespace std; // funkcja do scalkowania double f1(double x) return -x*x-x+10; int main() float xp, xk, h, calka; int n; // przedzialy xp = -2; xk = 1; // im wieksze n tym wieksza dokladnośc (np. n=1000) n = 3; h = (xk - xp) / (float)n; cout << "krok: h=" << h << endl; calka = ; for (int i=1; i<n; i++) calka += f1(xp + i * h); calka += f1(xp) / 2; calka += f1(xk) / 2; calka *= h; cout << "Wynik calkowania: " << calka << endl; system("pause"); return ; Podsumowanie Istnieje wiele metod całkowania numerycznego, które dają lepsze wyniki: metoda prostokątów Karol Trybulec p-programowanie.pl 6

metoda trapezów metoda Simpsona (metoda parabol) metoda Monte Carlo reguła 3/8 cały zbiór kwadratur Gaussa itd. Każda z użytych metod (nawet metoda prostokątów) może dać bardzo dokładny wynik obliczonej całki (wyobraź sobie, że dzielisz przedział [0, 1] na 10000 małych prostokątów). Im większe przybliżenie, tym więcej operacji musi wykonać program. Różne metody całkowania numerycznego są używane do rozwiązywania różnych problemów. Bardzo często metody są łączone ze sobą. Karol Trybulec p-programowanie.pl 7