Całkowanie numeryczne - metoda prostokątów

Podobne dokumenty
Całkowanie numeryczne - metoda Simpsona

Miejsca zerowe funkcji - Metoda połowienia

Miejsca zerowe funkcji - Metoda Newtona

Liczby pierwsze - generacja liczb pierwszych

Przeliczanie na zapis stałoprzecinkowy

Liczby pierwsze - sito Eratostenesa

Czym jest całka? Całkowanie numeryczne

Wyszukiwanie największej spośród czterech liczb. Przykładowe rozwiązanie

Ilość cyfr liczby naturalnej

Sortowanie stogowe Heap Sort

binit - binary digit, bigit - binary digit

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

Palindromy. Przykładowe rozwiązanie

Liczby pierwsze - algorytm RSA

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Podstawy Programowania

Programowanie - wykład 4

Informatyka dla klas I wykresy funkcji

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

Wstęp do Informatyki

Całkowanie numeryczne

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

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

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

3. Instrukcje warunkowe

Funkcje i instrukcje języka JavaScript

tablica: dane_liczbowe

Programowanie komputerowe. Zajęcia 1

Język programowania PASCAL

Operacje arytmetyczne w systemie dwójkowym

MACIERZE. Sobiesiak Łukasz Wilczyńska Małgorzata

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

Wstęp do programowania

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

Ok. Rozbijmy to na czynniki pierwsze, pomijając fragmenty, które już znamy:

Podstawy algorytmiki i programowania - wykład 2 Tablice dwuwymiarowe cd Funkcje rekurencyjne

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Wstęp do informatyki- wykład 11 Funkcje

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

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

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

Struktury Struktura polami struct struct struct struct

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Algorytmy, reprezentacja algorytmów.

Pytania sprawdzające wiedzę z programowania C++

Podstawy algorytmiki i programowania - wykład 4 C-struktury

Prof. Danuta Makowiec Instytut Fizyki Teoretycznej i Astrofizyki pok. 353, tel danuta.makowiec at gmail.com

SCHEMAT OCENIANIA poziom rozszerzony arkusz I

Podstawy programowania obiektowego

Rekurencja. Przygotowała: Agnieszka Reiter

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

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

Wstęp do informatyki- wykład 9 Funkcje

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Sortowanie przez scalanie Merge Sort

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

Liczby całkowite i rzeczywiste

Wstęp do informatyki- wykład 8 Pętla while, do while,for -pętla w pętli- przykłady Operator rzutowania Manipulatory

5. Rekurencja. Przykłady

Program 14. #include <iostream> #include <ctime> using namespace std;

JAVAScript w dokumentach HTML (2)

Laboratorium 1. Programowanie II - Kierunek Informatyka. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej

Transponowanie macierzy Mnożenie macierzy Potęgowanie macierzy Wyznacznik macierzy

Programowanie i struktury danych

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

Podstawy programowania w C++

Wstęp do programowania

Wstęp do informatyki- wykład 6

Wstęp do informatyki- wykład 7

Przekazywanie argumentów wskaźniki

C-struktury wykład. Dorota Pylak

SCHEMAT OCENIANIA poziom rozszerzony arkusz II

wagi cyfry pozycje

1,3,4,2,3,4,0,1,4,5,0. Wówczas największa suma trzech kolejnych liczb (zaznaczone na czerwono) wynosi:

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

I - Microsoft Visual Studio C++

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

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

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]

4. Funkcje. Przykłady

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

LibreOffice Calc VBA

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

Wstęp do programowania

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

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

Podstawy programowania

1 Powtórzenie wiadomości

Programowanie strukturalne i obiektowe. Funkcje

1 Wielokrotne powtarzanie tych samych operacji

do instrukcja while (wyrażenie);

Struktura pliku projektu Console Application

Procedury i funkcje - powtórzenie i uzupełnienia. Przykład funkcji potęgowanie przy wykładniku naturalnym

Całkowanie numeryczne

Programowanie komputerowe. Zajęcia 2

Lekcja : Tablice + pętle

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 25 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 38

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Transkrypt:

