Całkowanie numeryczne - metoda trapezów

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 13771 razy

Na stronie Programowanie → Algorytmy obliczeniowe → Całkowanie numeryczne - metoda prostokątów opisana została metoda numeryczna obliczania całki oznaczonej pewnej funkcji f(x) w przedziale od a do b metodą prostokątów. Omawiana tam metoda ma pewną wadę polegającą na dość sporej rozbieżności obliczeniowej przy zastosowaniu małej liczby przedziałów. Całkowanie numeryczne metodą trapezów umożliwia zmniejszenie niedokładności obliczeniowej albowiem w tym przypadku dla elementarnego przedziału oblicza się pole powierzchni trapezu o wysokości Delta x = h = {{b-a}/{i}} oraz długości podstaw f(xi) i f(xi + h) gdzie i - jest liczbą przedziałów.

Ilustracja pokazująca zasadę całkowania numerycznego
Rys. 1
Całkowanie numeryczne metodą trapezów

W językach programowanie takich jak C++ do wykorzystania tego algorytmu konieczne jest zaimplementowanie algorytmu ONP, który powstał jako modyfikacja algorytmu notacji polskiej Jana Łukasiewicza. W przypadku języków skryptowych takich jak PHP czy Python można posłużyć się funkcją eval, której użycie ze względów bezpieczeństwa jest niewskazane.

Oto przykład prostego programu obliczającego tą metodą całkę podanej na wejście funkcji napisany w Pythonie:

#!/usr/bin/env python def integrate(function, a, b, i): dx = (b - a) / i integr = 0 for x in range(i): x = x * dx + a fx1 = eval(function) x += dx fx2 = eval(function) integr += 0.5 * dx * (fx1 + fx2) return integr def main(args): function = input("Funkcja: ") a = float(input("Początek przedziału: ")) b = float(input("Koniec przedziału: ")) i = int(input("Liczba podprzedziałów: ")) print("Całka z funkcji {funkcjon} po przedziale od {a} do {b} = {integrate}".format(funkcjon = function, a = a, b = b, integrate = integrate(function, a, b, i))) return 0 if __name__ == '__main__': import sys sys.exit(main(sys.argv))

Przykład działania dla f(x) = x2, a = 0, b = 1, oraz i = 10:

Funkcja: x**2
Początek przedziału: 0
Koniec przedziału: 1
Liczba podprzedziałów: 10
Całka z funkcji x**2 po przedziale od 0.0 do 1.0 = 0.3350000000000001
Aby kontynuować, naciśnij dowolny klawisz . . .

Jak widać jest to całkiem przyzwoity wynik, tym bardziej, że całkowanie numeryczne metodą prostokątów dawało następujące rezultaty przy takich samych parametrach:

Funkcja: x**2
Początek przedziału: 0
Koniec przedziału: 1
Liczba podprzedziałów: 10
Całka z funkcji x**2 po przedziale od 0.0 do 1.0 = 0.2850000000000001
Aby kontynuować, naciśnij dowolny klawisz . . .
Propozycje książek
tytuł: Algorytmy. Ilustrowany przewodnik autor: Aditya Bhargava

Tytuł:

Algorytmy. Ilustrowany przewodnik

Autor:

Aditya Bhargava

tytuł: Algorytmy. Struktury danych i złożoność obliczeniowa autor: Feliks Kurp

Tytuł:

Algorytmy. Struktury danych i złożoność obliczeniowa

Autor:

Feliks Kurp

tytuł: Algorytmy w Pythonie. Techniki programowania dla praktyków autor: Piotr Wróblewski

Tytuł:

Algorytmy w Pythonie. Techniki programowania dla praktyków

Autor:

Piotr Wróblewski

tytuł: Matematyka dyskretna dla praktyków. Algorytmy i uczenie maszynowe w Pythonie autor: Ryan T. White, Archana Tikayat Ray

Tytuł:

Matematyka dyskretna dla praktyków. Algorytmy i uczenie maszynowe w Pythonie

Autor:

Ryan T. White, Archana Tikayat Ray

tytuł: Algorytmy kryptograficzne w Pythonie. Wprowadzenie autor: Shannon W. Bray

Tytuł:

Algorytmy kryptograficzne w Pythonie. Wprowadzenie

Autor:

Shannon W. Bray

tytuł: Algorytmy sztucznej inteligencji. Ilustrowany przewodnik autor: Rishal Hurbans

Tytuł:

Algorytmy sztucznej inteligencji. Ilustrowany przewodnik

Autor:

Rishal Hurbans

tytuł: Algorytmy bez tajemnic  autor: Thomas H. Cormen

Tytuł:

Algorytmy bez tajemnic

Autor:

Thomas H. Cormen

tytuł: Algorytmy dla bystrzaków autor: John Paul Mueller, Luca Massaron

Tytuł:

Algorytmy dla bystrzaków

Autor:

John Paul Mueller, Luca Massaron

tytuł: Algorytmy Data Science. Siedmiodniowy przewodnik. Wydanie II autor: David Natingga

Tytuł:

Algorytmy Data Science. Siedmiodniowy przewodnik. Wydanie II

Autor:

David Natingga

tytuł: Algorytmy uczenia maszynowego. Zaawansowane techniki implementacji autor: Giuseppe Bonaccorso

Tytuł:

Algorytmy uczenia maszynowego. Zaawansowane techniki implementacji

Autor:

Giuseppe Bonaccorso

W związku z tym, że firma Helion nie wywiązuje się z swoich zobowiązań naliczania prowizji za każdą zakupioną książkę a kontakt z ową frmą jest nie możliwy autor strony zmuszony został do zablokowania linkowania książek. Za wszelkie niedogodności z tym związane z góry przepraszam i obiecuję włączenie linkowania gdy tylko sprawa zostanie wyjaśniona