package vb;
public class pro {
int[] point=new int[11];
int s,number,datanumber;
double mu,sig;
double[] p=new double[11];
double[] delta=new double[50001];
public static void main(String[] args) {
pro t=new pro();
}
pro(){
number=10;
for(s=1;s<11;s++){
point[s]=10+s;
}
int p2=0;
for(s=1;s<11;s++){
p2=p2+point[s];
}
datanumber=p2;
mu=5;
sig=3;
for(s=1;s<11;s++){
p[s]=f(s,mu,sig);
}
double p1=0;
for(s=1;s<11;s++){
p1=p1+p[s];
}
for(s=1;s<11;s++){
p[s]=p[s]/p1;
}
double e1=0;
for(s=1;s<11;s++){
e1=e1+(point[s]-p2*p[s])*(point[s]-p2*p[s])/p[s];
}
/*e1*/
check sub=new check();
sub.p=p;
sub.number=number;
sub.datanumber=datanumber;
int n=sub.makedata(e1);
System.out.println(n);
}
int randx(){
int s;
double[] px=new double[100];
px[1]=p[1];
for(s=2;s<number+1;s++){
px[s]=px[s-1]+p[s];
}
double m1=Math.random();
int nn=1;
for(s=1;s<number;s++){
if(m1>px[s])nn=s;
}
return nn;
}
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;
}
}
package vb;
public class trial {
int s,number,datanumber;
int[] count=new int[500];
double[] p=new double[100];
double makedata(){
for(s=1;s<datanumber+1;s++){
int n=randx();
count[n]=count[n]+1;
}
double e2=0;
for(s=1;s<number+1;s++){
e2=e2+(count[s]-datanumber*p[s])*(count[s]-datanumber*p[s])/p[s];
}
return e2;
}
int randx(){
int s;
double[] px=new double[100];
px[1]=p[1];
for(s=2;s<number+1;s++){
px[s]=px[s-1]+p[s];
}
double m1=Math.random();
int nn=1;
for(s=1;s<number;s++){
if(m1>px[s])nn=s;
}
return nn;
}
}
package vb;
public class check {
int[] point=new int[11];
int s,number,datanumber;
double mu,sig;
double[] p=new double[11];
double[] delta=new double[50001];
int makedata(double e1){
int tr;
for(tr=1;tr<10001;tr++){
trial sub=new trial();
sub.p=p;
sub.number=number;
sub.datanumber=datanumber;
delta[tr]=sub.makedata();
}
int m1=0;
for(tr=1;tr<10001;tr++){
if(delta[tr]>e1)m1=m1+1;
}
return m1;
}
int randx(){
int s;
double[] px=new double[100];
px[1]=p[1];
for(s=2;s<number+1;s++){
px[s]=px[s-1]+p[s];
}
double m1=Math.random();
int nn=1;
for(s=1;s<number;s++){
if(m1>px[s])nn=s;
}
return nn;
}
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;
}
}
最終更新:2016年12月12日 06:48