使用matlab對輸入資料進行k-means聚類。演算法的思想來自基於密度方法的聚類
% 生成資料
mu1 =[20
20];s1
=[100
;010]
;data1 =
mvnrnd
(mu1,s1,
100)
;mu2 =[80
80];s2
=[200
;030]
;data2 =
mvnrnd
(mu2,s2,
200)
;mu3 =[20
80];s3
=[200
;010]
;data3 =
mvnrnd
(mu3,s3,
100)
;mu4 =[80
20];s4
=[200
;010]
;data4 =
mvnrnd
(mu4,s4,
100)
;data =
[data1; data2; data3; data4]
;% image =
imread
('data.png');
% image =
image(:
,:,1
);%[x,y]
=find
(image ==0)
;% data=
[x,y];%
% 畫出原始資料
figure(1
);plot
(data(:
,1),
data(:
,2),
'k.');
grid on
daspect([
111]
);xlabel
('x');
ylabel
('y');
title
('原始輸入點');
hold on;
%% 初始聚類結果
temp =
randperm
(size
(data,1)
);for i =
1: k
center
(i,:)=
data
(temp
(i),:)
;color
(i,:)=
[rand()
,rand()
,rand()
];endfor i =
1: k
x_dist(1
,:)=
data(:
,1)-
center
(i,1);
y_dist(2
,:)=
data(:
,2)-
center
(i,2);
distance =
sqrt
(x_dist(1
,:).
^2+y_dist(2
,:).
^2);
% 歐氏距離
dist(:
,i)= distance';
end[mindist, cluster]
=min
(dist,
,2);
err_rec(1
)=mean
(mindist)
;disp([
'誤差err='
,num2str
(err_rec(1
))])
;figure(2
);for i =
1: k
index = cluster==i;
plot
(data
(index,1)
,data
(index,2)
,'.'
,'color'
,color
(i,:),
'marke***cecolor'
,color
(i,:))
; hold on
plot
(center
(i,1),
center
(i,2),
'k*');
endhold off
grid on
daspect([
111]
);pause
(0.1);
iteration =1;
while(1
)for i =
1: k
index = cluster==i;
center
(i,:)=
mean
(data
(index,:)
);x_dist(1
,:)=
data(:
,1)-
center
(i,1);
y_dist(2
,:)=
data(:
,2)-
center
(i,2);
distance =
sqrt
(x_dist(1
,:).
^2+y_dist(2
,:).
^2);
% 歐氏距離
dist(:
,i)= distance';
end[mindist, cluster]
=min
(dist,
,2);
err_rec
(iteration+1)
=mean
(mindist)
;
h =figure(2
);for i =
1: k
index = cluster==i;
plot
(data
(index,1)
,data
(index,2)
,'.'
,'color'
,color
(i,:),
'marke***cecolor'
,color
(i,:))
; hold on
plot
(center
(i,1),
center
(i,2),
'k*');
endhold off
grid on
daspect([
111]
);pause
(0.1);
drawnow
disp([
'迭代次數ieration='
,num2str
(iteration)])
;disp([
'誤差err='
,num2str
(err_rec
(iteration+1)
)]);
if iteration >3&&
err_rec
(iteration)
-err_rec
(iteration+1)
< step_tolerance
disp
('————————————————————————————');
disp
('結束聚類');
break
enditeration = iteration +1;
endfigure;
plot(0
:iteration,err_rec)
;grid on
MATLAB 使用 Matlab 進行曲線擬合
在matlab中,用polyfit函式來求得最小二乘擬合多項式的係數,再用polyval函式按所得的多項式計算所給點上的函式近似值。x linspace 0,2 pi,20 y sin x p polyfit x,y,3 y1 polyval p,x plot x,y,o x,y1,legend r...
Matlab 使用GPU進行濾波運算
從matlab2013版本開始,matlab將可以直接呼叫gpu進行平行計算,而不再需要安裝gpumat庫。這一改動的好處是原有的matlab內建函式都可以直接運用,只要資料格式是gpuarray格式的,那麼計算過程會自動的呼叫gpu進行計算 具體操作起來,只要知道下面幾個函式就可以像編寫簡單的m檔...
使用matlab對輸入資料進行卡爾曼濾波
使用matlab對輸入資料進行卡爾曼濾波。簡單說明一下程式中的資料。假設一輛汽車從初始點 0,10 開始行駛,初始速度沿y軸正方向10m s。然後在觀測途中向右先加速再減速變換車道。整個過程其實有x軸座標,y軸座標,x軸速度,y軸速度以及x軸的加速度這5個物理量。但在卡爾曼濾波時我只用了x軸座標,y...