var;
public class pro {
int datanumber;
int[] point=new int[50];
double[] mu=new double[11];
double[] sig=new double[11];
double[] p=new double[11];
int number;
double[] dp=new double[11];
double[][] v=new double[11][21];
int[][] gotop=new int[11][21];
public static void main(String[] args) {
pro te=new pro();
}
pro(){
number=10;
datanumber=10;
int s;
for(s=1;s<datanumber+1;s++){
point[s]=20;
}
for(s=1;s<number+1;s++){
mu[s]=s;
sig[s]=2;
p[s]=0.1;
}
cal sub=new cal();
sub.point=point;
sub.number=number;
sub.datanumber=datanumber;
sub.mu=mu;
sub.sig=sig;
sub.p=p;
double u1=sub.makedata();
System.out.println(u1);
double[] ps=new double[11];
for(s=1;s<number+1;s++){
int sx;
for(sx=1;sx<number+1;sx++){
ps[sx]=p[sx];
}
ps[s]=ps[s]+0.01;
cal sub2=new cal();
sub2.point=point;
sub2.number=number;
sub2.datanumber=datanumber;
sub2.mu=mu;
sub2.sig=sig;
sub2.p=ps;
double u2=sub2.makedata();
dp[s]=(u2-u1)/0.01;
}
for(s=-10;s<11;s++){
v[1][s+10]=-999;
}
for(s=-1;s<2;s++){
v[1][s+10]=s*dp[1];
double p1=p[1]+0.01*s;
if(p1<0.01)v[1][s+10]=-999;
}
int t,sx,s1;
t=2;
for(s=-10;s<11;s++){
int z=0;
double maxv=-999;
int sxs=0;
for(sx=-1;sx<2;sx++){
u1=dp[t]*sx;
s1=s-sx;
if(s1>10)z=100;
if(s1<-10)z=100;
if(z>50)s1=0;
double v1=u1+v[t-1][s1];
if(z>60)v1=-999;
if(v1>maxv)sxs=sx;
if(v1>maxv)maxv=v1;
}
v[t][s+10]=maxv;
gotop[t][s+10]=sxs;
}
}
}
package var;
public class cal{
int datanumber;
int[] point=new int[50];
double[] mu=new double[11];
double[] sig=new double[11];
double[] p=new double[11];
int number;
double makedata(){
int s,sx;
double v1=0;
for(s=1;s<number+1;s++){
for(sx=1;sx<datanumber+1;sx++){
v1=v1+p[s]*point[sx]*f(sx,mu[s],sig[s]);
}
}
return v1;
}
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;
}
}
最終更新:2016年12月19日 10:22