Integral definit menghitung luas di bawah kurva — total jarak dari kecepatan, total energi dari daya, probabilitas total dari rapatan. Masalahnya, banyak fungsi penting tidak punya antiderivatif bentuk tertutup, dan data eksperimen bahkan bukan fungsi sama sekali, hanya tabel nilai. Di situ integrasi numerik mengambil alih: potong area menjadi panel-panel kecil, hampiri tiap panel dengan bentuk sederhana, lalu jumlahkan. Chapter ini membangun Riemann sum dan trapezoid secara manual, mencocokkannya dengan trapz() dan cumtrapz(), lalu memakai quad() adaptif — semuanya divalidasi pada integral sin(x) dari 0 ke pi yang nilai eksaknya kita tahu: 2.

Masalah Integral Definit #

Aturannya: integral dari a ke b dibagi menjadi N panel selebar dx = (b-a)/N. Semakin sempit panelnya, semakin dekat jumlah panel ke luas sebenarnya. Mekanisme di balik layar menentukan kualitas metode: bagaimana tiap panel dihampiri — persegi (Riemann) atau trapesium (trapezoid) — menentukan seberapa cepat galat mengecil saat N membesar. Kasus uji kita: sin(x) pada [0, pi] dengan nilai eksak 2, sehingga galat tiap metode terlihat telanjang.

Riemann Sum Manual #

Riemann sum menjumlahkan luas persegi: tinggi fungsi dikali lebar panel. Tingginya bisa diambil di ujung kiri panel atau di titik tengahnya:

matlab
N = 10;
dx = pi / N;
xKiri = 0 : dx : pi - dx;              % ujung kiri setiap panel
xTengah = dx/2 : dx : pi - dx/2;       % titik tengah setiap panel
I_kiri = sum(sin(xKiri)) * dx;
I_tengah = sum(sin(xTengah)) * dx;
fprintf('riemann kiri   = %.6f, galat = %.2e\n', I_kiri, abs(I_kiri - 2));
fprintf('riemann tengah = %.6f, galat = %.2e\n', I_tengah, abs(I_tengah - 2));

Output yang Dihasilkan:

text
riemann kiri   = 1.983524, galat = 1.65e-02
riemann tengah = 2.008248, galat = 8.25e-03

Mari kita bedah baris-baris kode di atas:

  1. Baris 1-2 (N, dx): sepuluh panel selebar pi/10 ≈ 0.314 — sengaja kasar supaya galat mudah diamati.
  2. Baris 3 (xKiri): vektor titik ujung kiri 0, dx, 2*dx, ..., pi-dx — jumlahnya tepat N karena titik terakhir pi dibuang.
  3. Baris 4 (xTengah): titik tengah panel dx/2, 3dx/2, ... — aturan midpoint.
  4. Baris 5-6 (sum(...) * dx): seluruh tinggi dijumlahkan sekali lalu dikalikan lebar panel — pola vektorisasi klasik tanpa loop.
  5. Baris 7-8 (fprintf): kiri memberi 1.983524 (kurang) dan tengah 2.008248 (lebih); keduanya galat sekitar 1e-2 dengan tanda berlawanan.

Trapezoid: Manual vs trapz #

Trapezoid menggambar tiap panel sebagai trapesium: rata-rata tinggi kedua ujung dikali lebar. Rumus penjumlahannya: dx * (y(1)/2 + y(2) + ... + y(N) + y(N+1)/2) — ujung-ujung dihitung setengah karena masing-masing dipakai dua panel:

matlab
x = linspace(0, pi, N+1);
y = sin(x);
I_manual = dx * (y(1)/2 + sum(y(2:N)) + y(N+1)/2);
fprintf('trapezoid manual = %.8f\n', I_manual);
fprintf('trapz builtin    = %.8f\n', trapz(x, y));

Output yang Dihasilkan:

text
trapezoid manual = 1.98352354
trapz builtin    = 1.98352354

Mari kita bedah baris-baris kode di atas:

  1. Baris 1-2 (linspace, y): grid N+1 titik (0 sampai pi) beserta nilai fungsinya — N panel selalu punya N+1 titik.
  2. Baris 3 (I_manual): ujung pertama dan terakhir dibobot setengah, titik interior penuh — rumus trapezoid komposit standar.
  3. Baris 4-5 (trapz(x, y)): fungsi bawaan menghitung rumus yang sama (plus dukungan grid tak berjarak sama, cukup berikan vektor x berapa pun) dan hasilnya identik digit demi digit.

Kadang kita butuh integral kumulatif — “sudah berapa luas yang terkumpul sampai titik ini?” — bukan satu angka total. Fungsi cumtrapz() menjalankan trapezoid secara berjalan:

