import java.io.*;
class yosano{
String[] data=new String[50000];
int[][] number=new int[230][101];
double[] alpha=new double[101];
double beta;
int[] y=new int[230];
double[][] x=new double[230][101];
double[] delta=new double[101];
int m,n;
int datanumber;
int t1,t2,n1;
double q;
double e,j;
public static void main(String args[]){
yosano test=new yosano();
}
yosano(){
readfile("xdata.txt");
for (n=1;n<datanumber+1;n++){
String[] z=data[n].split(",");
for(m=0;m<z.length;m++){
number[n][m+1]=Integer.parseInt(z[m]);
}
}
for (m=1;m<datanumber+1;m++){
n1=0;
for(n=1;n<101;n++){
n1=n1+number[m][n];
}
for(n=1;n<101;n++){
x[m][n]=(double)100*number[m][n]/n1;
}
}
for (n=1;n<166;n++){
y[n]=1;
}
for (n=166;n<195+1;n++){
y[n]=0;
}
for(m=1;m<101;m++){
alpha[m]=1;
}
beta=-99;
q=-0.01;
t2=0;
while(t2<20){
q=1.1*q;
t1=0;
while(t1<30){
System.out.println(g(alpha,beta,x,y,q));
for(m=1;m<101;m++){
delta[m]=dg(m,alpha,beta,x,y,q);
}
delta[0]=db(alpha,beta,x,y,q);
e=0;
for(m=0;m<101;m++){
e=e+delta[m]*delta[m];
}
e=Math.sqrt(e);
j=0.1;
for(m=1;m<101;m++){
alpha[m]=alpha[m]+j*delta[m]/e;
}
beta=beta+j*delta[0];
t1=t1+1;
}
t2=t2+1;
}
for(m=8;m<195;m++){
System.out.print(m);
System.out.print(",");
System.out.println(f(m,alpha,beta-83,x));
}
for(m=1;m<101;m++){
System.out.print(m);
System.out.print(",");
System.out.println(alpha[m]);
}
}
double db(double[] alpha,double beta,double[][] x,int[] y,double q){
double g1,g2,h;
h=0.01;
g1=g(alpha,beta,x,y,q);
g2=g(alpha,beta+h,x,y,q);
return (g2-g1)/h;
}
double dg(int m,double[] alpha,double beta,double[][] x,int[] y,double q){
double g1,g2,h;
int mx;
double[] a=new double[101];
for(mx=1;mx<100+1;mx++){
a[mx]=alpha[mx];
}
h=0.01;
a[m]=a[m]+h;
g1=g(alpha,beta,x,y,q);
g2=g(a,beta,x,y,q);
return (g2-g1)/h;
}
double g(double[] alpha,double beta,double[][] x,int[] y,double q){
double g1,g2,ming;
int m;
g1=0;
for(m=8;m<195;m++){
if(con(m,alpha,beta,x,y)<50)g1=g1+q*met(m,alpha,beta,x);
}
ming=9999;
for(m=8;m<195;m++){
g2=9999;
if(con(m,alpha,beta,x,y)>50)g2=met(m,alpha,beta,x);
if(g2<ming)ming=g2;
}
g1=g1+ming;
return g1;
}
int con(int m,double[] alpha,double beta,double[][] x,int[] y){
int h,c1;
c1=0;
h=0;
if(f(m,alpha,beta,x)>0)h=h+1;
if(y[m]>0)h=h+1;
if(h==2)c1=100;
h=0;
if(f(m,alpha,beta,x)<0)h=h+1;
if(y[m]<0)h=h+1;
if(h==2)c1=100;
return c1;
}
double met(int m,double[] alpha,double beta,double[][] x){
double m1,m2,t1,me;
int n;
m1=0;
for(n=1;n<101;n++){
m1=m1+alpha[n]*alpha[n];
}
m2=-beta;
for(n=1;n<101;n++){
m2=m2-alpha[n]*x[m][n];
}
t1=m2/m1;
me=m1*t1*t1;
return me;
}
double f(int m,double[] alpha,double beta,double[][] x){
double f1;
f1=beta;
for(n=1;n<101;n++){
f1=f1+alpha[n]*x[m][n];
}
return f1;
}
void readfile(String file){
String str;
BufferedReader br;
n=0;
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(file),"SJIS"));
while((str = br.readLine()) != null) {
n=n+1;
data[n]=str;
}
br.close();
} catch (IOException e) {System.out.println(e);}
datanumber=n;
}
}
最終更新:2011年05月19日 09:02