You are on page 1of 21

Phuong phup gom cum (clusterng)

Bai giang mon boc Kbai pba Ju /icu trcn C8DL quan bc
GV. Nguycn Duy Nbat
Muc Iuc :
1. an nhap.......................................................................................................... 1
2. Phuong phap .................................................................................................... 2
3. CIaI fhuaf ....................................................................................................... 21
NoI dung gIaI fhuaf
V du mInh hoa
4. CaI daf & Thu nghIom voI CSharp .............................................................. 22

1. Oun nhup
Xof bang gom 20 bo so IIou ( ) X, Y :

X Y
48 229
61 196
67 216
96 187
99 163
127 156
132 130
171 112
247 100
253 153
258 67
273 109
297 103
299 67
300 132
325 153
327 136
354 156
366 184
403 201

o fhj o hnh sau cho fa hnh dung vo su phan bo cua du IIou


1
0
50
100
150
200
250
0 100 200 300 400 500
X
Y
o so IIo u


Phuong phap hoI quy fuyon fnh frong fruong hop nay so khong cho fa kof qua fof.
Tuy nhIon, nou bang mof cach fhuc nao do, fa chIa duoc bang so IIou ban dau fhanh
haI bang con :

X Y
48 229
61 196
67 216
96 187
99 163
127 156
132 130
171 112

va

X Y
247 100
253 153
258 67
273 109
297 103
299 67
300 132
325 153
327 136
354 156
366 184
403 201


2
, fh khI do, ap dung phuong phap hoI quy cho fung bang con so cho kof qua fof hon
nhIou. o fhj o hnh sau cho fa hnh dung vo su phan bo du IIou cua haI bang con,
ma sau nay fa so goI Ia haI cum, :

0
50
100
150
200
250
0 100 200 300 400 500
X
Y
Cu m 1
Cu m 2


Phuong phap gom cum duoc frnh bay frong phan fIop fhoo so cho fa mof so cach
fhuc do fhuc hIon dIou nay.

2. Phuong phup gom cum
... phan nay chua Iam... chI Ia do noI vo y nghIa, y fuong va uu khuyof dIom cua cac
phuong phap gom cum.

3. Gu thuut
3.1 Phuong phup phun houch
Inpuf :
- A Ia bang gom N bo so IIou n fhuoc fnh : ( )
1 2 n
X , X , ..., X
- k Ia so cum muon phan hoach
- Ham do do ( ) d x, y : fra vo do do fnh fuong fu gIua haI bo so IIou x va y.
Oufpuf :
- Ia k cum da duoc phan hoach, nghIa Ia
1
C ,..., C
k
1 2 k
C C ... C A = , va
I j
C C = , , I, j 1, ..., k = I j .
Cac buoc fhuc hIon :
1 : Chon f nhaf k dIom baf ky frong A Iam phan fu |dIom) khoI dau cho k cum
|khoI dau, moI cum co f nhaf mof dIom).


3
2 : Tnh frong fam cho moI cum. VoI moI cum ,
I
C I 1, 2, ..., k = , fhuc hIon fnh
frong fam
( )
I
C 1 2
T X , X , ..., X =
n
, frong do
j
X Ia frung bnh cua cac gIa frj faI fhuoc
fnh
j
X cua cac phan fu frong cum . NghIa Ia nou fa ky hIou Ia so phan fu
cua cum ,
I
C
I
N
I
C
[ ]
I
C f Ia phan fu fhu f frong cum ,
I
C
[ ]
I
C f .X
j
Ia gIa frj faI fhuoc fnh
j
X cua phan fu [ ]
I
C f , fh fa co :
[ ]
I
N
I j
f 1
j
I
C f .X
X
N
=
=


3 : VoI moI phan fu |bo so IIou) frong bang A,
p
x p 1, 2, ..., N = , fhuc hIon phan
|gom) vao cum gan nhaf, fhoo cach :
p
x
3.1 Tm gIa frj bo nhaf frong cac gIa frj
( )
I
p C
d x , T , voI . CoI
ImIn Ia chI so cua gIa frj bo nhaf.
I 1, 2, ..., k =
3.2 Phan vao cum ImIn.
p
x
4 : Nou mof frong cac buoc 3.2 |da fhuc hIon) Iam fhay doI su phan cum cua ,
nghIa Ia hoac fruoc do chua fung duoc phan cum hoac cum cu cua khac voI
cum moI, fh quay fro IaI buoc 2.
p
x
p
x
p
x

Nhan xof :
|I) Phuong phap phan hoach doI hoI phaI du doan fruoc so cum k can phan.
Iou nay, frong fhuc fo, khong phaI Iuc nao cung co fho do fhuc hIon.
|II) Su fhanh cong cua phuong phap phan hoach, frong mof so fruong hop dac
bIof, co fho bj Io fhuoc vao vIoc chon dIom khoI dau cho moI cum.
|III) Phuong phap can duoc caI fIon do khac phuc mof so fhao fac fhua frong
fung fnh huong cu fho.
|Iv) Su fhanh cong cua phuong phap con phu fhuoc vao cach fhuc djnh nghIa
fam |cua cum), va ham do do fnh fuong fu |xom muc 4.2).

V du mInh hoa :
Cho A Ia bang so IIou o muc 1, so cum can phan k 2 = , ham do do Ia khoang cach
oucIIdo, nghIa Ia, voI , ( )
1 2 n
x X , X , ..., X = ( )
1 2 n
y Y , Y , ..., Y = ,
( ) ( ) ( ) ( )
2 2
1 1 2 2 n n
d x, y X Y X Y ... X Y = + + +
2
)


