基于 Bayes 分类的 MATLAB 程序 
%题中所给各类样本数据及观察 x 
w1=[0 0;2 1;1 0];w2=[-1,1;-2,0;-2,-1];w3=[0,-2;0,-1;1,-2]; 
x=[-2,2]'; 
syms x1 x2 
Xr=[x1,x2];Xc=[x1;x2]; 
%算出各类状态的先验概率, 
samplenum=length(w1)+length(w2)+length(w3); 
p1=length(w1)/samplenum; 
p2=length(w2)/samplenum; 
p3=length(w3)/samplenum; 
%算出各类的均值,协方差,及协方差的逆矩阵. 
u1=mean(w1)';u2=mean(w2)';u3=mean(w3)'; 
D1=cov(w1);D2=cov(w2);D3=cov(w3); 
invD1=inv(D1);invD2=inv(D2);invD3=inv(D3); 
 
%在三类协方差不相等时,分别计算观察 x 的 gi(x) i=1,2,3;决定观察 x 属于的类别. 
g1=-1/2*(x-u1)'*invD1*(x-u1)-1/2*log(det(D1))+log(p1); 
g2=-1/2*(x-u2)'*invD2*(x-u2)-1/2*log(det(D2))+log(p2); 
g3=-1/2*(x-u3)'*invD3*(x-u3)-1/2*log(det(D3))+log(p3); 
g=[g1,g2,g3]; 
w=find(g==max(g)); 
fprintf('协方差不相等时,x belongs to W%d\n',w); 
%求出三类相邻区域的分界线方程. 
W1=-0.5*invD1;W2=-0.5*invD2;W3=-0.5*invD3; 
ww1=invD1*u1;ww2=invD2*u2;ww3=invD3*u3; 
w10=-1/2*u1'*invD1*u1-1/2*log(det(D1))+log(p1); 
w20=-1/2*u2'*invD2*u2-1/2*log(det(D2))+log(p2); 
w30=-1/2*u3'*invD3*u3-1/2*log(det(D3))+log(p3); 
%W1 与 W2 的分界线. 
rear=w10-w20; 
g12=Xr*round(W1-W2)*Xc+(ww1-ww2)'*Xc+rear; 
g12=simple(g12); 
%W1 与 W3 的分界线. 
rear=w10-w30; 
g13=Xr*round(W1-W3)*Xc+(ww1-ww3)'*Xc+rear; 
g13=simple(g13); 
%W2 与 W3 的分界线. 
rear=w20-w30; 
g23=Xr*round(W2-W3)*Xc+(ww2-ww3)'*Xc+rear; 
g23=simple(g23); 
%绘制各类数据点及分界线. 
subplot(2,2,1) 
plot(w1(:,1),w1(:,2),'b+',w2(:,1),w2(:,2),'r*',w3(:,1),w3(:,2),'k.') 
hold on 
ezplot(g12) 
ezplot(g13) 
ezplot(g23) 
title('各类间混合分界线') 
subplot(2,2,2) 
plot(w1(:,1),w1(:,2),'b+',w2(:,1),w2(:,2),'r*') 
hold on 
ezplot(g12) 
legend('第一类','第二类','分界线') 
subplot(2,2,3) 
plot(w1(:,1),w1(:,2),'b+',w3(:,1),w3(:,2),'k.') 
hold on 
ezplot(g13) 
legend('第一类','第三类','分界线') 
subplot(2,2,4) 
plot(w2(:,1),w2(:,2),'r*',w3(:,1),w3(:,2),'k.') 
hold on 
ezplot(g23) 
legend('第二类','第三类','分界线') 
 
 
%三类协方差相等时,分别计算观察 x 的 gi(x) i=1,2,3;决定观察 x 属于的类别. 
D=D1+D2+D3;invD=inv(D); 
g1=(x-u1)'*invD*(x-u1); 
g2=(x-u2)'*invD*(x-u2); 
g3=(x-u3)'*invD*(x-u3); 
g=[g1,g2,g3]; 
w=find(g==min(g)); 
fprintf('协方差相等时,x belongs to w%d',w); 
W12=invD*(u1-u2);W13=invD*(u1-u3);W23=invD*(u2-u3); 
x120=1/2*(u1+u2)-(log(p1/p2)*(u1-u2))/((u1-u2)'*invD*(u1-u2)); 
x130=1/2*(u1+u3)-(log(p1/p3)*(u1-u3))/((u1-u3)'*invD*(u1-u3)) 
x230=1/2*(u2+u3)-(log(p2/p3)*(u2-u3))/((u2-u3)'*invD*(u2-u3)) 
 
%求出三类相邻区域的分界线方程. 
g12=W12'*(Xc-x120); 
g12=simple(g12); 
 
g13=W13'*(Xc-x130); 
g13=simple(g13); 
 
g23=W23'*(Xc-x230); 
g23=simple(g23); 
%绘制各类数据点及分界线. 
figure(2) 
subplot(2,2,1) 
plot(w1(:,1),w1(:,2),'b+',w2(:,1),w2(:,2),'r*',w3(:,1),w3(:,2),'k.') 
hold on 
ezplot(g12) 
ezplot(g13) 
ezplot(g23) 
title('各类间混合分界线') 
subplot(2,2,2) 
plot(w1(:,1),w1(:,2),'b+',w2(:,1),w2(:,2),'r*') 
hold on 
ezplot(g12) 
legend('第一类','第二类','分界线') 
subplot(2,2,3) 
plot(w1(:,1),w1(:,2),'b+',w3(:,1),w3(:,2),'k.') 
hold on 
ezplot(g13) 
legend('第一类','第三类','分界线') 
subplot(2,2,4) 
plot(w2(:,1),w2(:,2),'r*',w3(:,1),w3(:,2),'k.') 
hold on 
ezplot(g23) 
legend('第二类','第三类','分界线')