package hilter;
public class optimal {
double[] y=new double[501];
double[] ys=new double[501];
double[][] v=new double[501][101];
double[][] pol=new double[501][101];
int[][] gotox=new int[501][101];
int number;
int[] op=new int[501];
void makedata(){
int s,sx;
s=1;
for(sx=1;sx<101;sx++){
v[s][sx]=(y[s]-pol[s][sx])*(y[s]-pol[s][sx]);
}
double lam=0;
int tx;
for(s=2;s<number;s++){
for(sx=1;sx<101;sx++){
double u1=(y[s]-pol[s][sx])*(y[s]-pol[s][sx]);
double minv=0;
int txs=0;
for(tx=1;tx<101;tx++){
double e1=(ys[s+1]-pol[s][sx])-(pol[s][sx]-pol[s-1][tx]);
double v1=u1+lam*e1*e1+v[s-1][tx];
if(v1<minv)txs=tx;
if(v1<minv)minv=v1;
if(minv<1)txs=tx;
if(minv<1)minv=v1;
}
gotox[s][sx]=txs;
v[s][sx]=minv;
}
}
s=number;
for(sx=1;sx<101;sx++){
double u1=(y[s]-pol[s][sx])*(y[s]-pol[s][sx]);
double minv=0;
int txs=0;
for(tx=1;tx<101;tx++){
double e1;
double v1=u1+v[s-1][tx];
if(v1<minv)txs=tx;
if(v1<minv)minv=v1;
if(minv<1)txs=tx;
if(minv<1)minv=v1;
}
gotox[s][sx]=txs;
v[s][sx]=minv;
}
double minv=9*10^13;
int sxs=0;
for(sx=1;sx<101;sx++){
if(v[number][sx]<minv)sxs=sx;
if(v[number][sx]<minv)minv= v[number][sx];
}
System.out.println(sxs);
op[number]=sxs;
for(s=1;s<number;s++){
sx=number+1-s;
int s1=op[sx];
op[sx-1]=gotox[sx][s1];
}
for(s=1;s<number+1;s++){
sx=op[s];
ys[s]=pol[s][sx];
}
}
}
package hilter;
import java.io.*;
public class pro {
double[] y=new double[101];
double[] ys=new double[101];
double[][] v=new double[101][101];
double[][] pol=new double[101][101];
int[][] gotox=new int[101][101];
int number;
String[] data=new String[6000];
int s,datanumber;
public static void main(String[] args) {
pro te=new pro();
}
pro(){
readx("a.csv");
for(s=2;s<datanumber+1;s++){
data[s]=rev_csv(data[s]);
String[] x=data[s].split(",");
y[s-1]=num(x[1])/1000;
System.out.println(y[s-1]);
}
int s,sx;
number=datanumber-1;
for(s=1;s<number+1;s++){
for(sx=1;sx<101;sx++){
pol[s][sx]=y[s]+(sx-50);
}
ys[s]=y[s];
}
int tr;
for(tr=1;tr<2;tr++){
optimal sub=new optimal();
sub.pol=pol;
sub.y=y;
sub.ys=ys;
sub.number=number;
sub.makedata();
ys=sub.ys;
}
for(s=1;s<number+1;s++){
System.out.println(y[s]+","+ys[s]);
}
}
void readx(String file){
String str;
BufferedReader br;
int s;
s=0;
try {
br = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"));
while((str = br.readLine()) != null) {
s=s+1;
data[s]=str;
}
br.close();
} catch (IOException e) {System.out.println(e);}
datanumber=s;
}
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;
}
double num(String str){
double nx;
nx=0;
try{
nx=Double.parseDouble(str);
}catch (Exception e) {}
return nx;
}
}
最終更新:2016年10月24日 14:57