Jakub Piskorowski on 03/11/2023 wersja: 1.0
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
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:
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.
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
.
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)|)
#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
Rozpatrujemy wielomian f(x) = x * x + x + 2
Wejście:
x
- argument funkcji
Lista kroków:
K1: zwróć x * x + x + 2
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