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:
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:
riemann kiri = 1.983524, galat = 1.65e-02
riemann tengah = 2.008248, galat = 8.25e-03Mari kita bedah baris-baris kode di atas:
- Baris 1-2 (
N,dx): sepuluh panel selebarpi/10 ≈ 0.314— sengaja kasar supaya galat mudah diamati. - Baris 3 (
xKiri): vektor titik ujung kiri0, dx, 2*dx, ..., pi-dx— jumlahnya tepatNkarena titik terakhirpidibuang. - Baris 4 (
xTengah): titik tengah paneldx/2, 3dx/2, ...— aturan midpoint. - Baris 5-6 (
sum(...) * dx): seluruh tinggi dijumlahkan sekali lalu dikalikan lebar panel — pola vektorisasi klasik tanpa loop. - Baris 7-8 (
fprintf): kiri memberi1.983524(kurang) dan tengah2.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:
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:
trapezoid manual = 1.98352354
trapz builtin = 1.98352354Mari kita bedah baris-baris kode di atas:
- Baris 1-2 (
linspace,y): gridN+1titik (0sampaipi) beserta nilai fungsinya —Npanel selalu punyaN+1titik. - Baris 3 (
I_manual): ujung pertama dan terakhir dibobot setengah, titik interior penuh — rumus trapezoid komposit standar. - Baris 4-5 (
trapz(x, y)): fungsi bawaan menghitung rumus yang sama (plus dukungan grid tak berjarak sama, cukup berikan vektorxberapa 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:
xc = 0 : pi/4 : pi;
c = cumtrapz(xc, sin(xc));
fprintf('cumtrapz = ');
fprintf('%.4f ', c);
fprintf('\n');Output yang Dihasilkan:
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:
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:
quad = 2.000000
integral = 2.0000000000Mari kita bedah baris-baris kode di atas:
- Baris 1-2 (
quad): fungsi handle + batas bawah + batas atas; Simpson adaptif mengembalikan2.000000— galat jauh di bawah toleransi1e-6. - Baris 3-4 (
integral): antarmuka modern dengan panggilan yang sama persis; toleransi defaultnya lebih ketat sehingga hasilnya2.0000000000sampai sepuluh desimal.
Untuk integral ganda, MATLAB menyediakan integral2(). Bentuk panggilannya memperluas pola yang sama: batas x dulu, lalu batas y:
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:
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));
endOutput yang Dihasilkan:
N trapz galat
10 1.983524 1.65e-02
100 1.999836 1.64e-04
1000 1.999998 1.64e-06Setiap 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.
| Metode | Galat umum | Kapan dipakai |
|---|---|---|
| Riemann (kiri/tengah) | O(h) — kiri; tengah jauh lebih baik | konsep dasar, data sangat kasar |
| Trapezoid / trapz | O(h^2) | data titik grid, integrasi cepat |
| cumtrapz | O(h^2) kumulatif | luas berjalan, energi terkumpul |
| quad / integral | dikendalikan toleransi | fungsi 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).