Interpolasi

Mengisi nilai antar titik data dengan interp1 dan penyesuaian spline.

Daftar isi

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 xx di antara x1x_1 dan x2x_2 dihitung menurut

y=y1+(x−x1) y2−y1x2−x1 y = y_1 + (x - x_1)\,\frac{y_2 - y_1}{x_2 - x_1}

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.

matlab Tiga metode pada titik tanya yang sama
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
text Keluaran
   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.60

Perbandingan pada lima titik yang sama dirangkum pada tabel berikut.

Menitnearestlinearspline
1224.8025.0225.02
2425.9026.1426.25
3626.1026.2626.34
4825.4025.5425.55
6024.6024.6024.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.

matlab Titik tanya di luar rentang pengukuran
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'))
text Keluaran
linear tanpa izin ekstrapolasi:
    NA    NA
linear dengan 'extrap':
   23.600   24.200
spline dengan 'extrap':
   23.958   24.158

Ekstrapolasi 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.

matlab suhu_spline.m
% 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.

GnuplotProduced by GNUPLOT 6.0 patchlevel 22424.52525.52626.5270102030405060data pengukurandata pengukurankurva splinekurva splinesuhu (derajat Celsius)waktu (menit)Data suhu tiap 10 menit dan kurva spline
Data suhu tiap 10 menit sebagai penanda dan kurva spline yang melintasinya

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 xi terhadap min(x) dan max(x) sebelum memanggil interp1.
  • 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. interp1 menuntut semua nilai x berbeda, 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 posisi xi dari data pengukuran x dan y, dengan seluruh metode diwajibkan melewati titik data.
  • Metode nearest berundak, linear mengikuti ruas garis, dan spline melengkung 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 linspace lalu 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 spline pada interp1.
  • pchip — MathWorks — Rujukan interpolasi yang menjaga bentuk lokal sebagai alternatif spline.