Anda di halaman 1dari 3

CURVE FITTING and INTERPOLATIONS

Curve Fitting Digunakan untuk memperhalus suatu grafik dan dapat digunakan juga untuk menentukan suatu nilai pada suatu titik. Andaikan kita memiliki data X dan Y sebagai berikut : >> x = [0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1]; >> y = [-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2]; >> plot(x,y,-o) Maka kita memperoleh suatu grafik X Y yang terpatah-patah. Jika kita ingin memperhalus grafik tersebut, kita perlu mencari sutu persamaan garis yang sesuai dengan grafik tersebut. Untuk menentukan persamaan garis tersebut dapat dilakukan dengan menggunakan perintah POLYFIT (x,y,n) , n menunjukkan derajat / orde dari persamaan tersebut. Jika n=1 maka kita mendapatkan koefisien dari suatu persamaan regresi linier (y = a + bx). Jika kita pilih n=2, kita akan mendapatkan koefisien2 persamaan polynomial kuadratik (y = ax2 + bx + c). >> n = 2; p = polyfit(x,y,n) Selanjutnya rentang nilai x dari 0 1 kita bagi menjadi 100 bagian yang sama, kemudian kita tentukan nilai y pada setiap titik x yang baru dengan menggunakan persamaan polynomial yang sudah kita peroleh. Supaya tidak berbenturan dengan nilai x maupun y yang lama, notasi kita ganti dengan xi dan yi. Nilai yi dapat diperoleh dengan menggunakan perintah POLYVAL(P,XI) >> xi = linspace(0,1,100); >> yi = polyval(p,xi); >> figure,plot(x,y,-o,xi,yi, :) Bandingkan hasilnya dengan orde 10 >> pp = polyfit(x,y,10) ; >> z = polyval(pp,xi); >> figure, plot(x,y,o,xi,z,: ) One Dimensional Interpolation Interpolasiadalah suatu cara untuk mendapatkan suatu nilai pada suatu titik yang berada di antara dua buah titik yang nilainya sudah diketahui. DalamMATLAB dikenal beberapa cara untuk mencari nilai y pada suatu titik x tertentu yaitu : yi = interp1(x,y,xi) interpolasi linier yi = interp1(x,y,xi,linier) interpolasi linier yi = interp1(x,y,xi,cubic) interpolasi cubic yi = interp1(x,y,xi,spline) interpolasi spline yi = interp1(x,y,xi,nearest) interpolasi titik-titik terdekat interp1, interp2, , interpn menunjukkan derajat interpolasi satu, dua, , n dimensi. >> x1 = linspace(0 , 2*pi, 60); >> x2 = linspace(0 , 2*pi, 6) ; >> figure, plot(x1 , sin(x1) ) >> figure, plot(x2 , sin(x2) , ) >> figure, plot(x1 , sin(x1), x2 , sin(x2) , ) ), grid on >> xlabel(x), ylabel(Sin(x)) , title(Linear Interpolation)

Interpolasi juga dapat digunakan untuk data/grafik yang tidak linier, misalkan data semilog. Anggaplah kita memiliki data frekuensi bunyi dalam Herzt dan tingkat tekanan bunyi dalam dB (dimana kedua data ini berhubungan secara logaritmis) sebagai berikut: >> Hz = [ 20:10:100 200:100:1000 1500 2000:1000:10000]; % frequencies in Herzt >>spl = [76 66 59 54 49 46 43 40 38 22 14 9 6 3.5 2.5 1.4 0.7 0 -1 -3 -8 -7 -2 2 7 9 11 12 ]; >> % Sound pressure level in dB >> semilogx(Hz,spl,-o) >> xlabel(Frequency, Hz) >> ylabel(Relative Sound Pressure Level, dB) >> title(Threshold of Human Hearing) >> grid on >> s = interp1(Hz,spl,2.5e3) >> s = interp1(Hz,spl,2.5e3,linear) >> s = interp1(Hz,spl,2.5e3,spline) >> s = interp1(Hz,spl,2.5e3,cubic) >> s = interp1(Hz,spl,2.5e3,nearest) Two-Dimensional Interpolation Sama halnya dengan interpolasi satu dimensi, pada interpolasi 2-D kita juga perlu memperhalus data yang kita miliki. Selanjutnya, digunakan perintah <<interp2>>. Andaikan kita memiliki data z sebagai fungsi x dan y , z = f(x,y) misalnya pada pengukuran dengan sonar tentang kedalaman dasar laut, sebagai berikut : % Ocean Depth Data M-File ocean.m x = 0:.5:4; % x-axis (varies across the row of z) y = 0:.5:6; % y-axis (varies down the columns of z) z = [ 100 99 100 99 100 99 99 100 99 99 99 100 99 100 99 99 98 98 100 99 100 100 98 997 97 99 100 100 101 100 98 98 100 102 103 102 103 101 100 102 106 104 99 102 100 100 103 108 106 97 99 100 100 102 105 103 100 102 103 101 102 103 102 100 102 103 102 101 101 100 100 100 101 101 100 100 100 100 100 100 100 100 99 99 100 100 100 99 99 100 99 mesh(x,y,z) ylabel(Y-axis, Km) xlabel(X-axis, Km) zlabel(Ocean Depth, m)

99 100; 99 99 ; 100 100; 100 99 ; 100 100; 101 100; 101 99; 101 100; 100 99; 99 99; 99 99; 99 99; 100 99 ]; title(Ocean Depth Measurements)

Untuk menentukan kedalaman laut pada suatu titik xi,yi dapat dilakukan seperti pada interpolasi 1D. Misalkan kita ingin mengetahui kedalaman laut pada posisi x = 2.2 dan pada posisi y = 3.3 >> ocean >> zi = interp2(x,y,z,2.2,3.3) >> zi = interp2(x,y,z,2.2,3.3,linear) >> zi = interp2(x,y,z,2.2,3.3,cubic) >> zi = interp2(x,y,z,2.2,3.3,spline) >> zi = interp2(x,y,z,2.2,3.3,nearest) Untuk memperhalus grafik, maka rentang X dan rentang Y kita bagi menjadi bagian-bagian yang lebih kecil, kemudian menentukan nilai z yang berkaitan dengan nilai x dan y yang baru. >> xi = linspace(0,4,30) ; >> yi = linspace(0,6,40) ; >> [xxi,yyi] = meshgrid(xi,yi) ; >> zzi = interp2(x,y,z,xxi,yyi,cubic); >> mesh(xxi,yyi,zzi) >> hold on >> [xx,yy] = meshgrid(x,y); >> plot3 (xx,yy,z+0.1,ok) nodos >> hold off >> zmax = max(max(zzi)) >> [i,j] = find(zmax == zzi) >> xmzx = xi(j) >> ymax = yi(i) >> xi(20) >> yi(20) % finer x-axis % finer y-axis % grid of all combinations of xi and yi % interpolate % plot smoothed data % grid original data % plot original data up a bit to show

Bandingkan hasilnya jika pada saat mesh(x,y,z) diganti dengan mesh(x,y,-z), dan seterusnya digunakan nilai negative ( - ) pada z .

Anda mungkin juga menyukai