Pengukuran selalu menghasilkan titik-titik diskret, sedangkan analisis sering membutuhkan nilai pada waktu yang berada di antara titik-titik itu. Topik ini membahas fungsi interp1 sebagai alat baku pengisian nilai antar titik serta perbandingan metode nearest, linear, dan spline pada titik tanya yang sama. Jebakan nilai di luar rentang data dan pembuatan kurva halus dari data pengukuran suhu yang tersimpan sebagai figur turut dibahas. Setelah membaca topik ini, nilai antar titik pada kisi yang jauh lebih rapat tetap dapat diisi dari data yang tersampel jarang.
Mengisi nilai antar titik dengan interp1#
Pemanggilan dasar berbentuk interp1(x, y, xi, metode), dengan x daftar posisi pengukuran, y nilai terukur pada posisi tersebut, xi posisi yang ingin diketahui nilainya, dan metode nama alat pengisian antar titik. Data x harus berisi titik yang berbeda semua, dan y harus berpanjang sama dengan x. Metode yang paling sederhana adalah 'linear' yang menghubungkan dua titik tetangga dengan ruas garis lurus, sehingga nilai pada posisi di antara dan dihitung menurut
Contoh datanya adalah catatan suhu sebuah ruang ukur yang tersampel tiap 10 menit. Sebuah pencatat kedua bekerja tiap 12 menit, sehingga nilainya perlu diisi pada menit 12, 24, 36, 48, dan 60 agar kedua catatan dapat dibandingkan pada kisi yang sama. Blok berikut menjalankan ketiga metode pada kelima titik tanya itu sekaligus.
waktu = 0:10:60; % menit
suhu = [24.0 24.8 25.9 26.5 26.1 25.4 24.6];
titik = 12:12:60; % menit, pencatat kedua tiap 12 menit
metode = {'nearest', 'linear', 'spline'};
hasil = zeros(numel(titik), numel(metode));
for m = 1:numel(metode)
hasil(:, m) = interp1(waktu, suhu, titik, metode{m});
end
fprintf(' t nearest linear spline\n');
for k = 1:numel(titik)
fprintf('%4d %9.2f %8.2f %8.2f\n', titik(k), hasil(k, :));
end t nearest linear spline
12 24.80 25.02 25.02
24 25.90 26.14 26.25
36 26.10 26.26 26.34
48 25.40 25.54 25.55
60 24.60 24.60 24.60Perbandingan pada lima titik yang sama dirangkum pada tabel berikut.
| Menit | nearest | linear | spline |
|---|---|---|---|
| 12 | 24.80 | 25.02 | 25.02 |
| 24 | 25.90 | 26.14 | 26.25 |
| 36 | 26.10 | 26.26 | 26.34 |
| 48 | 25.40 | 25.54 | 25.55 |
| 60 | 24.60 | 24.60 | 24.60 |
Ketiga metode bersepakat pada titik pengukuran asli, yaitu menit 60, karena setiap metode diwajibkan melewati seluruh titik data. Perbedaannya muncul di antara titik. Metode nearest memilih nilai tetangga terdekat sehingga hasilnya berundak, linear mengambil rata-rata terbobot dua tetangga sehingga hasilnya ruas garis, sedangkan spline memasang polinomial kubik yang licin antar ruas sehingga hasilnya melengkung.
Pada menit 24, misalnya, nearest memberi 25.90 karena titik terdekatnya menit 20, sedangkan linear memberi 26.14 sebagai rata-rata terbobot dari 25.90 dan 26.50. Metode spline memberi 26.25 karena kurvanya menimbang kemiringan di kedua sisi. Selisih antar metode pada orde sepersepuluh derajat ini adalah rentang ketidakpastian akibat pilihan metode, dan memilihnya menjadi bagian dari keputusan analisis.
Nilai di luar rentang data#
Interpolasi hanya memiliki dasar informasi di antara titik data, dan posisi di luar rentang x memasuki wilayah ekstrapolasi. Perilaku bawaan interp1 mengembalikan nilai kosong untuk posisi semacam itu, dan nilai kosong ini ditampilkan sebagai NA oleh Octave serta NaN oleh MATLAB. Izin ekstrapolasi diberikan secara eksplisit dengan argumen 'extrap', dan saat itu metode linear meneruskan kemiringan ruas terakhir ke luar rentang.
waktu = 0:10:60;
suhu = [24.0 24.8 25.9 26.5 26.1 25.4 24.6];
luar = [-5 65]; % di luar rentang 0 sampai 60
disp('linear tanpa izin ekstrapolasi:')
disp(interp1(waktu, suhu, luar, 'linear'))
disp("linear dengan 'extrap':")
disp(interp1(waktu, suhu, luar, 'linear', 'extrap'))
disp("spline dengan 'extrap':")
disp(interp1(waktu, suhu, luar, 'spline', 'extrap'))linear tanpa izin ekstrapolasi:
NA NA
linear dengan 'extrap':
23.600 24.200
spline dengan 'extrap':
23.958 24.158Ekstrapolasi linear pada menit -5 dan 65 menghasilkan 23.6 dan 24.2 karena kemiringan ruas terdekat diteruskan keluar, sedangkan spline menghasilkan 23.958 dan 24.158 karena kurva kubik meneruskan kelengkungannya. Kedua hasil ekstrapolasi lahir dari asumsi bentuk, bukan dari pengukuran, sehingga maknanya jauh lebih lemah daripada nilai di dalam rentang. Nilai kosong yang muncul tanpa izin ekstrapolasi sebenarnya berfungsi sebagai penjaga, karena perhitungan lanjutan yang memuat nilai kosong akan menularkan kekosongannya dan menandai tempat yang perlu diperiksa.
Menggambar kurva di antara data#
Kurva yang melintasi data dengan licin dibuat dengan menanyakan nilai pada kisi yang jauh lebih rapat daripada data aslinya, lalu menggambar hasilnya sebagai garis dengan data asli sebagai penanda. Skrip berikut menggunakan linspace untuk membuat 200 titik tanya antara menit 0 dan 60, mengisi nilainya dengan spline, dan menyimpan figurnya sebagai berkas SVG vektor.
% suhu_spline.m: menggambar data suhu beserta kurva spline di antara titiknya
waktu = 0:10:60; % menit
suhu = [24.0 24.8 25.9 26.5 26.1 25.4 24.6];
halus = linspace(0, 60, 200); % kisi rapat untuk kurva
plot(waktu, suhu, 'bo', ...
halus, interp1(waktu, suhu, halus, 'spline'), 'b-');
xlabel('waktu (menit)');
ylabel('suhu (derajat Celsius)');
title('Data suhu tiap 10 menit dan kurva spline');
legend('data pengukuran', 'kurva spline', 'location', 'southeast');
print('-dsvg', 'suhu-spline.svg');Kurva spline beserta tujuh penanda datanya hasil skrip itu tampak pada figur berikut.
Figur tersebut memperlihatkan sifat spline yang tidak tampak pada tabel, yaitu kurva melengkung licin di sekitar puncak menit 30 sampai 40 tanpa sudut tajam pada titik data. Kepadatan kisi 200 titik membuat lengkungan itu tergambar utuh, sedangkan penanda lingkaran menegaskan posisi tujuh pengukuran asal yang menjadi satu-satunya sumber informasi. Kombinasi penanda dan kurva seperti ini menjadi konvensi baku pada figur data terinterpolasi karena pembaca langsung membedakan mana yang terukur dan mana yang diisi oleh metode.
Kesalahan umum#
- Menanyakan nilai di luar rentang tanpa sengaja. Nilai kosong yang dikembalikan ikut ke perhitungan lanjutan dan menularkan kekosongannya diam-diam, misalnya rerata seluruh kolom menjadi kosong karena satu sel di luar rentang. Periksa rentang
xiterhadapmin(x)danmax(x)sebelum memanggilinterp1. - Menggunakan spline untuk data yang tidak boleh melampaui batas. Kurva kubik dapat melengkung melewati nilai data tetangganya, misalnya menembus di atas puncak lokal atau di bawah nol pada data tak negatif. Metode
'pchip'menjaga bentuk monotonik lokal dan menjadi pilihan yang lebih aman untuk data semacam itu. - Menyimpan data dengan titik x yang sama.
interp1menuntut semua nilaixberbeda, karena dua nilai terukur pada posisi yang sama tidak dapat membentuk fungsi bernilai tunggal. Data duplikat harus dirata-ratakan atau dibuang salah satunya sebelum interpolasi dijalankan.
Ringkasan#
interp1(x, y, xi, metode)mengisi nilai pada posisixidari data pengukuranxdany, dengan seluruh metode diwajibkan melewati titik data.- Metode
nearestberundak,linearmengikuti ruas garis, dansplinemelengkung licin, sehingga selisih antar metode mengukur ketidakpastian akibat pilihan metode. - Titik di luar rentang data menghasilkan nilai kosong secara bawaan, dan ekstrapolasi hanya dijalankan dengan izin eksplisit
'extrap'karena hasilnya lahir dari asumsi bentuk. - Kurva halus digambar dengan menanyakan kisi rapat
linspacelalu memplotnya bersama data asli sebagai penanda.
Referensi#
- interp1 — MathWorks — Rujukan resmi interpolasi satu dimensi lengkap dengan daftar metode dan perilaku titik di luar rentang.
- spline — MathWorks
— Rujukan interpolasi spline kubik yang menjadi dasar metode
splinepadainterp1. - pchip — MathWorks — Rujukan interpolasi yang menjaga bentuk lokal sebagai alternatif spline.