package dk;
public class pro {
int[] point=new int[100];
int[] pointx=new int[100];
double[] avg=new double[101];
double[] p=new double[11];
double[] mu=new double[11];
double[] sig=new double[11];
int datanumber,number;
double[] ps=new double[11];
double[] mus=new double[11];
double[] sigs=new double[11];
double[][] q=new double[31][11];
public static void main(String[] args) {
pro r=new pro();
}
pro(){
int s,sx;
point[ 1 ]=1351 ;
point[ 2 ]= 296 ;
point[ 3 ]= 265 ;
point[ 4 ]= 227 ;
point[ 5 ]= 238 ;
point[ 6 ]= 209 ;
point[ 7 ]= 197 ;
point[ 8 ]= 169 ;
point[ 9 ]= 183 ;
point[ 10 ]= 149 ;
point[ 11 ]= 164 ;
point[ 12 ]= 133 ;
point[ 13 ]= 136 ;
point[ 14 ]= 125 ;
point[ 15 ]= 141 ;
point[ 16 ]= 124 ;
point[ 17 ]= 99 ;
point[ 18 ]= 89 ;
point[ 19 ]= 61 ;
point[ 20 ]= 60 ;
point[ 21 ]= 410 ;
pointx[ 1 ]= 54 ;
pointx[ 2 ]= 205 ;
pointx[ 3 ]= 339 ;
pointx[ 4 ]= 380 ;
pointx[ 5 ]= 407 ;
pointx[ 6 ]= 385 ;
pointx[ 7 ]= 358 ;
pointx[ 8 ]= 336 ;
pointx[ 9 ]= 298 ;
pointx[ 10 ]= 265 ;
pointx[ 11 ]= 223 ;
pointx[ 12 ]= 234 ;
pointx[ 13 ]= 191 ;
pointx[ 14 ]= 168 ;
pointx[ 15 ]= 157 ;
pointx[ 16 ]= 133 ;
pointx[ 17 ]= 93 ;
pointx[ 18 ]= 89 ;
pointx[ 19 ]= 86 ;
pointx[ 20 ]= 77 ;
pointx[ 21 ]= 348 ;
avg[ 1 ]= 270 ;
avg[ 2 ]= 265.9 ;
avg[ 3 ]= 311.9 ;
avg[ 4 ]= 317.3 ;
avg[ 5 ]= 351.2 ;
avg[ 6 ]= 357.7 ;
avg[ 7 ]= 395.9 ;
avg[ 8 ]= 424.1 ;
avg[ 9 ]= 457.5 ;
avg[ 10 ]= 483.8 ;
avg[ 11 ]= 572.2 ;
avg[ 12 ]= 569.3 ;
avg[ 13 ]= 608.9 ;
avg[ 14 ]= 677.7 ;
avg[ 15 ]= 691.8 ;
avg[ 16 ]= 702.8 ;
avg[ 17 ]= 769.8 ;
avg[ 18 ]= 812 ;
avg[ 19 ]= 839 ;
avg[ 20 ]= 884.1 ;
avg[ 21 ]= 1193.40 ;
datanumber=21;
number=10;
for(sx=1;sx<number+1;sx++){
mu[sx]=2*sx;
sig[sx]=2;
p[sx]=0.1;
}
int tr;
for(tr=1;tr<6;tr++){
trial sub=new trial();
sub.point=point;
sub.mu=mu;
sub.p=p;
sub.sig=sig;
sub.number=number;
sub.datanumber=datanumber;
sub.makedata();
ps=sub.p;
mus=sub.mu;
sigs=sub.sig;
for(s=1;s<number+1;s++){
p[s]=0.9*p[s]+0.1*ps[s];
mu[s]=0.9*mu[s]+0.1*mus[s];
sig[s]=0.9*sig[s]+0.1*sigs[s];
}
}
for(sx=1;sx<number+1;sx++){
System.out.println(p[sx]+","+mu[sx]+","+sig[sx]);
}
}
}
package dk;
public class trial {
int[] point=new int[100];
int[] pointx=new int[100];
double[] p=new double[11];
double[] mu=new double[11];
double[] sig=new double[11];
double[] ps=new double[11];
double[][] q=new double[31][11];
int number,datanumber;
void makedata(){
int s,sx;
for(s=1;s<datanumber+1;s++){
double p2=0;
for(sx=1;sx<number+1;sx++){
p2=p2+p[sx]*f(s,mu[sx],sig[sx]);
}
for(sx=1;sx<number+1;sx++){
q[s][sx]=p[sx]*f(s,mu[sx],sig[sx])/p2;
}
}
int de=0;
for(s=1;s<datanumber+1;s++){
de=de+point[s];
}
for(sx=1;sx<number+1;sx++){
double pp=0;
for(s=1;s<datanumber+1;s++){
pp=pp+q[s][sx]*point[s];
}
ps[sx]=pp/de;
}
for(sx=1;sx<number+1;sx++){
double a1=0;
double a2=0;
for(s=1;s<datanumber+1;s++){
a1=a1+q[s][sx]*point[s];
a2=a2+s*q[s][sx]*point[s];
}
if(a1>0)mu[sx]=a2/a1;
a1=0;
a2=0;
for(s=1;s<datanumber+1;s++){
a1=a1+q[s][sx]*point[s];
a2=a2+q[s][sx]*point[s]*(s-mu[sx])*(s-mu[sx]);
}
if(a1>0)sig[sx]=Math.sqrt(a2/a1);
}
for(sx=1;sx<number+1;sx++){
p[sx]=ps[sx];
}
}
double f(double x,double mux,double sigx){
double pi,f1,f2;
pi=Math.PI;
f2=Math.sqrt(2*pi*sigx*sigx);
f1=-(x-mux)*(x-mux)/(2*sigx*sigx);
return Math.exp(f1)/f2;
}
}
最終更新:2017年01月04日 15:58