Skip to content

Latest commit

 

History

History
119 lines (85 loc) · 3.61 KB

File metadata and controls

119 lines (85 loc) · 3.61 KB

Programming-course-cpp

Jakub Piskorowski on 03/11/2023 wersja: 1.0

Temat: Całkowanie numeryczne - metoda prostokątów

Przedstawienie działania algorytmu znajdowanie miejsca zerowego metodą połowienia przedziałów

Kod źródłowy: set-precision.cpp
calkowanie-numeryczne.cpp

📕 Poziom 3

Powrót do Algorytmika


Objaśnienie

Jednym ze sposobów wyznaczenia pola obszaru ograniczonego wykresem funkcji, osią OX oraz dwiema prostymi równoległymi do osi OY jest podzielenie tego obszaru na prostokąty:

metoda prostokatow 1

W naszym przykładzie podzielmy dany obszar na trzy prostokąty, które będą przecinać się z wykresem funkcji dokładnie po środku każdego boku. Oczywiście im większa liczba takich prostokątów tym wyznaczone pole jest dokładniejsze.

metoda prostokatow 2

Wzór na pole prostokąta jest wszystkim znany:
P = x * y
Długosc jednego z boków wyznaczamy z wzoru:
x = (b - a) / n
gdzie, n to liczba prostokątów na jakie dzielimy szukane pole, natomiast b i a to proste, które ograniczają zadany obszar a < b. Drugi bok wyznaczamy wyliczając wartość funkcji w środku boku prostokąta: y = |f(srodek)|. Środek pierwszego boku wyznaczamy z wzoru:
srodek = a + ((b - a) / 2n)
Każdy następny będziemy wyznaczać zwiększając poprzedni o długość boku x.

metoda prostokatow 3

Ostatecznie sumujemy pola wszystkich prostokątów otrzymując przybliżone pole zakreślanego obszaru:
P = x * |f(srodek)| + x * |f(srodek + x)| + x * |f(srodek + 2x)| + ... + x * |f(srodek + (n-1) * x)| =
x * (|f(srodek)| + |f(srodek + x )| + |f(srodek + 2x)| + ... + |f(srodek + (n-1) * x)|)

metoda prostokatow 4

Ustawienie dokładności

#include <iostream>     // fixed
#include <iomanip>      // setprecision
using namespace std;

int main(){
	double f =3.14159;

	cout << setprecision(5) << f << '\n';
	cout << setprecision(9) << f << '\n';
	cout << fixed;
	cout << setprecision(5) << f << '\n';
	cout << setprecision(9) << f << '\n';

	system("pause");
	return 0;
}

Kod źródłowy: set-precision.cpp

Wynik działania programu:

3.1416
3.14159
3.14159
3.141590000

Algorytm całkowania numerycznego - metodą prostokątów

Funkcja f

Rozpatrujemy wielomian f(x) = x * x + x + 2
Wejście:
x - argument funkcji

Lista kroków:
K1:   zwróć x * x + x + 2

Funkcja obliczająca pole obszaru ograniczonego wykresem

Wejście:
a - pierwsza wartość przedziału [a, b]
b - druga wartość przedziału [a, b]
n - liczba prostokątów

Lista kroków:
K1:   x ← (b-a) / n   pierwszy bok - każdy prostokąt ma taki sam
K2:   S ← 0   zmienna będzie przechowywać sumę pól trapezów
K3:   srodek ← a+(b-a) / (2.0*n)   srodek pierwszego boku
K4:   Dla i = 0,1,...,n
      wykonuj kroki k5...k6
K5:   S ← S + f(srodek)   Obliczenie wysokości prostokąta
K6:   srodek ← srodek + x   Przejście do następnego środka
K7:   zwróć S * x

Wynik działania programu:

Podaj przedzial [a, b] 
a = 1
b = 6
Podaj liczbe trapezow: 5
Pole figury wynosi: 98.75

Kod źródłowy: calkowanie-numeryczne.cpp