matlab
xc = 0 : pi/4 : pi;
c = cumtrapz(xc, sin(xc));
fprintf('cumtrapz = ');
fprintf('%.4f ', c);
fprintf('\n');

Output yang Dihasilkan:

text
cumtrapz = 0.0000 0.2777 0.9481 1.6184 1.8961 

Vektor keluaran c berukuran sama dengan input: c(3) = 0.9481 berarti luas sin dari 0 sampai pi/2 sudah terkumpul, dan c(5) = 1.8961 adalah hampiran total pada grid lima titik yang kasar. Pola seperti ini dipakai untuk energi kumulatif atau jarak tempuh bertahap.

quad dan integral: Kuadratur Adaptif #

Riemann dan trapezoid membagi panel rata di mana-mana. quad() bekerja lebih cerdas: metode Simpson adaptif yang otomatis memperhalus wilayah kurva yang bengkok dan membiarkan wilayah datar tetap kasar, sampai toleransi (default 1e-6) terpenuhi. Di MATLAB modern, quad berstatus not recommended — penerus resminya integral(), dengan toleransi default yang lebih ketat:

matlab
I_quad = quad(@(x) sin(x), 0, pi);
fprintf('quad = %.6f\n', I_quad);
I_integral = integral(@(x) sin(x), 0, pi);
fprintf('integral = %.10f\n', I_integral);

Output yang Dihasilkan:

text
quad = 2.000000
integral = 2.0000000000

Mari kita bedah baris-baris kode di atas:

  1. Baris 1-2 (quad): fungsi handle + batas bawah + batas atas; Simpson adaptif mengembalikan 2.000000 — galat jauh di bawah toleransi 1e-6.
  2. Baris 3-4 (integral): antarmuka modern dengan panggilan yang sama persis; toleransi defaultnya lebih ketat sehingga hasilnya 2.0000000000 sampai sepuluh desimal.

Untuk integral ganda, MATLAB menyediakan integral2(). Bentuk panggilannya memperluas pola yang sama: batas x dulu, lalu batas y:

matlab
I2 = integral2(@(x,y) x.*exp(y), 0, 1, 0, 2);

Panggilan di atas mengintegralkan x.*exp(y) atas persegi [0,1] x [0,2] dan menghasilkan sekitar 3.1945 — fungsi handle-nya harus menerima dua input dan memakai operator element-wise .* supaya bisa dievaluasi pada grid titik.

Akurasi vs Jumlah Titik #

Pertanyaan praktis terakhir: berapa titik yang kita butuhkan? Tabel berikut menaikkan N sepuluh kali untuk trapezoid:

matlab
fprintf('%6s %12s %10s\n', 'N', 'trapz', 'galat');
for N = [10 100 1000]
    x = linspace(0, pi, N+1);
    It = trapz(x, sin(x));
    fprintf('%6d %12.6f %10.2e\n', N, It, abs(It - 2));
end

Output yang Dihasilkan:

text
     N        trapz      galat
    10     1.983524   1.65e-02
   100     1.999836   1.64e-04
  1000     1.999998   1.64e-06

Setiap kali N dikali 10 (panel sepuluh kali lebih sempit), galat membagi 100: 1.65e-02 -> 1.64e-04 -> 1.64e-06. Inilah konvergensi O(h^2) milik trapezoid pada fungsi halus — hukum yang sama dengan central difference di chapter turunan.

MetodeGalat umumKapan dipakai
Riemann (kiri/tengah)O(h) — kiri; tengah jauh lebih baikkonsep dasar, data sangat kasar
Trapezoid / trapzO(h^2)data titik grid, integrasi cepat
cumtrapzO(h^2) kumulatifluas berjalan, energi terkumpul
quad / integraldikendalikan toleransifungsi yang bisa dipanggil kapan pun

Berkas contoh.m pada bagian bawah halaman menjalankan Riemann, trapezoid manual, trapz, cumtrapz, quad, integral, dan tabel akurasi dalam satu script utuh.

Ringkasan #

Integrasi numerik memotong area menjadi panel: Riemann memakai persegi (ujung kiri atau tengah), trapezoid memakai trapesium dengan galat O(h^2) pada fungsi halus. Implementasi manual trapezoid cocok digit demi digit dengan trapz(x, y), dan cumtrapz menghasilkan integral berjalan. Kuadratur adaptif quad menghasilkan 2.000000 untuk kasus uji sin dari 0 ke pi, dan penerus modernnya integral mencapai 2.0000000000; integral2 memperluasnya ke integral ganda. Dengan menaikkan jumlah titik, galat trapezoid membagi 100 setiap N dikali 10 — kuantifikasi langsung dari O(h^2).