Wróć do informacji o e-podręczniku Wydrukuj Pobierz materiał do PDF Pobierz materiał do EPUB Pobierz materiał do MOBI Zaloguj się, aby dodać do ulubionych Zaloguj się, aby skopiować i edytować materiał Zaloguj się, aby udostępnić materiał Zaloguj się, aby dodać całą stronę do teczki

Metoda prostokątów – implementacja w języku C++

Przykład 1

Napisz program, który wyznaczy pole powierzchni ograniczonej wykresem funkcji f ( x ) , osią OX oraz równoległymi do osi OY prostymi xPoczatekxKoniec za pomocą metody prostokątówmetoda prostokątówmetody prostokątów dla liczby przedziałów równej liczbaProstokatow. Wynik zaokrąglij do dwóch miejsc po przecinku.

Program przetestuj dla funkcji f(x)=x, xPoczatek = 0, xKoniec = 2 oraz liczby prostokątów równej 2.

Specyfikacja problemu:

Dane:

  • xPoczatek – liczba rzeczywista; początek przedziału

  • xKoniec – liczba rzeczywista; koniec przedziału

  • liczbaProstokatow – liczba naturalna dodatnia; liczba podprzedziałów

  • f(x) – funkcja rzeczywista zmiennej rzeczywistej

Wynik:

Program wypisuje przybliżoną wielkość pola ograniczonego wykresem funkcji f(x), osią OX oraz prostymi xPoczatekxKoniec wyznaczone metodą prostokątówmetoda prostokątówmetodą prostokątów z dokładnością do dwóch miejsc po przecinku przy danym przedziale.

Zacznijmy od dołączenia do programu potrzebnych bibliotek i deklaracji przestrzeni nazw. Ponieważ otrzymany wynik mamy zaokrąglić do dwóch miejsc po przecinku, wykorzystamy funkcję round() z biblioteki <cmath>.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny cmath zamknij nawias ostrokątny. Linia 3. using namespace std średnik.

Deklarujemy również funkcję f ( x ) = x:

Linia 1. double f otwórz nawias okrągły double x zamknij nawias okrągły otwórz nawias klamrowy. Linia 2. return x średnik. Linia 3. zamknij nawias klamrowy.

W funkcji głównej programu umieścimy dwie zmienne typu double, które będą ograniczeniem rozważanego przedziału. Utworzymy również zmienną wynik, w której będziemy przechowywać przybliżoną wartość pola obszaru ograniczonego wykresem funkcji f ( x ) i osią OX w zadanym przedziale [xPoczatek, xKoniec]. Inicjujemy ją wartością zerową:

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny cmath zamknij nawias ostrokątny. Linia 3. using namespace std średnik. Linia 5. double f otwórz nawias okrągły double x zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. return x średnik. Linia 7. zamknij nawias klamrowy. Linia 9. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 10. double xPoczatek znak równości 0 kropka 0 przecinek xKoniec znak równości 2 kropka 0 przecinek wynik znak równości 0 kropka 0 średnik. Linia 11. zamknij nawias klamrowy.

Konieczne będzie również zdefiniowanie liczby prostokątów, to znaczy liczby odcinków, na które będziemy dzielić zadany przedział w celu uzyskania dokładniejszego przybliżenia.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny cmath zamknij nawias ostrokątny. Linia 3. using namespace std średnik. Linia 5. double f otwórz nawias okrągły double x zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. return x średnik. Linia 7. zamknij nawias klamrowy. Linia 9. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 10. double xPoczatek znak równości 0 kropka 0 przecinek xKoniec znak równości 2 kropka 0 przecinek wynik znak równości 0 kropka 0 średnik. Linia 11. int liczbaProstokatow znak równości 2 średnik. Linia 12. zamknij nawias klamrowy.

Następnie obliczamy długość jednego z boków każdego prostokąta. W tym celu przedział [xPoczatek, xKoniec] dzielimy na odcinki o długości równej
(xKoniec xPoczatek) ÷ liczbaProstokatow. Odcinki te będą podstawami powstałych prostokątów.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny cmath zamknij nawias ostrokątny. Linia 3. using namespace std średnik. Linia 5. double f otwórz nawias okrągły double x zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. return x średnik. Linia 7. zamknij nawias klamrowy. Linia 9. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 10. double xPoczatek znak równości 0 kropka 0 przecinek xKoniec znak równości 2 kropka 0 przecinek wynik znak równości 0 kropka 0 średnik. Linia 11. int liczbaProstokatow znak równości 2 średnik. Linia 13. double podstawaProstokata znak równości. Linia 14. otwórz nawias okrągły xKoniec minus xPoczatek zamknij nawias okrągły prawy ukośnik liczbaProstokatow średnik. Linia 15. zamknij nawias klamrowy.

Tworzymy pętlę iteracyjną, która będzie odpowiadać za obliczanie pól kolejnych prostokątów. Ponieważ zdefiniowaliśmy wcześniej zmienną liczbaProstokatow, musimy zadbać, aby instrukcje w pętli wykonywały się taką samą liczbę razy.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny cmath zamknij nawias ostrokątny. Linia 3. using namespace std średnik. Linia 5. double f otwórz nawias okrągły double x zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. return x średnik. Linia 7. zamknij nawias klamrowy. Linia 9. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 10. double xPoczatek znak równości 0 kropka 0 przecinek xKoniec znak równości 2 kropka 0 przecinek wynik znak równości 0 kropka 0 średnik. Linia 11. int liczbaProstokatow znak równości 2 średnik. Linia 13. double podstawaProstokata znak równości. Linia 14. otwórz nawias okrągły xKoniec minus xPoczatek zamknij nawias okrągły prawy ukośnik liczbaProstokatow średnik. Linia 16. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny liczbaProstokatow średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 18. zamknij nawias klamrowy. Linia 19. zamknij nawias klamrowy.