Artykuł pobrano ze strony eioba.pl Całkowanie numeryczne - metoda prostokątów W metodzie prostokątów korzystamy z definicji całki oznaczonej Riemanna, w której wartość całki interpretowana jest jako suma pól obszarów pod wykresem krzywej w zadanym przedziale całkowania <x p,x k >. Sumę tę przybliżamy przy pomocy sumy pól odpowiednio dobranych prostokątów. Sposób postępowania jest następujący: Przedział całkowania <x p,x k > dzielimy na n równo odległych punktów x 1,x 2,...,x n. Punkty te wyznaczamy w prosty sposób wg wzoru: dla i = 1,2,...,n x i = x p + i (x k - x p ) n Obliczamy odległość między dwoma sąsiednimi punktami - będzie to podstawa każdego prostokąta: dx = x k - x p n Dla każdego wyznaczonego w ten sposób punktu obliczamy wartość funkcji f(x) w tym punkcie: f i = f(x i ), dla i = 1,2,...,n Obliczamy sumę iloczynów wyznaczonych wartości funkcji przez odległość dx między dwoma sąsiednimi punktami - da to sumę pól poszczególnych prostokątów ograniczonych wykresem funkcji: S = f 1 dx + f 2 dx +... + f n dx a po wyprowadzeniu wspólnego czynnika przed nawias: S = dx (f 1 + f 2 +... + f n )

Otrzymana suma jest przybliżoną wartością całki oznaczonej funkcji f(x) w przedziale <x p,x k >. Obliczymy ręcznie przybliżoną wartość całki oznaczonej z funkcji f(x) = sin(x) w przedziale <0,π>. Przedział podzielimy na n = 4 punkty: Odległość między dwoma sąsiednimi punktami wynosi: Dla każdego z wyznaczonych punktów obliczamy wartość funkcji f(x) = sin(x): Obliczamy sumę pól prostokątów: S = dx (f 1 + f 2 + f 3 + f 4 ) S = 0,7854 (0,7071 + 1,000 + 0,7071 + 0,0000) S = 0,7854 2,4142 S = 1,8961 Dokładna wartość takiej całki oznaczonej wynosi wg tablic: Zatem popełniliśmy błąd równy: 2-1,8961 = 0,1039, co stanowi nieco ponad 5% wartości dokładnej. W sumie nie jest to zły wynik zważywszy na ilość wykonanych przez nas rachunków. Jeśli chcemy zwiększyć dokładność, to musimy zsumować więcej prostokątów, ale to zostawimy już komputerom.

Dane wejściowe x p -początek przedziału całkowania, x p R x k -koniec przedziału całkowania, x k R n -liczba punktów podziałowych, n N f(x)-funkcja rzeczywista, której całkę liczymy Dane wyjściowe Wartość całki oznaczonej funkcji f(x) w przedziale <x p,x k >. Wynik jest liczbą rzeczywistą. Zmienne pomocnicze s -suma wysokości prostokątów, którą później zamieniamy w wartość całki, s dx-odległość między dwoma sąsiednimi punktami podziałowymi, dx R i -licznik punktów podziałowych, i N R krok 1:Czytaj x p x k krok 2:s x krok k - x p 3:dx n krok 4:Dla i = 1,2,...,n, s s + f(x p + i dx) krok 5:s s dx krok 6:Pisz s i zakończ algorytm Po odczytaniu informacji o krańcach x p i x k przedziału całkowania ustawiamy sumę s na 0, obliczamy odległość dx pomiędzy sąsiednimi punktami podziałowymi i ustawiamy ich licznik na 1. Rozpoczynamy pętlę iteracyjną, która wykona się n-razy. Wewnątrz pętli obliczamy i-ty punkt podziałowy oraz wartość funkcji w tym punkcie, którą dodajemy do sumy s. Po zakończeniu pętli sumę s musimy jeszcze pomnożyć przez szerokość podstawy prostokątów, czyli odległość dx Po tej operacji s zawiera wartość przybliżoną całki. Zwracamy ją użytkownikowi i kończymy algorytm. Poniższe, przykładowe programy są praktyczną realizacją omawianego w tym rozdziale algorytmu. Zapewne można je napisać bardziej efektywnie. To już twoje zadanie. Dokładny opis stosowanych środowisk programowania znajdziesz we wstępie. Programy przed opublikowaniem w serwisie edukacyjnym zostały dokładnie przetestowane. Jeśli jednak znajdziesz jakąś usterkę (co zawsze może się zdarzyć), to prześlij o niej informację do autora. Pozwoli to ulepszyć nasze artykuły. Będziemy Ci za to wdzięczni.

