Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Autor artykułu: mgr Jerzy Wałaszek

©2026 mgr Jerzy Wałaszek

obrazek

Całkowanie

Metoda trapezów

SPIS TREŚCI REMANENT
Podrozdziały
 

Algorytm

Metoda trapezów (ang. trapezoidal rule) jest ulepszeniem opisanej poprzednio metody prostokątów. Podstawową różnicą jest zastąpienie prostokątów trapezami.

Trapezy lepiej odwzorowują powierzchnię pod wykresem funkcji, przez to wyniki są dokładniejsze. Zasada jest następująca:

Przedział całkowania \({[x_p;x_k]}\) dzielimy na \(n\) równych segmentów o długości \(h\). Długość segmentu liczymy prostym wzorem:

\[
h = \frac{x_k - x_p}{n}
\]

Mając długość \(h\), wyliczamy punkty \(x_i\), które leżą na początkach i końcach kolejnych segmentów. Punktów tych jest \({n+1}\) (dlaczego?). Segmenty ponumerujemy od \(s_1\) do \(s_n\). Punkty ponumerujemy od \(x_0\) do \(x_n\):

\[
x_i = x_p + i \cdot h; \; i = 0,1,\dots n
\]
\(
\begin{aligned}
&{s_1}:[{x_0};{x_1}] \\
&{s_2}:[{x_1};{x_2}] \\
&\dots \\
&{s_i}:[{x_{i - 1}};{x_i}] \\
&\dots \\
&{s_n}:[{x_{n - 1}};{x_n}]
\end{aligned}
\)

Obliczamy wartość funkcji \(f(x)\) w każdym punkcie \(x_i\):

\[
y_i = f(x_i), \; \text{dla} \; i = 0,1,2,\dots,n
\]

Pole pod wykresem funkcji przybliżamy sumą pól \(n\) trapezów. Pole \({i{-}\text{tego}}\) trapezu obliczamy wg wzoru:

\[
P_i = \frac{y_{i-1} + y_i}{2} \cdot h, \;  i = 1,2,\dots,n
\]

Przybliżona wartość całki jest sumą pól wszystkich otrzymanych w ten sposób trapezów:

\[
S = P_1 + P_2 + \dots + P_n
\]

czyli

\[
\begin{aligned}
s &= \frac{y_0 + y_1}{2} \cdot h + \frac{y_1 + y_2}{2} \cdot h + \frac{y_2 + y_3}{2} \cdot h + \dots + \frac{y_{n-2} + y_{n-1}}{2} \cdot h + \frac{y_{n-1} + y_n}{2} \cdot h \\
s &= \frac{h}{2} \cdot (y_0 + y_1 + y_1 + y_2 + y_2 + y_3 + \dots + y_{n-2} + y_{n-1} + y_{n-1} + y_n) \\
s &= \frac{h}{2} \cdot (y_0 + 2y_1 + 2y_2 + \dots + 2y_{n-1} + y_n) \\
s &= h \cdot \left(y_1 + y_2 + \dots + y_{n-1} + \frac{y_0 + y_n}{2}\right)
\end{aligned}
\]

Wyprowadzony na końcu wzór jest podstawą przybliżonego wyliczania całki w metodzie trapezów.

\(
\int\limits_{x_p}^{x_k} f(x) \, dx \approx h \cdot \left( \sum\limits_{i=1}^{n-1} f(x_p + i \cdot h) + \dfrac{f(x_p) + f(x_k)}{2} \right)
\)

do podrozdziału  do strony 

Przykładowa implementacja

Program liczy całkę oznaczoną:

\[
\int\limits_0^{\pi} \left(\sin(x) + cos(x)\right) \, dx
\]

Całka ta ma wartość dokładną (analityczną) 2. Program liczy całkę dla 100 trapezów (101 punktów) metodą trapezów następnie wyświetla wynik. Wyjaśnienia są w komentarzach

C++
// Całkowanie metodą trapezów
// (C)2026 mgr Jerzy Wałaszek
// Metody numeryczne 0082
//---------------------------

#define _USE_MATH_DEFINES
#include <iostream>
#include <windows.h>
#include <iomanip>
#include <cmath>

using namespace std;

// Definicje stałych
//------------------

// Liczba trapezów
const int N = 100;
// Przedział całkowania
const double Xp = 0;
const double Xk = M_PI;
// Wysokość trapezów
const double H = (Xk - Xp) / N;

// Całkowana funkcja
double f(double x)
{
  return sin(x) + cos(x);
}

// Metoda trapezów
double t_r()
{
  int i;
  double s;

  // Wartość całki
  s = (f(Xp) + f(Xk)) / 2;
  for(i = 1; i < N; i++)
    s += f(Xp + i * H);
  s *= H;
  return s;
}

// Program główny
//---------------
int main()
{
  SetConsoleOutputCP(CP_UTF8);
  SetConsoleCP(CP_UTF8);

  cout << setprecision(5)
       << fixed;

  cout
  << "Obliczanie całki oznaczonej "
     "metodą trapezów\n\n"
  << "wynik : " << setw(7)
  << t_r() << endl << endl;

  system("pause");
  return 0;
}
Wynik:
Obliczanie całki oznaczonej metodą trapezów

wynik : 1.99984
Python (dodatek)
# Całkowanie metodą trapezów
# (C)2026 mgr Jerzy Wałaszek
# Metody numeryczne 0082
#---------------------------

from math import sin, cos, pi

# Definicje stałych
#------------------

# Liczba trapezów
n = 100
# Przedział całkowania
xp = 0
xk = pi
# Wysokość trapezów
h = (xk - xp) / n

# Całkowana funkcja
def f(x):
    return sin(x) + cos(x)

# Metoda trapezów
def t_r():
    # Wartość całki
    s = (f(xp) + f(xk)) / 2
    for i in range(1,n):
        s += f(xp + i * h)
    s *= h
    return s

# Program główny
#---------------
print(f"Obliczanie całki oznaczonej "
      f"metodą trapezów\n\n"
      f"wynik : {t_r():7.5f}\n")

input("Naciśnij Enter ...")

do podrozdziału  do strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2026 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.