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 :

>> diary (‘Topik5_NIM_DDMMYYYY’)


>> 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 suatu 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) , ‘—‘)
Komputasi Fisika. P.Fisika FKIP UNEJ – Topik 5
>> 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:
% Sound Pressure Level Data M-File sound.m

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
figure, semilogx(Hz,spl,’-o’)
xlabel(‘Frequency, Hz’)
ylabel(‘Relative Sound Pressure Level, dB’)
title(‘Threshold of Human Hearing’)
grid on
Simpan m-file anda dengan nama sound

>> sound
>> 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 99 100;
100 99 99 99 100 99 100 99 99 ;
99 99 98 98 100 99 100 100 100;
100 98 97 97 99 100 100 100 99 ;
101 100 98 98 100 102 103 100 100;
102 103 101 100 102 106 104 101 100;
99 102 100 100 103 108 106 101 99;
97 99 100 100 102 105 103 101 100;
100 102 103 101 102 103 102 100 99;
100 102 103 102 101 101 100 99 99;
100 100 101 101 100 100 100 99 99;
100 100 100 100 100 99 99 99 99;
100 100 100 99 99 100 99 100 99 ];
Komputasi Fisika. P.Fisika FKIP UNEJ –ylabel(‘Y-axis,
mesh(x,y,z) Topik 5 Km’) title(‘Ocean Depth Measurements’)
xlabel(‘X-axis, Km’) zlabel(‘Ocean Depth, m’)
Simpan m-file anda dengan nama ocean

>> ocean

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

>> 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) ; % finer x-axis


>> yi = linspace(0,6,40) ; % finer y-axis
>> [xxi,yyi] = meshgrid(xi,yi) ; % grid of all combinations of xi and yi
>> zzi = interp2(x,y,z,xxi,yyi,’cubic’); % interpolate
>> mesh(xxi,yyi,zzi) % plot smoothed data
>> hold on
>> [xx,yy] = meshgrid(x,y); % grid original data
>> plot3 (xx,yy,z+0.1,’ok’) % plot original data up a bit to show nodos
>> hold off
>> zmax = max(max(zzi))
>> [i,j] = find(zmax == zzi)
>> xmzx = xi(j)
>> ymax = yi(i)
>> xi(20)
>> yi(20)

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

>> diary off

Komputasi Fisika. P.Fisika FKIP UNEJ – Topik 5

Anda mungkin juga menyukai