Prezentowane poniżej programy wyliczają całkę oznaczoną funkcji f(x) = x 2 + 2x. Przedział całkowania jest dzielony na n=1000 punktów. W przedziale <0,1> całka oznaczona ma wartość dokładną równą 4 / 3 = 1.3333... Wydruk z uruchomionego programu Obliczanie całki oznaczonej za pomocą metody prostokątów ---------------------------- (C)2006 mgr J.Wałaszek I LO f(x) = x * x + 2 * x Podaj początek przedziału całkowania xp = 0 Podaj koniec przedziału całkowania xk = 1 Wartość całki wynosi : 1,335 KONIEC. Naciśnij dowolny klawisz... Microsoft Visual Basic 2005 Express Edition

Borland Delphi 7.0 Personal Edition //** Obliczanie całki oznaczonej metodą prostokątów ** //** ---------------------------------------------- ** //** (C)2004 mgr Jerzy Wałaszek I LO w Tarnowie ** program int_rect; {$APPTYPE CONSOLE} //** Tutaj definiujemy funkcję ** function f(x : real) : real; begin f := x * x + 2 * x; end; //******************** //** Program główny ** //******************** const N = 1000; //liczba punktów/prostokątów podziałowych var xp,xk,s,dx : real; i : integer; begin writeln('obliczanie calki oznaczonej'); writeln('za pomoca metody prostokatow'); writeln('----------------------------'); writeln('(c)2004 mgr J.Walaszek I LO'); writeln('f(x) = x * x + 2 * x'); writeln('podaj poczatek przedzialu calkowania'); write('xp = '); readln(xp); writeln('podaj koniec przedzialu calkowania'); write('xk = '); readln(xk); s := ; dx := (xk - xp) / N; for i := 1 to N do s := s + f(xp + i * dx); s := s * dx; writeln('wartosc calki wynosi : ',s:8:3); writeln('nacisnij klawisz Enter...'); readln; end.

Borland C++ Builder 6.0 Personal Edition //** Obliczanie całki oznaczonej metodą prostokątów ** //** ---------------------------------------------- ** //** (C)2004 mgr Jerzy Wałaszek I LO w Tarnowie ** #include <iomanip> #include <iostream> using namespace std; //** Tutaj definiujemy funkcję ** double f(double x) { return(x * x + 2 * x); } //******************** //** Program główny ** //******************** main() { const int N = 1000; //liczba punktów/prostokątów podziałowych double xp,xk,s,dx; int i; char c[1]; cout.precision(3); // 3 cyfry po przecinku cout.setf(ios::fixed); // format stałoprzecinkowy cout << "Obliczanie calki oznaczonej\n" "za pomoca metody prostokatow\n" "----------------------------\n" "(C)2004 mgr J.Walaszek I LO\n\n" "f(x) = x * x + 2 * x\n\n" "Podaj poczatek przedzialu calkowania\n\n" "xp = "; cin >> xp; cout << "\npodaj koniec przedzialu calkowania\n\n" "xk = "; cin >> xk; cout << endl; s = ; dx = (xk - xp) / N; for(i = 1; i <= N; i++) s += f(xp + i * dx); s *= dx; cout << "Wartosc calki wynosi : " << setw(8) << s << "\n\nnacisnij klawisz Enter"; cin.getline(c, 1); cin.getline(c, 1); }

Microsoft Visual Basic 2005 Express Edition '**************************************************** '** Obliczanie całki oznaczonej metodą prostokątów ** '** ---------------------------------------------- ** '** (C)2006 mgr Jerzy Wałaszek I LO w Tarnowie ** '**************************************************** Module Module1 '******************************* '** Tutaj definiujemy funkcję ** '******************************* Public Function f(byval x As Double) As Double Return x * x + 2 * x End Function '******************** '** Program główny ** '******************** Sub Main() Const N = 1000 'liczba punktów/prostokątów podziałowych Dim xp, xk, s, dx As Double Dim i As Integer Console.WriteLine("Obliczanie całki oznaczonej") Console.WriteLine("za pomocą metody prostokątów") Console.WriteLine("----------------------------") Console.WriteLine("(C)2006 mgr J.Wałaszek I LO") Console.WriteLine("f(x) = x * x + 2 * x") Console.WriteLine("Podaj początek przedziału całkowania") Console.Write("xp = ") : xp = Val(Console.ReadLine()) Console.WriteLine("Podaj koniec przedziału całkowania") Console.Write("xk = ") : xk = Val(Console.ReadLine()) s = dx = (xk - xp) / N For i = 1 To N : s += f(xp + i * dx) : Next s *= dx Console.WriteLine("Wartość całki wynosi : {0,8:F3}", s) ' Gotowe Console.WriteLine("KONIEC. Naciśnij dowolny klawisz...") Console.ReadLine() End Sub End Module