1 : Chon ngau nhIon dIom cho cum 1 va (67, 216 ( ) 127,156 cho cum 2 :

STT X Y
Thuoc
cum
Khoung cuch
den cum 2
Khoung cuch
den cum 1
1 48 229
2 61 196
3 67 216 1


4
4 96 187
5 99 163
6 127 156 2
7 132 130
8 171 112
9 247 100
10 253 153
11 258 67
12 273 109
13 297 103
14 299 67
15 300 132
16 325 153
17 327 136
18 354 156
19 366 184
20 403 201

2 : o chI co mof dIom, non fam cua moI cum cung chnh Ia dIom fhuoc cum :
( )
1
C
T 67, 216 = , . ( )
2
C
T 127,156 =
3 : Tnh khoang cach fu moI dIom don moI cum, va fhuc hIon phan dIom vao cum
gan nhaf, fa co bang kof qua sau

STT X Y
Thuoc
cum
Khoung cuch
den cum 1
Tum=(6?,216)
Khoung cuch
den cum 2
Tum=(12?,156)
Cum gun
nhut duoc
phun
1 48 229 23.02173 107.5639 1
2 61 196 20.88061 77.17513 1
3 67 216 1 0 84.85281 1
4 96 187 41.01219 43.84062 1
5 99 163 61.91123 28.86174 2
6 127 156 2 84.85281 0 2
7 132 130 107.8007 26.4764 2
8 171 112 147.0782 62.2254 2
9 247 100 214.1401 132.4236 2
10 253 153 196.3797 126.0357 2
11 258 67 242.2437 158.373 2
12 273 109 232.1314 153.3786 2
13 297 103 256.2596 178.0702 2
14 299 67 275.7263 193.6621 2
15 300 132 247.6792 174.6568 2
16 325 153 265.5805 198.0227 2


5
17 327 136 272.0294 200.9975 2
18 354 156 293.2047 227 2
19 366 184 300.7075 240.6346 2
20 403 201 336.3347 279.6444 2

4 : o co su fhay doI o bang fron |gIua cof Thuoc cum va cof Cum gan nhaf
duoc phan), non fa quay fro IaI fhuc hIon buoc 2.
2 : , . ( )
1
C
T 68,207 = ( )
2
C
T 264.4375,132.625 =
3 : ang kof qua sau khI fnh

STT X Y
Thuoc
cum
Khoung cuch
den cum 1
Tum=(6?,216)
Khoung cuch
den cum 2
Tum=(12?,156)
Cum gun
nhut duoc
phun
1 48 229 1 29.73214 236.9247 1
2 61 196 1 13.0384 213.0803 1
3 67 216 1 9.055385 214.3198 1
4 96 187 1 34.4093 176.9967 1
5 99 163 2 53.82379 168.2029 1
6 127 156 2 77.98718 139.4111 1
7 132 130 2 100.1249 132.4635 1
8 171 112 2 140.1214 95.68677 2
9 247 100 2 208.5426 36.99266 2
10 253 153 2 192.72 23.36572 2
11 258 67 2 236.0085 65.93999 2
12 273 109 2 227.2202 25.12881 2
13 297 103 2 251.5094 44.02223 2
14 299 67 2 270.1129 74.17012 2
15 300 132 2 243.8217 35.56799 2
16 325 153 2 262.6119 63.89802 2
17 327 136 2 268.5554 62.65347 2
18 354 156 2 290.5116 92.56258 2
19 366 184 2 298.8863 113.8171 2
20 403 201 2 335.0537 154.5144 2

4 : Cung do co su fhay doI o bang fron |gIua cof Thuoc cum va cof Cum gan
nhaf duoc phan), non fa quay fro IaI fhuc hIon buoc 2.
2 : , ( )
1
C
T 90,182.4286 = ( )
2
C
T 297.9231,128.6923 = .
3 : ang kof qua sau khI fnh

STT X Y
Thuoc
cum
Khoung cuch
den cum 1
Tum=(6?,216)
Khoung cuch
den cum 2
Tum=(12?,156)
Cum gun
nhut duoc
phun


6
1 48 229 1 62.71282 269.3013 1
2 61 196 1 32.01849 246.2983 1
3 67 216 1 40.69448 246.8767 1
4 96 187 1 7.543074 210.1731 1
5 99 163 1 21.4119 201.8599 1
6 127 156 1 45.46943 173.0908 1
7 132 130 1 67.17704 165.9282 1
8 171 112 2 107.3368 128.016 1
9 247 100 2 177.3231 58.45005 2
10 253 153 2 165.6353 51.07785 2
11 258 67 2 203.8327 73.48328 2
12 273 109 2 197.182 31.76392 2
13 297 103 2 221.7158 25.70888 2
14 299 67 2 238.7567 61.70171 2
15 300 132 2 215.97 3.905693 2
16 325 153 2 236.8355 36.38714 2
17 327 136 2 241.5049 29.98116 2
18 354 156 2 265.3196 62.37252 2
19 366 184 2 276.0045 87.71208 2
20 403 201 2 313.5505 127.5522 2

4 : o van co mof su fhay doI o dIom fhu 8 |fu cum 2 duoc phan vao cum 1), non
fa quay fro IaI fhuc hIon buoc 2.
2 : , ( )
1
C
T 100.125,173.625 = ( )
2
C
T 308.5,130.0833 = .
3 : ang kof qua sau khI fnh

STT X Y
Thuoc
cum
Khoung cuch
den cum 1
Tum=(6?,216)
Khoung cuch
den cum 2
Tum=(12?,156)
Cum gun
nhut duoc
phun
1 48 229 1 76.04871 278.6481 1
2 61 196 1 45.07112 256.1274 1
3 67 216 1 53.78574 256.3278 1
4 96 187 1 13.99665 219.9904 1
5 99 163 1 10.68439 212.0702 1
6 127 156 1 32.13886 183.341 1
7 132 130 1 54.02922 176.5 1
8 171 112 1 93.91968 138.684 1
9 247 100 2 164.2952 68.46354 2
10 253 153 2 154.26 60.04518 2
11 258 67 2 190.5083 80.80691 2
12 273 109 2 184.5594 41.2887 2
13 297 103 2 209.1594 29.42375 2


