package var;
import tool.*;
public class pro {
int[] point=new int[31];
int[] pointx=new int[31];
String[] data=new String[500];
int s,number,datanumber;
double[] mu=new double[11];
double[] sig=new double[11];
double[] p=new double[11];
double[] muxs=new double[11];
double[] sigxs=new double[11];
double[] mux=new double[11];
double[] sigx=new double[11];
double[] mus=new double[11];
double[] sigs=new double[11];
double[] ps=new double[11];
double[] dmu=new double[11];
double[] dsig=new double[11];
double[] dmux=new double[11];
double[] dsigx=new double[11];
public static void main(String[] args) {
pro t=new pro();
}
pro(){
readfile sub2=new readfile();
sub2.makedata("data.csv","UTF-8");
data=sub2.data;
datanumber=sub2.datanumber;
for(s=2;s<datanumber+1;s++){
data[s]=rev_csv(data[s]);
String[] x=data[s].split(",");
point[s-1]=num_int(x[1]);
pointx[s-1]=num_int(x[2]);
}
datanumber=datanumber-1;
System.out.println(datanumber);
number=10;
for(s=1;s<number+1;s++){
mu[s]=2*s;
sig[s]=2;
p[s]=0.1;
mux[s]=2*s;
sigx[s]=2;
}
int mode=0;
while(mode<1000){
cal sub=new cal();
sub.point=point;
sub.pointx=pointx;
sub.number=number;
sub.datanumber=datanumber;
sub.mu=mu;
sub.sig=sig;
sub.mux=mux;
sub.sigx=sigx;
sub.p=p;
double u1=sub.makedata();
double h=0.01;
for(s=1;s<number+1;s++){
int sx;
for(sx=1;sx<number+1;sx++){
mus[sx]=mu[sx];
}
mus[s]=mus[s]+h;
cal sub3=new cal();
sub3.point=point;
sub3.pointx=pointx;
sub3.number=number;
sub3.datanumber=datanumber;
sub3.mu=mus;
sub3.sig=sig;
sub3.mux=mux;
sub3.sigx=sigx;
sub3.p=p;
double u3=sub3.makedata();
dmu[s]=(u3-u1)/h;
}
for(s=1;s<number+1;s++){
int sx;
for(sx=1;sx<number+1;sx++){
muxs[sx]=mux[sx];
}
muxs[s]=muxs[s]+h;
cal sub4=new cal();
sub4.point=point;
sub4.pointx=pointx;
sub4.number=number;
sub4.datanumber=datanumber;
sub4.mu=mu;
sub4.sig=sig;
sub4.mux=muxs;
sub4.sigx=sigx;
sub4.p=p;
double u4=sub4.makedata();
dmux[s]=(u4-u1)/h;
}
for(s=1;s<number+1;s++){
int sx;
for(sx=1;sx<number+1;sx++){
sigs[sx]=sig[sx];
}
sigs[s]=sigs[s]+h;
cal sub5=new cal();
sub5.point=point;
sub5.pointx=pointx;
sub5.number=number;
sub5.datanumber=datanumber;
sub5.mu=mu;
sub5.sig=sigs;
sub5.mux=mux;
sub5.sigx=sigx;
sub5.p=p;
double u5=sub5.makedata();
dsig[s]=(u5-u1)/h;
}
for(s=1;s<number+1;s++){
int sx;
for(sx=1;sx<number+1;sx++){
sigxs[sx]=sigx[sx];
}
sigxs[s]=sigxs[s]+h;
cal sub6=new cal();
sub6.point=point;
sub6.pointx=pointx;
sub6.number=number;
sub6.datanumber=datanumber;
sub6.mu=mu;
sub6.sig=sig;
sub6.mux=mux;
sub6.sigx=sigxs;
sub6.p=p;
double u6=sub6.makedata();
dsigx[s]=(u6-u1)/h;
}
double du=u1/100;
double dz=0;
for(s=1;s<number+1;s++){
dz=dz+dmu[s]*dmu[s];
dz=dz+dsig[s]*dsig[s];
dz=dz+dmux[s]*dmux[s];
dz=dz+dsigx[s]*dsigx[s];
}
double t=du/dz;
for(s=1;s<number+1;s++){
mus[s]=mu[s]+dmu[s]*t;
sigs[s]=sig[s]+dsig[s]*t;
muxs[s]=mux[s]+dmux[s]*t;
sigxs[s]=sigx[s]+dsigx[s]*t;
}
cal sub7=new cal();
sub7.point=point;
sub7.pointx=pointx;
sub7.number=number;
sub7.datanumber=datanumber;
sub7.mu=mus;
sub7.sig=sigs;
sub7.mux=muxs;
sub7.sigx=sigxs;
sub7.p=p;
double u7=sub7.makedata();
mode=mode+1;
if(u7>u1){
for(s=1;s<number+1;s++){
mu[s]=mu[s]+dmu[s]*t;
sig[s]=sig[s]+dsig[s]*t;
mux[s]=mux[s]+dmux[s]*t;
sigx[s]=sigx[s]+dsigx[s]*t;
}
}
if(u1>u7)mode=100000;
}
for(s=1;s<number+1;s++){
System.out.println(mu[s]+","+sig[s]+","+mux[s]+","+sigx[s]);
}
}
int num_int(String str){
int nx;
nx=0;
try{
nx=Integer.parseInt(str);
}catch (Exception e) {}
return nx;
}
String rev_csv(String str){
String str5=str;
int px=str5.indexOf("\"");
while(px>-1){
str5=rev(str5);
px=str5.indexOf("\"");
}
return str5;
}
String rev(String str){
int p1=str.indexOf("\"");
int p2=str.indexOf("\"",p1+1);
String str1=str.substring(0,p1);
String str2=str.substring(p1+1,p2);
String str3=str.substring(p2+1,str.length());
str2=str2.replace(",","");
return str1+str2+str3;
}
}
package var;
public class cal{
int datanumber;
int[] point=new int[50];
double[] mux=new double[11];
double[] sigx=new double[11];
double[] mu=new double[11];
double[] sig=new double[11];
double[] p=new double[11];
int number;
int[] pointx=new int[50];
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]);
}
}
double v2=0;
for(s=1;s<number+1;s++){
for(sx=1;sx<datanumber+1;sx++){
v2=v2+p[s]*pointx[sx]*f(sx,mux[s],sigx[s]);
}
}
v1=v1*v2;
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日 15:07