package topic;
import tool.*;
public class pro {
int s,datanumber;
String[] data=new String[5000];
int[] point=new int[500];
int[] v=new int[50000];
int number;
int[] x=new int[101];
double[] mu=new double[101];
double[] sig=new double[101];
double[] p=new double[101];
double[][] qs=new double[101][101];
double[][] q=new double[101][101];
double[] ps=new double[101];
public static void main(String[] args) {
pro te=new pro();
}
pro(){
readfile sub7=new readfile();
sub7.makedata("data.csv","UTF-8");
data=sub7.data;
datanumber=sub7.datanumber;
for(s=2;s<datanumber+1;s++){
String[] x=data[s].split(",");
point[s-1]=Integer.parseInt(x[1]);
}
int sx,tx;
tx=0;
for(s=1;s<datanumber;s++){
for(sx=1;sx<point[s]+1;sx++){
tx=tx+1;
v[tx]=s;
}
}
number=tx;
System.out.println(number);
int tr;
for(tr=1;tr<11;tr++){
for(s=1;s<101;s++){
x[s]=randx();
}
mu[tr]=mux();
sig[tr]=sigx(mu[tr]);
}
for(s=1;s<11;s++){
p[s]=0.1;
}
int delta;
for(delta=1;delta<3;delta++){
for(s=1;s<datanumber;s++){
for(sx=1;sx<11;sx++){
qs[s][sx]=f(s,mu[sx],sig[sx])*p[sx];
}
}
for(s=1;s<datanumber;s++){
double q1=0;
for(sx=1;sx<11;sx++){
q1=q1+qs[s][sx];
}
for(sx=1;sx<11;sx++){
q[s][sx]=qs[s][sx]/q1;
}
}
for(sx=1;sx<11;sx++){
mu[sx]=mumu(sx);
sig[sx]=sigsig(sx);
}
for(sx=1;sx<11;sx++){
ps[sx]=0;
}
for(s=1;s<datanumber;s++){
for(sx=1;sx<11;sx++){
ps[sx]=ps[sx]+point[s]*q[s][sx];
}
}
double q1=0;
for(sx=1;sx<11;sx++){
q1=q1+ps[sx];
}
for(s=1;s<11;s++){
p[s]=ps[s]/q1;
}
for(s=1;s<11;s++){
System.out.println(delta+","+mu[s]+","+sig[s]+","+p[s]);
}
}
}
double mumu(int sx){
double m1,m2;
m1=0;
for(s=1;s<datanumber;s++){
m1=m1+s*point[s]*q[s][sx];
}
m2=0;
for(s=1;s<datanumber;s++){
m2=m2+point[s]*q[s][sx];
}
return m1/m2;
}
double sigsig(int sx){
double m1,m2;
m1=0;
for(s=1;s<datanumber;s++){
m1=m1+(s-mu[sx])*(s-mu[sx])*point[s]*q[s][sx];
}
m2=0;
for(s=1;s<datanumber;s++){
m2=m2+point[s]*q[s][sx];
}
double m3=m2/m1;
m3=Math.sqrt(m3);
return m3;
}
double mux(){
double m1;
m1=0;
for(s=1;s<101;s++){
m1=m1+x[s];
}
m1=m1/100;
return m1;
}
double f(double x,double mu,double sig){
double pi,f1,f2;
pi=Math.PI;
f2=Math.sqrt(2*pi*sig*sig);
f1=-(x-mu)*(x-mu)/(2*sig*sig);
return Math.exp(f1)/f2;
}
double sigx(double mm){
double m1;
m1=0;
for(s=1;s<101;s++){
m1=m1+(x[s]-mm)*(x[s]-mm);
}
m1=m1/99;
m1=Math.sqrt(m1);
return m1;
}
int randx(){
double n1;
int n2;
n1=number*Math.random();
n2=(int)n1+1;
int m1=v[n2];
return m1;
}
}
最終更新:2016年06月15日 02:17