package mata;
public class pro {
int number;
int[] point=new int[1001];
double[][] rate=new double[1001][101];
int subnumber;
double[] mu=new double[101];
double[] sig=new double[101];
double[] rate_topic=new double[1001];
double[][] p=new double[1001][101];
public static void main(String[] args) {
pro t=new pro();
}
pro(){
int s;
number=500;
for(s=1;s<number+1;s++){
point[s]=(int)(100*Math.random());
}
for(s=1;s<11;s++){
rate_topic[s]=0.1;
}
mu[1]=60;
mu[2]=30;
mu[3]=40;
mu[4]=70;
mu[5]=50;
mu[6]=65;
mu[7]=34;
mu[8]=46;
mu[9]=7;
mu[10]=20;
for(s=1;s<11;s++){
sig[s]=10;
}
int tr;
for(tr=1;tr<501;tr++){
int sx;
for(s=1;s<number+1;s++){
for(sx=1;sx<11;sx++){
p[s][sx]=f(point[s],mu[sx],sig[sx])*rate_topic[sx];
}
double p1=0;
for(sx=1;sx<11;sx++){
p1=p1+p[s][sx];
}
for(sx=1;sx<11;sx++){
rate[s][sx]=p[s][sx]/p1;
}
}
for(sx=1;sx<11;sx++){
mu[sx]=seek_mu(sx);
sig[sx]=seek_sig(sx);
}
for(s=1;s<11;s++){
double p1=0;
for(sx=1;sx<number+1;sx++){
p1=p1+rate[sx][s];
}
rate_topic[s]=p1/number;
}
}
int sx;
for(s=1;s<11;s++){
System.out.println(mu[s]+","+rate_topic[s]);
}
}
double seek_mu(int sx){
double m1,m2;
m1=0;
int s;
for(s=1;s<number+1;s++){
m1=m1+point[s]*rate[s][sx];
}
m2=0;
for(s=1;s<number+1;s++){
m2=m2+rate[s][sx];
}
return m1/m2;
}
double seek_sig(int sx){
double m1,m2;
m1=0;
int s;
for(s=1;s<number+1;s++){
m1=m1+(point[s]-mu[sx])*(point[s]-mu[sx])*rate[s][sx];
}
m2=0;
for(s=1;s<number+1;s++){
m2=m2+rate[s][sx];
}
double m3=m1/m2;
m3=Math.sqrt(m3);
return m3;
}
double f(double x1,double mux,double sigx){
double pi,f1,f2;
pi=Math.PI;
f2=Math.sqrt(2*pi*sigx*sigx);
f1=-(x1-mux)*(x1-mux)/(2*sigx*sigx);
return Math.exp(f1)/f2;
}
}
最終更新:2016年06月17日 04:10