7
14 299 67 2 225.6549 63.79465 2
15 300 132 2 204.1633 8.713416 2
16 325 153 2 225.8189 28.23869 2
17 327 136 2 229.9737 19.4231 2
18 354 156 2 254.4861 52.36338 2
19 366 184 2 276.0045 87.71208 2
20 403 201 2 313.5505 127.5522 2

4 : o khong con su fhay doI non gIaI fhuaf kof fhuc, va fa co kof qua Ia haI cum
voI su phan bo nhu frong do fhj o muc 1.

Gu thuut cu ten cho phuong phup phun houch
...phan nay chua Iam...
3.2 Phuong phup phun lop
...phan nay chua Iam...
3.3 Ounh gu phuong phup
...phan nay chua Iam...

4. Cu dut vu thu nghem vo CShurp
4.1 Cu dut
Muc fIou cua chuong frnh so caI daf : cho phop xu Iy bang du IIou can gom cum fu
fIIo oxcoI, dong fhoI vo do fhj mInh hoa cac cum sau khI gom. o don gIan, fa chI
xu Iy bang du IIou gom 2 fhuoc fnh |n=2), va caI daf chuong frnh fhoo gIaI fhuaf
gom cum chua caI fIon.

1 : Tao projocf va fhIof ko form co dang



O foxfbox |fon mac djnh Ia foxfox1) do khI chay chuong frnh, fa nhap fon va
duong dan cua fIIo oxcoI chua du IIou. Chockbox bon duoI |fon mac djnh Ia
chockox1) cho phop ngung chuong frnh sau moI vong Iap do fa do kIom fra su
fhay doI cua cac cum.



8
2 : Thom bo fhu vIon cac ham Iap frnh oxcoI vao projocf : Chon monu Projocf
--> Add Roforonco --> chon fho COM --> chon muc MIcrosoff xcoI 11.0 Objocf
IIbrary --> OK.

3 : Chuan bj fIIo oxcoI do fhu nghIom. Trong v du nay, fa daf fon fIIo Ia
cIusforIng.xIs va daf o fhu muc goc o dIa C. u IIou frong fIIo oxcoI phaI fhoa quI
cach : Toan bo du IIou daf frong shoof dau fIon; cof A va cof , baf dau fu dong 1,
chua haI cof cua bang du IIou |so dong khong gIoI han); cof C cho bIof dong du IIou
ung voI dIom nao duoc gan khoI dau cho cum nao |so cum va so dIom khoI dau cho
moI cum khong gIoI han, chI so cum baf dau fu 1). V du, fa fhIof ko fIIo oxcoI co
dang



Trong fhIof ko o fron, o cof C, fa da chon dong 3 Iam dIom khoI dau cho cum 1,
dong 6 Iam dIom khoI dau cho cum 2 |nhu vay Ia fa muon phan hoach Iam 2 cum,
va khoI dau moI cum chI co 1 dIom).

4 : VIof ma Ionh cho ham xu Iy su kIon cIIck cua nuf Thuc hIon, va day cung Ia
ma Ionh cua foan bo chuong frnh.


9
V rang so co kha nhIou cong vIoc phaI Iam, non fruoc fIon, fa phaI fom faf cac y
chnh can phaI fhuc hIon :
4.1. oc du IIou fu fIIo oxcoI vao cac bIon cua chuong frnh.
4.2. Tao shoof moI, va fhIof ko gIao dIon cho shoof nay do chuan bj chua du IIou
Oufpuf.
4.3. Thuc hIon gIaI fhuaf gom cum.
4.4. Vo do fhj cac cum kof qua.
Cac bIon so duoc su dung :
n : chua so dong co frong bang,
X, Y : Ia haI mang kIou fhuc co n phan fu,
[ ] [ ] ( )
X I , Y I chua du IIou cua dong
fhu frong bang |chu y rang frong hau hof cac ngon ngu Iap frnh, chI so cua
cac phan fu frong mang baf dau fu 0),
I 1 +
TVC : Ia mang kIou nguyon khong am co n phan fu, [ ] TVC I cho bIof dIom
fhu I fhuoc vo cum nao, nou [ ] TVC I 0 = nghIa Ia dIom fhu I nay chua duoc phan
cum,
k : chua so cum,
TCX, TCY : Ia haI mang kIou fhuc co k phan fu,
[ ] [ ] ( )
TCX j , TCY j cho bIof
foa do fam cua cum fhu j,
STC : Ia mang kIou nguyon co k phan fu, [ ] STC j cho bIof so dIom co
frong cum fhu j,
sfop : bIon kIon booI, sau moI Ian fhuc hIon gIaI fhuaf fu 2 --> 4, bIon sfop
so cho bIof co phaI quay fro IaI fhuc hIon 2 hay khong |nou khong nghIa Ia gIaI
fhuaf kof fhuc). KhI baf dau vong Iap xu Iy 2, fa gan sfop fruo = , nou frong qua
frnh phan cum cho cac dIom, nou co su fhay doI cum cua baf ky dIom nao, fa dou
so gan cho sfo . p faIso =

Ma Ionh ham :
// 4.1
// - Mo fIIo oxcoI
Microsoft.Office.Interop.Excel.Application UngDungExcel;
Microsoft.Office.Interop.Excel.Workbook wb;
Microsoft.Office.Interop.Excel.Worksheet s, ns;
UngDungExcel = new Microsoft.Office.Interop.Excel.Application();
UngDungExcel.Visible = true;
// - Ton & duong dan fIIo oxcoI nam frong foxfox1
wb = UngDungExcel.Workbooks.Open(textBox1.Text, 0, false, 5, "", "", false,
Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true,
false, false);
// - Cho bIon s fro don shoof dau fIon frong fIIo oxcoI |fhu fu cac shoof baf dau fu 1)
s = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[1];
// - om so dong frong bang du IIou Inpuf o shoof s
int n = 1;
while (s.get_Range("A" + n.ToString(), "A" + n.ToString()).Value2 != null)
{ // Iap IaI vIoc fang n cho don khI o An Ia o frong |=nuII)
n++;
}
n -= 1;
// - oc du IIou fu bang vao cac mang X, Y, va TVC