Python # -*- coding: cp1250 -*- #**************************************************** #** Obliczanie całki oznaczonej metodą prostokątów ** #** ---------------------------------------------- ** #** (C)2005 mgr Jerzy Wałaszek I LO w Tarnowie ** #**************************************************** #******************************* #** Tutaj definiujemy funkcję ** #******************************* def f(x): return x * x + 2 * x; #******************** #** Program główny ** #******************** N = 1000 #liczba punktów/prostokątów podziałowych "Obliczanie calki oznaczonej" "za pomoca metody prostokatów" "----------------------------" "(C)2005 mgr J.Walaszek I LO" "f(x) = x * x + 2 * x" "Podaj poczatek przedzialu calkowania" xp = float(raw_input("xp = ")) "Podaj koniec przedzialu calkowania" xk = float(raw_input("xk = ")) s = 0. dx = (xk - xp) / N for i in range(1, N + 1): s += f(xp + i * dx) s *= dx "Wartosc calki wynosi : %8.3f" % s raw_input("koniec - nacisnij klawisz Enter...")

JavaScript <html> <head> <title>całkowanie numeryczne metodą prostokątów</title> </head> <body> <script language="javascript"> //** Obliczanie całki oznaczonej metodą prostokątów ** //** ---------------------------------------------- ** //** (C)2004 mgr Jerzy Wałaszek I LO w Tarnowie ** //** Tutaj definiujemy funkcję ** function f(x) { return(x * x + 2 * x); } function js_rectangle() { var N = 1000; //liczba punktów/prostokątów podziałowych var xp,xk,s,dx,i,t; xp = parsefloat(document.frm_rectangle.xp_inp.value); xk = parsefloat(document.frm_rectangle.xk_inp.value); if(isnan(xp) isnan(xk)) t = "<font color=red><b>popraw dane wejściowe!</b></font>"; else { s = ; dx = (xk - xp) / N; for(i = 1; i <= N; i++) s += f(xp + i * dx); s *= dx; t = Math.floor(s * 1000) / 1000; }; document.getelementbyid("t_out").innerhtml = t; } </script> <form method="post" name="frm_rectangle" style="border: 2px solid #FF9900; padding-left: 4px; padding-right: 4px; padding-top: 1px; padding-bottom: 1px; background-color: #FFFFCC"> <h2 style="text-align: center"> Obliczanie całki oznaczonej<br> za pomocą metody prostokątów </h2> <hr> <h4 style="text-align: center"> (C)2004 mgr Jerzy Wałaszek I LO w Tarnowie </h4> <h3 style="text-align: center"> Całkowana funkcja: </h3> <h4 style="text-align: center"> <i>f(x) = x<sup>2</sup> + 2x</i> </h4> <p style="text-align: center"> Tutaj określ przedział całkowania </p> <p style="text-align: center"> Początek <i>x<sub>p</sub></i> = <input type="text" name="xp_inp" size="20" value="0"> i koniec <i>x<sub>k</sub> </i>= <input type="text" name="xk_inp" size="20" value="1"> </p> <p style="text-align: center"> <input onclick="js_rectangle();" type="button" value="oblicz całkę" name="b1"> </p> <h4 style="text-align: center"> Wartość całki wynosi </h4> <p id="t_out" style="text-align: center">...</p> </form> </body> </html> Dokument ten rozpowszechniany jest zgodnie z zasadami licencji GNU Free Documentation License.

Autor: mgr Jerzy Wałaszek Przedruk ze strony: http://www.i-lo.tarnow.pl/edu/inf/alg/calki/index.html Artykuł pobrano ze strony eioba.pl