Wewnątrz pętli należy dodać do zmiennej wynik obliczone pole aktualnego i-tego prostokąta. Zauważ, że długością wysokości prostokąta jest wartość funkcji w początku przedziału będącego podstawą prostokąta. Jest to wariant metody prostokątów, który nazywamy wariantem lewych prostokątów.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny cmath zamknij nawias ostrokątny. Linia 3. using namespace std średnik. Linia 5. double f otwórz nawias okrągły double x zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. return x średnik. Linia 7. zamknij nawias klamrowy. Linia 9. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 10. double xPoczatek znak równości 0 kropka 0 przecinek xKoniec znak równości 2 kropka 0 przecinek wynik znak równości 0 kropka 0 średnik. Linia 11. int liczbaProstokatow znak równości 2 średnik. Linia 13. double podstawaProstokata znak równości. Linia 14. otwórz nawias okrągły xKoniec minus xPoczatek zamknij nawias okrągły prawy ukośnik liczbaProstokatow średnik. Linia 16. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny liczbaProstokatow średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 17. wynik plus znak równości podstawaProstokata asterysk f otwórz nawias okrągły xPoczatek plus podstawaProstokata asterysk i zamknij nawias okrągły średnik. Linia 18. zamknij nawias klamrowy. Linia 19. zamknij nawias klamrowy.

Możemy zredukować liczbę zbędnych operacji mnożenia (obliczania pól prostokątów), poprzez wyłączenie wspólnego czynnika przed nawias. Dzięki temu wewnątrz pętli będą jedynie sumowane wysokości prostokątów, a po jej zakończeniu pomnożymy otrzymaną sumę przez długość podstawy prostokąta.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny cmath zamknij nawias ostrokątny. Linia 3. using namespace std średnik. Linia 5. double f otwórz nawias okrągły double x zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. return x średnik. Linia 7. zamknij nawias klamrowy. Linia 9. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 10. double xPoczatek znak równości 0 kropka 0 przecinek xKoniec znak równości 2 kropka 0 przecinek wynik znak równości 0 kropka 0 średnik. Linia 11. int liczbaProstokatow znak równości 2 średnik. Linia 13. double podstawaProstokata znak równości. Linia 14. otwórz nawias okrągły xKoniec minus xPoczatek zamknij nawias okrągły prawy ukośnik liczbaProstokatow średnik. Linia 16. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny liczbaProstokatow średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 17. wynik plus znak równości f otwórz nawias okrągły xPoczatek plus podstawaProstokata asterysk i zamknij nawias okrągły średnik. Linia 18. zamknij nawias klamrowy. Linia 20. wynik asterysk znak równości podstawaProstokata średnik. Linia 21. zamknij nawias klamrowy.

Zaokrąglimy, a następnie wypiszemy wynik stanowiący pole ograniczone wykresem funkcji f ( x ) w zadanym przedziale za pomocą metody prostokątów.

Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny. Linia 2. kratka include otwórz nawias ostrokątny cmath zamknij nawias ostrokątny. Linia 3. using namespace std średnik. Linia 5. double f otwórz nawias okrągły double x zamknij nawias okrągły otwórz nawias klamrowy. Linia 6. return x średnik. Linia 7. zamknij nawias klamrowy. Linia 9. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy. Linia 10. double xPoczatek znak równości 0 kropka 0 przecinek xKoniec znak równości 2 kropka 0 przecinek wynik znak równości 0 kropka 0 średnik. Linia 11. int liczbaProstokatow znak równości 2 średnik. Linia 13. double podstawaProstokata znak równości. Linia 14. otwórz nawias okrągły xKoniec minus xPoczatek zamknij nawias okrągły prawy ukośnik liczbaProstokatow średnik. Linia 16. for otwórz nawias okrągły int i znak równości 0 średnik i otwórz nawias ostrokątny liczbaProstokatow średnik i plus plus zamknij nawias okrągły otwórz nawias klamrowy. Linia 17. wynik plus znak równości f otwórz nawias okrągły xPoczatek plus podstawaProstokata asterysk i zamknij nawias okrągły średnik. Linia 18. zamknij nawias klamrowy. Linia 20. wynik asterysk znak równości podstawaProstokata średnik. Linia 21. wynik znak równości round otwórz nawias okrągły wynik asterysk 100 zamknij nawias okrągły prawy ukośnik 100 średnik. Linia 22. cout otwórz nawias ostrokątny otwórz nawias ostrokątny wynik otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik. Linia 24. return 0 średnik. Linia 25. zamknij nawias klamrowy.

Tak napisany program wyznaczy pole obszaru ograniczonego wykresem funkcji f ( x ) w zadanym przedziale, czyli w przypadku tego przykładu wartość 1.

Słownik

metoda prostokątów
metoda prostokątów

metoda szacowania wartości całki za pomocą sumy pól prostokątów, będących przybliżeniem obszaru ograniczonego wykresem funkcji i osią OX

metoda trapezów
metoda trapezów

metoda szacowania wartości całki za pomocą sumy pól trapezów, będących przybliżeniem obszaru ograniczonego wykresem funkcji i osią OX