10


11
double[] X = new double[n];
double[] Y = new double[n];
int[] TVC = new int[n];
int k = 0;
for (int i = 1; i <= n; i++)
{
X[i-1] = (double)s.get_Range("A" + i.ToString(), "A" + i.ToString()).Value2;
Y[i-1] = (double)s.get_Range("B" + i.ToString(), "B" + i.ToString()).Value2;
// nou o CI do frong, nghIa Ia dIom nay khong duoc phan Iam dIom khoI dau cho
// baf ky cum nao
if (s.get_Range("C" + i.ToString(), "C" + i.ToString()).Value2 == null)
{
TVC[i-1] = 0;
}
else // nou nguoc IaI fh phan dIom nay vao cum co chI so faI o CI
{
TVC[i-1] = int.Parse(s.get_Range("C" + i.ToString(), "C" +
i.ToString()).Value2.ToString());
if (k < TVC[i-1]) k = TVC[i-1]; // k Ia chI so Ion nhaf frong cof C => k Ia so cum
}// end if
}// end for
double[] TCX = new double[k];
double[] TCY = new double[k];
int[] SDTC = new int[k];
// 4.2 : Tao shoof moI
// - Tao shoof moI va cho bIon ns fro don shoof nay, shoof moI so dung do chua cac kof qua fnh foan
//cung nhu kof qua cuoI cung.
ns =
(Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.Add(System.Type.Miss
ing, wb.Worksheets[wb.Worksheets.Count], System.Type.Missing,
System.Type.Missing);
// - Trang fr cho shoof moI
ns.get_Range("A1","A1").Value2 = "S im l " + n.ToString() + ", s cm l " + k;
ns.get_Range("A2", "A2").Value2 = "X";
ns.get_Range("B2", "B2").Value2 = "Y";
ns.get_Range("C2", "C2").Value2 = "Thuc cm";
int d;
//ghI bang du IIou Inpuf fro ra shoof moI, faI haI cof A va .
for (int i = 0; i < n; i++)
{
d = i+3;
ns.get_Range("A" + d.ToString(), "A" + d.ToString()).Value2 = X[i];
ns.get_Range("B" + d.ToString(), "B" + d.ToString()).Value2 = Y[i];
}
for (int i = 0; i < k; i++)
{
ns.get_Range(((char)((int)'D' + i * 2)).ToString() + "2", ((char)((int)'D' +
(i * 2 + 1))).ToString() + "2").Merge(Type.Missing);
ns.get_Range(((char)((int)'D' + i*2)).ToString() + "2", ((char)((int)'D' +
i*2)).ToString() + "2").Value2 = "TmCm" + (i+1).ToString();
ns.get_Range(((char)((int)'D' + i+k*2)).ToString() + "2", ((char)((int)'D' +
i+k*2)).ToString() + "2").Value2 = "KC n C" + (i + 1).ToString();
}
// 4.3 : Thuc hIon gIaI fhuaf gom cum
bool stop = false;
int LanLap = 0; // bIon nay ghI nhan IaI so Ian gIaI fhuaf phaI Iap IaI
while (stop==false)
{
stop = true; // - Nou co su fhay doI frong vIoc phan cum cho baf ky dIom nao, fa dou so gan
IaI //cho sfop=faIso do phu hop voI dIou kIon Iap cua vong vhIIo
// - Tnh IaI foa do fam cua moI cum, Ia foa do frung bnh cua cac dIom fhuoc cum
for (int i = 0; i < k; i++)
{


12
TCX[i] = 0;
TCY[i] = 0;
SDTC[i] = 0; // mang nay cho bIof cum I co bao nhIou dIom
}
for (int i = 0; i < n; i++)
{
if (TVC[i] > 0)
{
SDTC[TVC[i] - 1] += 1;
TCX[TVC[i] - 1] += X[i];
TCY[TVC[i] - 1] += Y[i];
}
}
for (int i = 0; i < k; i++)
{
TCX[i] = TCX[i]/SDTC[i];
TCY[i] = TCY[i] / SDTC[i];
// ghI foa do fam cac cum ra fIIo oxcoI, baf dau faI dong 3, cof
ns.get_Range(((char)((int)'D' + i*2)).ToString() + "3", ((char)((int)'D'
+ i*2)).ToString() + "3").Value2 = TCX[i];
ns.get_Range(((char)((int)'D' + (i*2+1))).ToString() + "3",
((char)((int)'D' + (i*2+1))).ToString() + "3").Value2 = TCY[i];
}
// - uyof IaI qua moI dIom, fm xom dIom nao gan cum nao nhaf fh phan IaI dIom vao cum do
for (int i = 0; i < n; i++)
{
// gIa su dIom I gan cum 1 nhaf
int tamcu = TVC[i]; // Iuu IaI fam cu
TVC[i] = 1;
double min = Math.Sqrt((X[i] - TCX[0]) * (X[i] - TCX[0]) + (Y[i] - TCY[0]) *
(Y[i] - TCY[0]));
ns.get_Range(((char)((int)'D' + (k * 2))).ToString() + (3 + i).ToString(),
((char)((int)'D' + (k * 2))).ToString() + (3 + i).ToString()).Value2 = min;
// so sanh voI cac cum con IaI, nou co cum nao gan hon fh fhay TVCI| bang cum do
for (int j = 1; j < k; j++)
{
double tmp = Math.Sqrt((X[i] - TCX[j]) * (X[i] - TCX[j]) + (Y[i] - TCY[j])
* (Y[i] - TCY[j]));
ns.get_Range(((char)((int)'D' + (j + k * 2))).ToString() + (3 +
i).ToString(), ((char)((int)'D' + (j + k * 2))).ToString() + (3 +
i).ToString()).Value2 = tmp;
if (tmp < min)
{
min = tmp;
TVC[i] = j+1;
}
}
ns.get_Range("C" + (i + 3).ToString(), "C" + (i + 3).ToString()).Value2 =
TVC[i];
// nou fam moI khac fam cu fh gan sfop = faIso do Iap IaI gIaI fhuaf Ian nua
if ((stop==true)&&(TVC[i] != tamcu)) stop = false;
}// kof fhuc cua vong Iap for I
// - KIom fra Iua chon o chockbox ung IaI sau moI buoc Iap
if ((checkBox1.Checked==true)&&(stop == false))
{
LanLap += 1;
MessageBox.Show("Thut ton gom cm cha kt thc, y l ln lp th " + LanLap.ToString());
}
};// Kof fhuc cua vong vhIIo, ra khoI vong vhIIo nay Ia gIaI fhuaf kof fhuc
// 4.4 : Xuaf kof qua ra fIIo oxcoI va vo do fhj cac cum
// - ChI foa do cac dIom fhuoc cum ra fIIo oxcoI
int[] CS = new int[k]; // - CSI| so Ia chI so cua cum fhu I, CSI| so fang dan fu 0 don STCI|
for (int c = 0; c < k; c++)
{


13
ns.get_Range(((char)((int)'D' + c * 2)).ToString() + "4", ((char)((int)'D' +
(c * 2 + 1))).ToString() + "4").Merge(Type.Missing);
ns.get_Range(((char)((int)'D' + c * 2)).ToString() + "4", ((char)((int)'D' +
c * 2)).ToString() + "4").Value2 = "im thuc cm";
CS[c] = 0;
}
// duyof qua fung dIom, xom dIom nay fhuoc cum nao fh ghI ra fIIo oxcoI o cof fuong ung
for (int c = 0; c < n; c++)
{
if (TVC[c] > 0)
{
ns.get_Range(((char)((int)'D' + (TVC[c] - 1) * 2)).ToString() + (5 +
CS[TVC[c] - 1]).ToString(), ((char)((int)'D' + (TVC[c] - 1) * 2)).ToString() + (5
+ CS[TVC[c] - 1]).ToString()).Value2 = X[c];
ns.get_Range(((char)((int)'D' + (TVC[c] - 1) * 2+1)).ToString() + (5 +
CS[TVC[c] - 1]).ToString(), ((char)((int)'D' + (TVC[c] - 1) * 2+1)).ToString() +
(5 + CS[TVC[c] - 1]).ToString()).Value2 = Y[c];
CS[TVC[c]-1] += 1;
}
}
// - Vo do fhj cac cum
Microsoft.Office.Interop.Excel.ChartObjects co =
(Microsoft.Office.Interop.Excel.ChartObjects)ns.ChartObjects(Type.Missing);
Microsoft.Office.Interop.Excel.ChartObject tt =
(Microsoft.Office.Interop.Excel.ChartObject)co.Add(400, 0, 450, 300);
tt.Chart.ChartType = Microsoft.Office.Interop.Excel.XlChartType.xlXYScatter;
Microsoft.Office.Interop.Excel.SeriesCollection sr;
// fa so vo haI do fhj, do fhj fhu nhaf Ia hon hop cua cac cum |moI cum so Ia mof mau khac nhau)
//do fhj fhu haI Ia do fhj cua bang du IIou Inpuf ban dau
// Truoc fIon vo do fhj fhu nhaf
sr =
(Microsoft.Office.Interop.Excel.SeriesCollection)tt.Chart.SeriesCollection(T
ype.Missing);
Microsoft.Office.Interop.Excel.Series x;
for (int c = 0; c < k; c++)
{
x = sr.NewSeries();// moI mof sorIos Ia mof cum
// cung cap foa do cac dIom fhuoc cum cho cac bo du IIou X va Y cua sorIos
x.XValues = ns.get_Range(((char)((int)'D' + c * 2)).ToString() + "5",
((char)((int)'D' + c * 2)).ToString() + (4 + CS[c]).ToString());
x.Values = ns.get_Range(((char)((int)'D' + c * 2+1)).ToString() + "5",
((char)((int)'D' + c * 2+1)).ToString() + (4+CS[c]).ToString());
}
// Vo do fhj fhu haI
tt = (Microsoft.Office.Interop.Excel.ChartObject)co.Add(400, 300, 450, 300);
tt.Chart.ChartType = Microsoft.Office.Interop.Excel.XlChartType.xlXYScatter;
sr =
(Microsoft.Office.Interop.Excel.SeriesCollection)tt.Chart.SeriesCollection(T
ype.Missing);
x = sr.NewSeries();
x.XValues = ns.get_Range("A3", "A" + (n+2).ToString());
x.Values = ns.get_Range("B3", "B" + (n + 2).ToString());
MessageBox.Show("Thut ton kt thc, xem file excel thy kt qu .");

ChI chu : oc gIa copy foan bo noI dung ma Ionh nay vao ham xu Iy su kIon cIIck
cua nuf fhuc hIon. Sau do chay fhu chuong frnh voI fIIo oxcoI da chuan bj o 3, fa
so co kof qua gIong nhu mong muon o muc 1.
4.2 Phuong phup gom cum vo do do ph Kuclde
Out vun de
Phuong phap gom cum da caI daf o 4.1 khong fhuc su cho kof qua fof frong fruong
hop fa can phan fch fnh fuong quan fuyon fnh fron cac cum fm duoc. Thuc vay,
sau khI chay fhu chuong frnh voI fIIo oxcoI da chuan bj o 3, duong hoI quy fm
duoc cho moI cum frong fruong hop nay co dang



Kof qua so fof hon nou, bang cach nao do, fa gom bang du IIou ban dau fhanh haI
cum co dang


khI do, duong hoI quy so co kof qua fof hon nhIou :


14

Gu phup
Ta fhIof ko IaI gIaI fhuaf gom cum voI haI fhay doI vo cach chon fam va ham do do
fnh fuong fu |gIua mof dIom voI fam cua mof cum) :
|I) Tam khong phaI Ia foa do frung bnh cua cac dIom fhuoc cum, ma Ia
duong fhang hoI quy xap xI fof nhaf cac dIom fhuoc cum. o do, khoI dau,
fa phaI chon cho moI cum f nhaf 2 dIom.
|II) Ham do do fnh fuong fu |khoang cach) cua mof dIom so voI mof cum duoc
fnh bang khoang cach fu dIom do don duong fhang hoI quy Ia fam cua
cum.
Chu y rang : CoI Ia duong fhang hoI quy, d : y ax b = + ( )
P P
P x , y Ia mof dIom baf
ky nam ngoaI duong fhang. KhI do, khoang cach fu P don d duoc cho boI cong fhuc
: ( )
P P
y a.x b cos + , frong do Ia goc fao boI duong fhang va fruc hoanh
|fruong hop duong fhang hoI quy nam fhang dung Ia khong xay ra, do do,
( 2, 2 ) ). o ho so a chnh Ia ho so goc cua duong fhang, fuc , non
.
a fan =
arcfana =
CIaI fhuaf gom cum duoc fhIof ko IaI nhu sau :
Inpuf :
- A Ia bang gom N bo so IIou n fhuoc fnh : ( )
1 2 n
X , X , ..., X
- k Ia so cum muon phan hoach
- Ham do do ( ) d x, y : fra vo do do fnh fuong fu gIua haI bo so IIou x va y.
Oufpuf :
- Ia k cum da duoc phan hoach, nghIa Ia
1
C ,..., C
k
1 2 k
C C ... C A = , va
I j
C C = , , I, j 1, ..., k = I j .
1 : Chon f nhaf dIom baf ky frong A Iam phan fu |dIom) khoI dau cho k cum
|khoI dau, moI cum co f nhaf haI phan fu).
2k


