% 目标函数:高斯混合模N[x(i),mu,sm]=0.8N[x(i),mu1,sm1]+0.2N[x(i),mu2,sm2]
% mu1=2,sm1=1; mu2=1,sm2=1
clc
clear all
N=30; %变量x数目为30个
for i=1:N %构造目标函数
if rand(1)>0.2 x(i)=randn(1)+2;
else x(i)=randn(1)+1;
end
end
a(1,1)=0.8;mu(1,1)=3;sm(1,1)=2; %给定初始值
a(2,1)=0.2;mu(2,1)=-2;sm(2,1)=7;
for n=1:30 %EM迭代次数为30次
for j=1:2 %高斯分量2个
for i=1:N
p1(j)=a(j,n)*normpdf(x(i),mu(j,n),sm(j,n));
P=0; %清零
for s=1:2
P=a(s,n)*normpdf(x(i),mu(s,n),sm(s,n))+P; %累加
end
p(j,i)=p1(j)/P;
end
temp1=0; temp2=0;temp3=0;
for i=1:N
temp1=p(j,i)+temp1; %累加
temp2=p(j,i)*x(i)+temp2; %累加
temp3=p(j,i)*((x(i)-(temp2/temp1)).^2)+temp3; %累加
end
a(j,n+1)=temp1/N; %得到后面的项
mu(j,n+1)=temp2/temp1;
sm(j,n+1)=sqrt(temp3/temp1);
end
end