clear
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
sample_1=[]; mu_1=[1;2];cov_1=[4 0;0 6];
for i=1:400
a1=normrnd(mu_1,[sqrt(cov_1(1,1)),sqrt(cov_1(2,2))]');
sample_1=[sample_1,a1];
end
plot(sample_1(1,:),sample_1(2,:),'.');
training_sample_1=sample_1(:,1:300);
test_sample_1=sample_1(:,301:400);
S_1=zeros(2);
for i=1:numel(training_sample_1(1,:))
S_1=S_1+1/numel(training_sample_1(1,:))*(training_sample_1(:,i)-[mean(training_sample_1(1,:));mean(training_sample_1(2,:))])*(training_sample_1(:,i)-[mean(training_sample_1(1,:));mean(training_sample_1(2,:))])';
end
mu_sample_1_x=mean(training_sample_1(1,:));
mu_sample_1_y=mean(training_sample_1(2,:));
mu_sample_1=[mean(training_sample_1(1,:));mean(training_sample_1(2,:))];
revs_1=inv(S_1);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
sample_2=[]; mu_2=[5;3];cov_2=[5 0;0 1];
for i=1:300
a2=normrnd(mu_2,[sqrt(cov_2(1,1)),sqrt(cov_2(2,2))]');
sample_2=[sample_2,a2];
end
hold on
plot(sample_2(1,:),sample_2(2,:),'r.');
training_sample_2=sample_2(:,1:200);
test_sample_2=sample_2(:,201:300);
S_2=zeros(2);
for i=1:numel(training_sample_2(1,:))
S_2=S_2+1/numel(training_sample_2(1,:))*(training_sample_2(:,i)-[mean(training_sample_2(1,:));mean(training_sample_2(2,:))])*(training_sample_2(:,i)-[mean(training_sample_2(1,:));mean(training_sample_2(2,:))])';
end
mu_sample_2_x=mean(training_sample_2(1,:));
mu_sample_2_y=mean(training_sample_2(2,:));
mu_sample_2=[mean(training_sample_2(1,:));mean(training_sample_2(2,:))];
revs_2=inv(S_2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
sample_3=[]; mu_3=[4;7];cov_3=[2 0;0 9];
for i=1:600
a3=normrnd(mu_3,[sqrt(cov_3(1,1)),sqrt(cov_3(2,2))]');
sample_3=[sample_3,a3];
end
hold on
plot(sample_3(1,:),sample_3(2,:),'g.');
training_sample_3=sample_3(:,1:500);
test_sample_3=sample_3(:,501:600);
S_3=zeros(2);
for i=1:numel(training_sample_3(1,:))
S_3=S_3+1/numel(training_sample_3(1,:))*(training_sample_3(:,i)-[mean(training_sample_3(1,:));mean(training_sample_3(2,:))])*(training_sample_3(:,i)-[mean(training_sample_3(1,:));mean(training_sample_3(2,:))])';
end
mu_sample_3_x=mean(training_sample_3(1,:));
mu_sample_3_y=mean(training_sample_3(2,:));
mu_sample_3=[mean(training_sample_3(1,:));mean(training_sample_3(2,:))];
revs_3=inv(S_3);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%测试%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
det_S_1=det(S_1);det_S_2=det(S_2);det_S_3=det(S_3);
revs_1_11=revs_1(1,1);revs_1_12=revs_1(1,2);revs_1_21=revs_1(2,1);revs_1_22=revs_1(2,2);
revs_2_11=revs_2(1,1);revs_2_12=revs_1(1,2);revs_2_21=revs_1(2,1);revs_2_22=revs_1(2,2);
revs_3_11=revs_3(1,1);revs_3_12=revs_1(1,2);revs_3_21=revs_1(2,1);revs_3_22=revs_1(2,2);
p_1=numel(training_sample_1(1,:))/(numel(training_sample_1(1,:))+numel(training_sample_2(1,:))+numel(training_sample_3(1,:)));
p_2=numel(training_sample_2(1,:))/(numel(training_sample_1(1,:))+numel(training_sample_2(1,:))+numel(training_sample_3(1,:)));
p_3=numel(training_sample_3(1,:))/(numel(training_sample_1(1,:))+numel(training_sample_2(1,:))+numel(training_sample_3(1,:)));
g_1=inline('-1/2*(((x1-mu_sample_1_x)*revs_1_11+(x2-mu_sample_1_y)*revs_1_21)*(x1-mu_sample_1_x)+((x1-mu_sample_1_x)*revs_1_12+(x2-mu_sample_1_y)*revs_1_22) *(x2-mu_sample_1_y))-1/2*log(det_S_1)+log(p_1)');
g_2=inline('-1/2*(((x1-mu_sample_2_x)*revs_2_11+(x2-mu_sample_2_y)*revs_2_21)*(x1-mu_sample_2_x)+((x1-mu_sample_2_x)*revs_2_12+(x2-mu_sample_2_y)*revs_2_22) *(x2-mu_sample_2_y))-1/2*log(det_S_2)+log(p_2)');
g_3=inline('-1/2*(((x1-mu_sample_3_x)*revs_3_11+(x2-mu_sample_3_y)*revs_3_21)*(x1-mu_sample_3_x)+((x1-mu_sample_3_x)*revs_3_12+(x2-mu_sample_3_y)*revs_3_22) *(x2-mu_sample_3_y))-1/2*log(det_S_3)+log(p_3)');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
count_1=0;count_2=0;count_3=0;count_total=0;
for i=1:100
if g_1(det_S_1,mu_sample_1_x,mu_sample_1_y,p_1,revs_1_11,revs_1_12,revs_1_21,revs_1_22,test_sample_1(1,i),test_sample_1(2,i))<g_2(det_S_2,mu_sample_2_x,mu_sample_2_y,p_2,revs_2_11,revs_2_12,revs_2_21,revs_2_22,test_sample_1(1,i),test_sample_1(2,i)) || g_1(det_S_1,mu_sample_1_x,mu_sample_1_y,p_1,revs_1_11,revs_1_12,revs_1_21,revs_1_22,test_sample_1(1,i),test_sample_1(2,i))<g_3(det_S_3,mu_sample_3_x,mu_sample_3_y,p_3,revs_3_11,revs_3_12,revs_3_21,revs_3_22,test_sample_1(1,i),test_sample_1(2,i))
count_1=count_1+1;
end
end
for i=1:100
if g_2(det_S_2,mu_sample_2_x,mu_sample_2_y,p_2,revs_2_11,revs_2_12,revs_2_21,revs_2_22,test_sample_2(1,i),test_sample_2(2,i))<g_1(det_S_1,mu_sample_1_x,mu_sample_1_y,p_1,revs_1_11,revs_1_12,revs_1_21,revs_1_22,test_sample_2(1,i),test_sample_2(2,i)) || g_2(det_S_2,mu_sample_2_x,mu_sample_2_y,p_2,revs_2_11,revs_2_12,revs_2_21,revs_2_22,test_sample_2(1,i),test_sample_2(2,i))<g_3(det_S_3,mu_sample_3_x,mu_sample_3_y,p_3,revs_3_11,revs_3_12,revs_3_21,revs_3_22,test_sample_2(1,i),test_sample_2(2,i))
count_2=count_2+1;
end
end
for i=1:100
if g_3(det_S_3,mu_sample_3_x,mu_sample_3_y,p_3,revs_3_11,revs_3_12,revs_3_21,revs_3_22,test_sample_3(1,i),test_sample_3(2,i))<g_1(det_S_1,mu_sample_1_x,mu_sample_1_y,p_1,revs_1_11,revs_1_12,revs_1_21,revs_1_22,test_sample_3(1,i),test_sample_3(2,i)) || g_3(det_S_3,mu_sample_3_x,mu_sample_3_y,p_3,revs_3_11,revs_3_12,revs_3_21,revs_3_22,test_sample_3(1,i),test_sample_3(2,i))<g_2(det_S_2,mu_sample_2_x,mu_sample_2_y,p_2,revs_2_11,revs_2_12,revs_2_21,revs_2_22,test_sample_3(1,i),test_sample_3(2,i))
count_3=count_3+1;
end
end
legend('part one','part two','part three')
count_total=(count_1+count_2+count_3);
count_total/300