15
2 : Tm phuong frnh duong fhang hoI quy cho moI cum.
3 : VoI moI phan fu |bo so IIou) frong bang A,
p
x p 1, 2, ..., N = , fhuc hIon phan
|gom) vao cum gan nhaf, fhoo cach :
p
x
3.1 Tm khoang cach bo nhaf fu don cac duong fhang hoI quy cua cac
cum.
p
x
3.2 Phan vao cum fm duoc o 3.1.
p
x
4 : Nou mof frong cac buoc 3.2 |da fhuc hIon) Iam fhay doI su phan cum cua ,
nghIa Ia hoac fruoc do chua fung duoc phan cum hoac cum cu cua khac voI
cum moI, fh quay fro IaI buoc 2.
p
x
p
x
p
x
CaI daf : Tuong fu nhu muc 4.1, fa fhay ma Ionh xu Iy su kIon cIIck cua nuf Thuc
hIon bang ma Ionh sau :
// 4.1
// - Mo fIIo oxcoI
Microsoft.Office.Interop.Excel.Application UngDungExcel;
Microsoft.Office.Interop.Excel.Workbook wb;
Microsoft.Office.Interop.Excel.Worksheet s, ns;
UngDungExcel = new Microsoft.Office.Interop.Excel.Application();
UngDungExcel.Visible = true;
// - Ton & duong dan fIIo oxcoI nam frong foxfox1
wb = UngDungExcel.Workbooks.Open(textBox1.Text, 0, false, 5, "", "", false,
Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, 0, true,
false, false);
// - Cho bIon s fro don shoof dau fIon frong fIIo oxcoI |fhu fu cac shoof baf dau fu 1)
s = (Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets[1];
// - om so dong frong bang du IIou Inpuf o shoof s
int n = 1;
while (s.get_Range("A" + n.ToString(), "A" + n.ToString()).Value2 != null)
{ // Iap IaI vIoc fang n cho don khI o An Ia o frong |=nuII)
n++;
}
n -= 1;
// - oc du IIou fu bang vao cac mang X, Y, va TVC
double[] X = new double[n];
double[] Y = new double[n];
int[] TVC = new int[n];
int k = 0;
for (int i = 1; i <= n; i++)
{
X[i-1] = (double)s.get_Range("A" + i.ToString(), "A" + i.ToString()).Value2;
Y[i-1] = (double)s.get_Range("B" + i.ToString(), "B" + i.ToString()).Value2;
// nou o CI do frong, nghIa Ia dIom nay khong duoc phan Iam dIom khoI dau cho
// baf ky cum nao
if (s.get_Range("C" + i.ToString(), "C" + i.ToString()).Value2 == null)
{
TVC[i-1] = 0;
}
else // nou nguoc IaI fh phan dIom nay vao cum co chI so faI o CI
{
TVC[i-1] = int.Parse(s.get_Range("C" + i.ToString(), "C" +
i.ToString()).Value2.ToString());
if (k < TVC[i-1]) k = TVC[i-1]; // k Ia chI so Ion nhaf frong cof C => k Ia so cum
}// end if
}// end for
double[] TCHSa = new double[k]; // TCHSaI|, TCHSbI|, Ia ho so a, ho so b cua duong fhang
double[] TCHSb = new double[k]; // hoI quy cua cum fhu I,


16


17
double[] TBx = new double[k]; // TxI|, TyI|, fusoI|, mausoI| Ia cac bIon frung gIan dung do
double[] TBy = new double[k]; //fnh foan duong hoI quy cho cum fhu I fhoo cong fhuc o muc 1
double[] tuso = new double[k];
double[] mauso = new double[k];
int[] SDTC = new int[k];
// 4.2 : Tao shoof moI
// - Tao shoof moI va cho bIon ns fro don shoof nay, shoof moI so dung do chua cac kof qua fnh foan
//cung nhu kof qua cuoI cung.
ns =
(Microsoft.Office.Interop.Excel.Worksheet)wb.Worksheets.Add(System.Type.Miss
ing, wb.Worksheets[wb.Worksheets.Count], System.Type.Missing,
System.Type.Missing);
// - Trang fr cho shoof moI
ns.get_Range("A1","A1").Value2 = "S im l " + n.ToString() + ", s cm l " + k;
ns.get_Range("A2", "A2").Value2 = "X";
ns.get_Range("B2", "B2").Value2 = "Y";
ns.get_Range("C2", "C2").Value2 = "Thuc cm";
int d;
//ghI bang du IIou Inpuf fro ra shoof moI, faI haI cof A va .
for (int i = 0; i < n; i++)
{
d = i+3;
ns.get_Range("A" + d.ToString(), "A" + d.ToString()).Value2 = X[i];
ns.get_Range("B" + d.ToString(), "B" + d.ToString()).Value2 = Y[i];
}
for (int i = 0; i < k; i++)
{
ns.get_Range(((char)((int)'D' + i * 2)).ToString() + "2", ((char)((int)'D' +
(i * 2 + 1))).ToString() + "2").Merge(Type.Missing);
ns.get_Range(((char)((int)'D' + i*2)).ToString() + "2", ((char)((int)'D' +
i*2)).ToString() + "2").Value2 = "TmCm" + (i+1).ToString();
ns.get_Range(((char)((int)'D' + i+k*2)).ToString() + "2", ((char)((int)'D' +
i+k*2)).ToString() + "2").Value2 = "KC n C" + (i + 1).ToString();
}
// 4.3 : Thuc hIon gIaI fhuaf gom cum
bool stop = false;
int LanLap = 0; // bIon nay ghI nhan IaI so Ian gIaI fhuaf phaI Iap IaI
while (stop==false)
{
stop = true; // - Nou co su fhay doI frong vIoc phan cum cho baf ky dIom nao, fa dou so gan
IaI //cho sfop=faIso do phu hop voI dIou kIon Iap cua vong vhIIo
// - Tm duong fhang hoI quy dI qua moI cum
for (int i = 0; i < k; i++)
{
SDTC[i] = 0;
TBx[i] = 0;
TBy[i] = 0;
tuso[i] = 0;
mauso[i] = 0;
TCHSa[i] = 0;
TCHSb[i] = 0;
}
for (int i = 0; i < n; i++)
{
if (TVC[i] > 0)
{
//dom so dIom cua moI cum va cong don Tx, Ty do chuan bj fnh frung bnh
SDTC[TVC[i] - 1] += 1;
TBx[TVC[i] - 1] += X[i];
TBy[TVC[i] - 1] += Y[i];
}
}
for (int i = 0; i < k; i++)


18
{
if (SDTC[i]<2)
{
MessageBox.Show("S im chn cho mi cm phi t 2 tr ln)");
return;
}
TBx[i] = TBx[i]/SDTC[i];
TBy[i] = TBy[i] / SDTC[i];
}
// fnh fIop cac fham so frung gIan khac fhoo cong fhuc o muc 1
for (int i = 0; i < n; i++)
{
if (TVC[i] > 0)
{
double xi, yi;
xi = X[i] - TBx[TVC[i]-1];
yi = Y[i] - TBy[TVC[i] - 1];
tuso[TVC[i] - 1] += (xi * yi);
mauso[TVC[i] - 1] += (xi * xi);
}
}
// cuoI cung, fnh cac ho so a, b cua cac duong hoI quy
for (int i = 0; i < k; i++)
{
TCHSa[i] = tuso[i] / mauso[i];
TCHSb[i] = TBy[i] - TCHSa[i] * TBx[i];
// xuaf cac ho so nay ra fIIo oxcoI
ns.get_Range(((char)((int)'D' + i * 2)).ToString() + "3", ((char)((int)'D'
+ i * 2)).ToString() + "3").Value2 = TCHSa[i];
ns.get_Range(((char)((int)'D' + (i * 2 + 1))).ToString() + "3",
((char)((int)'D' + (i * 2 + 1))).ToString() + "3").Value2 = TCHSb[i];
}
// - uyof IaI qua moI dIom, fm xom dIom nao gan cum nao nhaf fh phan IaI dIom vao cum do
for (int i = 0; i < n; i++)
{
// gIa su dIom I gan cum 1 nhaf
double tmp = Math.Abs(TCHSa[0]*X[i] + TCHSb[0] - Y[i]);
double alpha = Math.Atan(TCHSa[0]);
double min = Math.Cos(alpha)*tmp;
int tamcu = TVC[i]; // Iuu IaI fam cu
TVC[i] = 1;
ns.get_Range(((char)((int)'D' + (k * 2))).ToString() + (3 + i).ToString(),
((char)((int)'D' + (k * 2))).ToString() + (3 + i).ToString()).Value2 = min;
// so sanh voI cac cum con IaI, nou co cum nao gan hon fh fhay TVCI| bang cum do
for (int j = 1; j < k; j++)
{
tmp = Math.Abs(TCHSa[j] * X[i] + TCHSb[j] - Y[i]);
alpha = Math.Atan(TCHSa[j]);
tmp = Math.Cos(alpha) * tmp;
ns.get_Range(((char)((int)'D' + (j + k * 2))).ToString() + (3 +
i).ToString(), ((char)((int)'D' + (j + k * 2))).ToString() + (3 +
i).ToString()).Value2 = tmp;
if (tmp < min)
{
min = tmp;
TVC[i] = j+1;
}
}
ns.get_Range("C" + (i + 3).ToString(), "C" + (i + 3).ToString()).Value2 =
TVC[i];
// nou fam moI khac fam cu fh gan sfop = faIso do Iap IaI gIaI fhuaf Ian nua
if ((stop==true)&&(TVC[i] != tamcu)) stop = false;
}// kof fhuc cua vong Iap for I
// - KIom fra Iua chon o chockbox ung IaI sau moI buoc Iap
if ((checkBox1.Checked==true)&&(stop == false))


19
{
LanLap += 1;
MessageBox.Show("Thut ton gom cm cha kt thc, y l ln lp th " + LanLap.ToString());
}
};// Kof fhuc cua vong vhIIo, ra khoI vong vhIIo nay Ia gIaI fhuaf kof fhuc
// 4.4 : Xuaf kof qua ra fIIo oxcoI va vo do fhj cac cum
// - ChI foa do cac dIom fhuoc cum ra fIIo oxcoI
int[] CS = new int[k]; // - CSI| so Ia chI so cua cum fhu I, CSI| so fang dan fu 0 don STCI|
for (int c = 0; c < k; c++)
{
ns.get_Range(((char)((int)'D' + c * 2)).ToString() + "4", ((char)((int)'D' +
(c * 2 + 1))).ToString() + "4").Merge(Type.Missing);
ns.get_Range(((char)((int)'D' + c * 2)).ToString() + "4", ((char)((int)'D' +
c * 2)).ToString() + "4").Value2 = "im thuc cm";
CS[c] = 0;
}
// duyof qua fung dIom, xom dIom nay fhuoc cum nao fh ghI ra fIIo oxcoI o cof fuong ung
for (int c = 0; c < n; c++)
{
if (TVC[c] > 0)
{
ns.get_Range(((char)((int)'D' + (TVC[c] - 1) * 2)).ToString() + (5 +
CS[TVC[c] - 1]).ToString(), ((char)((int)'D' + (TVC[c] - 1) * 2)).ToString() + (5
+ CS[TVC[c] - 1]).ToString()).Value2 = X[c];
ns.get_Range(((char)((int)'D' + (TVC[c] - 1) * 2+1)).ToString() + (5 +
CS[TVC[c] - 1]).ToString(), ((char)((int)'D' + (TVC[c] - 1) * 2+1)).ToString() +
(5 + CS[TVC[c] - 1]).ToString()).Value2 = Y[c];
CS[TVC[c]-1] += 1;
}
}
// - Vo do fhj cac cum
Microsoft.Office.Interop.Excel.ChartObjects co =
(Microsoft.Office.Interop.Excel.ChartObjects)ns.ChartObjects(Type.Missing);
Microsoft.Office.Interop.Excel.ChartObject tt =
(Microsoft.Office.Interop.Excel.ChartObject)co.Add(400, 0, 450, 300);
tt.Chart.ChartType = Microsoft.Office.Interop.Excel.XlChartType.xlXYScatter;
Microsoft.Office.Interop.Excel.SeriesCollection sr;
// fa so vo haI do fhj, do fhj fhu nhaf Ia hon hop cua cac cum |moI cum so Ia mof mau khac nhau)
//do fhj fhu haI Ia do fhj cua bang du IIou Inpuf ban dau
// Truoc fIon vo do fhj fhu nhaf
sr =
(Microsoft.Office.Interop.Excel.SeriesCollection)tt.Chart.SeriesCollection(T
ype.Missing);
Microsoft.Office.Interop.Excel.Series x;
for (int c = 0; c < k; c++)
{
x = sr.NewSeries();// moI mof sorIos Ia mof cum
// cung cap foa do cac dIom fhuoc cum cho cac bo du IIou X va Y cua sorIos
x.XValues = ns.get_Range(((char)((int)'D' + c * 2)).ToString() + "5",
((char)((int)'D' + c * 2)).ToString() + (4 + CS[c]).ToString());
x.Values = ns.get_Range(((char)((int)'D' + c * 2+1)).ToString() + "5",
((char)((int)'D' + c * 2+1)).ToString() + (4+CS[c]).ToString());
}
// Vo do fhj fhu haI
tt = (Microsoft.Office.Interop.Excel.ChartObject)co.Add(400, 300, 450, 300);
tt.Chart.ChartType = Microsoft.Office.Interop.Excel.XlChartType.xlXYScatter;
sr =
(Microsoft.Office.Interop.Excel.SeriesCollection)tt.Chart.SeriesCollection(T
ype.Missing);
x = sr.NewSeries();
x.XValues = ns.get_Range("A3", "A" + (n+2).ToString());
x.Values = ns.get_Range("B3", "B" + (n + 2).ToString());
MessageBox.Show("Thut ton kt thc, xem file excel thy kt qu .");


20
Chay fhu chuong frnh voI fIIo oxcoI da chuan bj o buoc 3, chu y rang phaI chon
khoI dau cho moI cum f nhaf Ia 2 dIom, fa so nhan duoc kof qua nhu mong muon
da daf ra.
4.3 Thu nghem
...phan nay chua Iam...


21
af van do cho doc gIa :
1. CaI daf phuong phap cho fruong hop bang du IIou co 3, 4, hoac 5 fhuoc fnh.
2. Su dung do do khac.
3. o sung vao phan phan fch fuong quan fuyon fnh gIua cac cap IoaI hang : voI
moI cap, fhu gom fhanh 2, 3 cum roI fnh foan ho so fuong quan fron moI cum.
4. Khao saf san Iuong fIou fhu cua IoaI hang x fhoo fung ngay frong nam 1998.
a. Iap bang so IIou.
b. Su dung oxcoI vo do fhj do xom su phan bo cua du IIou.
c. Thuc hIon gom cum voI k = 2, 3, 4.
d. Tnh ho so fuong quan fron moI cum
5. Iam fuong fu voI Khach hang o fuoI
6. anh gIa do fof cua cac cum
7. Com cum khach hang voI cac fhuoc fnh : do fuoI, |fnh frang gIa dnh) fhu nhap,
so con, houso ovnor, oducafIon

You might also like