Risalah Lokakarya Komputasi dalam Sains dan Teknologi Nuklir: 6-7 Agustus 2008(177-188)
DETERMINASI PUSAT DAN JARI-JARI LINGKARAN DARI TITIK-DATA SIRKULER DENGAN BANTUAN MATLAB Entjie Mochamad Sobbich* ABSTRAK DETERMINASI PUSAT DAN JARI-JARI LINGKARAN DARI TITIK-DATA SIRKULER DENGAN BANTUAN MATLAB. Ketika sebuah benda berpenampang sirkuler di-scan menggunakan Profiler Dimensional akan didapatkan kurva sirkuler yang’noisy’ sehingga penentuan pusat serta jarijarinya tidak dapat dengan mudah ditentukan. Salah satu metoda akurat yang dapat ditempuh adalah dengan memanfaatkan metoda kuadrat terkecil untuk lingkarani. Komputer memang merupakan mesin hitung yang piawai, ia memudahkan pekerjaan kita khususnya berkenaan dengan tugas-tugas komputasi. Didalam makalah ini komputer dicoba untuk melakukan komputasi dan estimasi dimensional dari data dengan profil lingkaran. MATLAB adalah software yang bekerja ’lebih senang’ dengan data berbentuk matrik maka didalam makalah ini komputer dan MATLAB digunakan untuk menentukan koordinat titik pusat serta jari-jari sebuah lingkaran yang disarikan dari titik-titik data sirkuler. Teknik yang digunakan adalah teknik kuadrat terkecil dan menggunakan komputasi matrik. Eksekusi program menunjukkan hasil yang sangat akurat sesuai dengan nilai yang dimasukkan untuk parameter-parameter lingkaran : absis, ordinat dan jari-jari. Kata-kata kunci : lingkaran, teknik kuadrat terkecil, absis, ordinat, jari-jari, MATLAB.
ABSTRACT CIRCLE CENTER AND ITS RADIUS DETERMINATION OF CIRCULARLY POINTDATA USING MATLAB. When an object having circularly surface be scanned using Dimensional Profiler there will be a circular curve with a noisy that causes difficult to determine for its center, and the radius as well. Computer really an expert calculator, it makes our tasks easer, especially associated to the computation tasks. In this paper computer tried to make dimensional computation and estimation of a circle profile data. MATLAB is software that works preferably using data in the form of matrix so in this paper computer and MATLAB used to determine coordinate of center of a circle, and the radius as well, which was extracted from points constructed circularly. Technique applied is least square and using matrix on its computation. Execution of the program indicates that the results w very accurate likes the value entering for the circle parameters: abscissa, ordinate, and the radius. Keywords: circle, least square method, abscissa, ordinate, radius, MATLAB.
PENDAHULUAN Lingkaran adalah bentuk dimensional yang dicirikan oleh adanya pusat dan jarijari lingkaran.. Oleh sebab itu, sasaran utama dari analisis data lingkaran adalah untuk sampai pada kesimpulan terhadap posisi tiga parameter lingkaran, yaitu : absis, ordinat *
Puslit KIM-LIPI Puspiptek Serpong 15314, e-mail :
[email protected]
177
Risalah Lokakarya Komputasi dalam Sains dan Teknologi Nuklir: 6-7 Agustus 2008(177-188)
dan jari-jari lingkaran berdasarkan titik-titik data yang di-input-kan memiliki format sirkuler. Makalah ini berusaha memanfaatkan MATLAB untuk menganalisis posisi koordinat dari pusat lingkaran dan jari-jarinya ketika dihadirkan titik-titik data yang sebelumnya diduga memiliki format sirkuler. Sebuah program yang telah disusun dalam MATLAB diimplementasikan dan diujikan didalam makalah dengan cara menghadirkan data simulasi yang notabene disarikan dari bentuk-bentuk yang sirkuler dan ketika data tersebut menerima gangguan (noise). Program MATLAB yang semestinya ditujukan untuk data sirkuler ternyata memang memberikan hasil yang bagus ketika, didalam makalah ini, diujikan untuk data sirkuler namun dengan pusat lingkaran tidak di pusat sumbu dan jari-jari yang bervariasi. Adanya tambahan gangguan noise yang bersifat acak disekitar data non-noise maka sifat kuadrat terkecil kesalahan akan mampu meminimisir kesalahan sehingga hasil yang diberikan diyakini akan memberikan hasil terbaik.
TEORI DASAR Sejumlah n pasang data dua dimensi (xi,yi) diduga memiliki format sirkuler sehingga semestinya dapat difikirkan bahwa kumpulan data tersebut dapat diwakili oleh sebuah persamaan reduksi berbentuk :
(xi − x0)2 + (y i − y 0)2 = ri 2
(1)
Namun karena xi dan yi adalah titik-titik data yang telah diketahui nilainya sedangkan x0 dan y0 adalah absis dan ordinat titik pusat lingkaran yang akan dicari maka bentuknya dapat ditukar menjadi
(x0 − xi )2 + (y 0 − y i )2 = ri 2
(2)
Anggaplah bahwa akhirnya ditemukan model yang memberikan koordinat titik-pusat lingkaran adalah (X0,Y0) dan jari-jarinya = R0 maka tiap data (xi,yi) jika dipaskan dengan lingkaran ini pasti akan memberikan nilai kesalahan tertentu, berilah notasi ei. Dengan demikian, jumlah kuadrat terkecil dari kesalahan pengepasan adalah :
E =
∑e
i
2
=
∑ (R − r ) = ∑ (R − (X
2 2
2
0
i
2
0
0
− xi )2 − (Y0 − y i )2
)
2
(3)
Menurut Kalkulus, minimisasi E terjadi ketika dipenuhi syarat-perlu :
178
Risalah Lokakarya Komputasi dalam Sains dan Teknologi Nuklir: 6-7 Agustus 2008(177-188)
∂E = 0 ∂X 0
∂E = 0 ∂Y0
∂E = 0 ∂R0
(4)
Dari syarat-perlu di atas, didapatkan tiga persamaan
∑ (X
n.R02 =
0
− xi )2 +
R02 ∑ (X 0 − xi ) = R02 ∑ (Y0 − y i ) =
∑ (X ∑ (X
∑ (Y
0
− y i )2
− xi )3 +
0
∑ (X
0
− xi )(Y0 − y i )2
− xi )2 ∑ (Y0 − y i ) +
0
∑ (Y
0
(5)
− y i )3
Gunakan notasi baru berikut
∑x = ∑x = ∑x
Sx = Sx2 S x3
∑y = ∑y = ∑y
Sy =
i 2
Sy2
i 3
Sy3
i
∑xy = ∑x y = ∑x y
Sxy =
i 2 i
3 i
Sx2y Sxy 2
i
i
2
i
i
2
i
i
Maka dapat diturunkan solusi untuk absis, ordinat dan jari-jari lingkaran pengepasan sebagai berikut
X0 = R02 =
1 numX 2 denX
Y0 =
1 numY 2 denY
(6)
(
1 nX 02 + nY02 + Sx 2 + S y 2 − 2X 0S x − 2Y0S y n
)
(7)
dengan
S x S x2 + S x S y 2 − nSx3 − nS xy 2 numX = Sx 2 S y + S y S y 2 − nS y 3 − nSx 2y
S x S y − nSxy S y 2 − nS y 2
(8)
S y S y 2 + S x2 S y − nS y 3 − nSx2y numY = Sx S y 2 + S x Sx 2 − nSx2 − nSxy 2
S xS y − nSxy S x 2 − nS x2
(9)
Sx 2 − nSx2 denX = denY = SxS y − nSxy
SxS y − nSxy S y 2 − nSy 2
(10)
179
Risalah Lokakarya Komputasi dalam Sains dan Teknologi Nuklir: 6-7 Agustus 2008(177-188)
PENYUSUNAN PROGRAM MATLAB DATA NON-NOISY Pada bagian Apendiks telah dipersiapkan dua buah contoh susunan program MATLAB yang dapat digunakan untuk melakukan penentuan tiga parameter dari data sirkuler, yaitu : absis, ordinat dan jari-jari. Yang pertama (Apendiks butir A) untuk dipakai bila data adalah data dengan penampang sirkuler sempurna tanpa gangguan. Yang kedua (Apendiks butir B) adalah untuk dipakai bila data mengandung titik-titik data bersifat acak yang dapat dipandang sebagai adanya gangguan pada kondisi sempurna.
Eksekusi Program Program di atas memerlukan penggantian ’x0’ dan ’y0’ menjadi angka-angka yang menunjukkan absis dan ordinat dari titik pusat lingkaran yang disimulasikan. Penggantian ’x0’ , ’y0’ dan ’r0’ yang telah dicobakan adalah 1. x0 = 2 dan y0 = 3 dan r0 = 5 memberikan hasil untuk ketiga parameter sebagai berikut : X = 2,0000 Y = 3,0000 R = 5.0000 Dengan hasil plot sebagai berikut profil data sirkuler 8 7 6 5
y
4 3 2 1 0 -1 -2 -4
-2
0
2 x
4
6
8
Gambar 1. Hasil dari eksekusi program MATLAB Bila pusat di (2,3) dan jari-jari = 5. 180
Risalah Lokakarya Komputasi dalam Sains dan Teknologi Nuklir: 6-7 Agustus 2008(177-188)
2. x0 = -2 , y0 = -1 dan r0 = 5 memberikan hasil untuk ketiga parameter sebagai berikut : X = -2.0000 Y = -1.0000 R = 5.0000 profil data sirkuler 4
2
y
0
-2
-4
-6 -8
-6
-4
-2 x
0
2
4
Gambar 2. Hasil dari eksekusi program MATLAB bila pusat di (-2,-1) & jari-jari = 5. 3. x0 = 4 , y0 = 7 dan r0 = 8 memberikan hasil untuk ketiga parameter sebagai berikut : X = 4,0000 Y = 7,0000 R = 8,0000 profil data sirkuler 16
14
12
10
y
8
6
4
2
0
-2 -6
-4
-2
0
2
4
6
8
10
12
x
Gambar3. Hasil dari eksekusi program MATLAB bila pusat di (4,7) dan jari-jari = 8.
181
Risalah Lokakarya Komputasi dalam Sains dan Teknologi Nuklir: 6-7 Agustus 2008(177-188)
Ketiga hasil percobaan di atas dilakukan untuk nilai data tanpa noise. Ini dilakukan dengan mengambil data dari penyusunan persamaan lingkaran yang bentuk (x − x0)2 + (y − y 0)2 = R 2 . Gambar 1, 2 dan 3 umumnya adalah memberikan indikasi bahwa program MATLAB yang disusun memberikan hasil sesuai yang diinginkan.
DATA DENGAN NOISE Agar terjadi data dengan gangguan acak maka program non-noise dilakukan penyesuaian dengan memasukkan angka-angka acak (random). Hasilnya disertakan dalam makalah ini dan dapat dilihat di bagian Apendiks butir B. Berikut ini adalah hasil eksekusi bila masukan untuk x diberi gangguan dengan sedikit mengacaknya disekitar nilai x maupun nilai y. Daripadanya kemudian diberi gangguan dengan cara mengacaknya sedikit dan kemudian mengeksekusinya.
Eksekusi Program Program di atas memerlukan penggantian ’abs’ dan ’ord’ menjadi angka-angka yang menunjukkan absis dan ordinat dari titik pusat lingkaran yang disimulasikan. Penggantian ’abs’ , ’ord’ dan ’jr’ yang telah dicobakan adalah 4. x0 = 4, y0 = 7 dan r0 = 8 memberikan hasil untuk ketiga parameter sebagai berikut : X = 4,2374 Y = 7,2592 R = 8,0006 profil data sirkuler 16
14
12
10
y
8 6
4
2
0
-2 -4
-2
0
2
4
6
8
10
12
14
x
182
Risalah Lokakarya Komputasi dalam Sains dan Teknologi Nuklir: 6-7 Agustus 2008(177-188)
5. x0 = 0, y0 = 0 dan r0 = 10 memberikan hasil untuk ketiga parameter sebagai berikut : X = 0,2580 Y = 0,2370 R = 10,0079 profil data sirkuler 15
10
y
5
0
-5
-10 -10
-5
0
5
10
15
x
6. x0 = -2 , y0 = -3 dan r0 = 4 memberikan hasil untuk ketiga parameter sebagai berikut : X = -1,7423 Y = -2,7360 R = 3,9984 profil data sirkuler 2 1 0 -1
y
-2 -3 -4 -5 -6 -7 -6
-4
-2
0
2
4
x
183
Risalah Lokakarya Komputasi dalam Sains dan Teknologi Nuklir: 6-7 Agustus 2008(177-188)
KESIMPULAN Dari eksekusi yang telah dilakukan terhadap program MATLAB disimpulkan bahwa hasil eksekusi sangat memuaskan. Hasil eksekusi memberikan nilai sesuai yang diharapkan. Ini ditunjukkan oleh eksekusi program yang non-noisy tanpa gangguan acak yang memberikan hasil eksak sesuai masukan dan ini berakibat dua kurva bertumpuk menjadi satu. Dengan keyakinan di atas, program dikembangkan untuk kondisi bila data diberi gangguan acak. Hasilnya, : terjadi pergeseran absis, ordinat dan jari-jari sebagai akibat dari adanya gangguan yang dimasukkan pada masing-masing data masukan. Tentu pergeseran ini adalah ’yang terbaik’ sesuai aturan kuadrat terkecil dan ini berakibat kurva non-noisy berada ’didalam’ kurva acak.
DAFTAR PUSTAKA 1. RAZET A., Analytical Resolution of Least-Squares Applications for the Circle in Interferometry and Radiometry, Metrologia vol. 35, (1981)143 – 149. 2. AGIN G., Fitting ellipses and General Second-Order Curves, Australia:Carnegie Mellon University, Pittsburg, 1981. 3. http://www.doe-mbi.ucla.edu/~grothe/circlefit/circlefit.html 4. http://www.nlreg.com/circular.htm 5. MATLAB R12 - The Language of Technical Engineering, The Mathwork Inc. (software).
184
Risalah Lokakarya Komputasi dalam Sains dan Teknologi Nuklir: 6-7 Agustus 2008(177-188)
APENDIKS Dua susunan program MATLAB berikut adalah untuk menentukan tiga parameter lingkaran : absis, ordinat, jari-jari. A. Bila data memberikan profil lingkaran sempurna tanpa gangguan. % Program berikut untuk mencari 3 parameter lingkaran % X = absis pusat lingkaran % Y = ordinat pusat lingkaran % R = jari-jari lingkaran % Metoda :Kuadrat Terkecil % Data di-create tanpa memberikan gangguan acak(random noise) % disusun dan dikodekan oleh : Entjie Mochamad Sobbich % e-mail :
[email protected] clear all x0=4;y0=7;r0=8; xmin=x0-r0;xmax=x0+r0; x1=xmin:0.1:xmax; y1= y0 + sqrt(r0^2-(x1-x0).^2); x2=xmin:0.1:xmax; y2=y0-sqrt(r0^2-(x2-x0).^2); plot(x1,y1,x2,y2,'b') grid on title('profil data sirkuler'); xlabel('x'); ylabel('y'); hold on x=[x1 x2];y=[y1 y2]; n=20*(xmax-xmin)+2; % Jumlah data x sx=sum(x);sy=sum(y); sxy=sum(x.*y);sxx=sum(x.^2);syy=sum(y.^2); sxxx=sum(x.^3);syyy=sum(y.^3);sxxy=sum(x.^2.*y);sxyy=sum(x.*y.^2); X11=[sx.*sxx+sx.*syy-n*sxxx-n*sxyy]; X12= [sx.*sy-n*sxy]; X21=[sxx.*sy+sy.*syy-n*syyy-n*sxxy]; X22=[sy.^2-n*syy]; Y11=[sy.*syy+sxx.*sy-n*syyy-n*sxxy]; Y12=X12; 185
Risalah Lokakarya Komputasi dalam Sains dan Teknologi Nuklir: 6-7 Agustus 2008(177-188)
Y21=[sx.*syy+sx.*sxx-n*sxxx-n*sxyy]; Y22=[sx.^2-n*sxx]; Z11=Y22;Z12=X12;Z21=Z12;Z22=X22; % perhitungan elemen matrik numX=[X11 X12;X21 X22];numX=det(numX); numY=[Y11 Y12;Y21 Y22];numY=det(numY); denX=[Z11 Z12;Z21 Z22];denX=det(denX); denY=denX; % parameter lingkaran hasil teknik kuadrat terkecil X=0.5*numX/denX; Y=0.5*numY/denY; R2=(n*X^2+n*Y^2+sxx+syy-2*X*sx-2*Y*sy)/n; R=sqrt(R2); % Plot Lingkaran hasil teknik kuadrat-terkecil x0=X;y0=Y;r0=R; xmin=x0-r0;xmax=x0+r0; x1=xmin:0.1:xmax; y1= y0 + sqrt(r0^2-(x1-x0).^2); x2=xmin:0.1:xmax; y2=y0-sqrt(r0^2-(x2-x0).^2); plot(x1,y1,'r',x2,y2,'r')
B. Bila data memberikan profil lingkaran dengan gangguan (noise). % Program berikut untuk mencari 3 parameter lingkaran % X = absis pusat lingkaran % Y = ordinat pusat lingkaran % R = jari-jari lingkaran % Metoda :Kuadrat Terkecil % Data di-create dengan memberikan gangguan acak (random noise) % disusun dan dikodekan oleh : Entjie Mochamad Sobbich % e-mail :
[email protected] clear all x0=4;y0=7;r0=8; xmin=x0-r0;xmax=x0+r0; x1=xmin:0.1:xmax; 186
Risalah Lokakarya Komputasi dalam Sains dan Teknologi Nuklir: 6-7 Agustus 2008(177-188)
y1= y0 + sqrt(r0^2-(x1-x0).^2); x2=xmin:0.1:xmax; y2=y0-sqrt(r0^2-(x2-x0).^2); n=20*(xmax-xmin)+2; % Jumlah data x dx=0.5*rand(1,n/2); % data acak untuk x1 dan x2 dy=0.5*rand(1,n/2); % data acak untuk y1 dan y2 x1=x1+dx; % randomisasi data x y1=y1+dy; % randomisasi data y x2=x2+dx; % randomisasi data x y2=y2+dy; % randomisasi data y plot(x1,y1,x2,y2,'b') grid on title('profil data sirkuler'); xlabel('x'); ylabel('y'); hold on x=[x1 x2];y=[y1 y2]; sx=sum(x);sy=sum(y); sxy=sum(x.*y);sxx=sum(x.^2);syy=sum(y.^2); sxxx=sum(x.^3);syyy=sum(y.^3);sxxy=sum(x.^2.*y);sxyy=sum(x.*y.^2); X11=[sx.*sxx+sx.*syy-n*sxxx-n*sxyy]; X12= [sx.*sy-n*sxy]; X21=[sxx.*sy+sy.*syy-n*syyy-n*sxxy]; X22=[sy.^2-n*syy]; Y11=[sy.*syy+sxx.*sy-n*syyy-n*sxxy]; Y12=X12; Y21=[sx.*syy+sx.*sxx-n*sxxx-n*sxyy]; Y22=[sx.^2-n*sxx]; Z11=Y22;Z12=X12;Z21=Z12;Z22=X22; % perhitungan elemen matrik numX=[X11 X12;X21 X22];numX=det(numX); numY=[Y11 Y12;Y21 Y22];numY=det(numY); denX=[Z11 Z12;Z21 Z22];denX=det(denX); denY=denX; % parameterlingkaran hasil teknik kuadrat terkecil X=0.5*numX/denX; Y=0.5*numY/denY; R2=(n*X^2+n*Y^2+sxx+syy-2*X*sx-2*Y*sy)/n; R=sqrt(R2); % Plot Lingkaran hasil teknik kuadrat-terkecil 187
Risalah Lokakarya Komputasi dalam Sains dan Teknologi Nuklir: 6-7 Agustus 2008(177-188)
x0=X;y0=Y;r0=R; xmin=x0-r0;xmax=x0+r0; x1=xmin:0.1:xmax; y1= y0 + sqrt(r0^2-(x1-x0).^2); x2=xmin:0.1:xmax; y2=y0-sqrt(r0^2-(x2-x0).^2); plot(x1,y1,'r',x2,y2,'r')
188