package del;
public class pro {
int s;
double[] p=new double[101];
double[] y=new double[101];
double[] pi=new double[101];
double maxy,miny;
double h;
int[] k=new int[101];
double[] ys=new double[101];
double[][] x=new double[1000][10];
double[] sol=new double[100];
double[][] v=new double[1000][11];
int[][] gotok=new int[1000][11];
int[] op=new int[101];
public static void main(String[] args) {
pro te=new pro();
}
pro(){
for(s=1;s<101;s++){
p[s]=100+10*Math.random();
y[s]=100+10*Math.random();
}
pi[1]=0;
for(s=2;s<101;s++){
pi[s]=p[s]-p[s-1];
}
maxy=0;
miny=999;
for(s=1;s<101;s++){
if(y[s]>maxy)maxy=y[s];
if(y[s]<miny)miny=y[s];
}
h=(maxy-miny)/10;
for(s=1;s<101;s++){
k[s]=5;
}
for(s=1;s<101;s++){
ys[s]=(y[s]-miny)/h-k[s];
x[s][1]=1;
x[s][2]=ys[s];
}
ols sub=new ols();
sub.datanumber=100;
sub.number=2;
sub.x=x;
sub.y=pi;
sub.makedata();
sol=sub.sol;
System.out.println(sol[1]+","+sol[2]);
for(s=1;s<11;s++){
double k1=miny+h*s;
double p1=sol[1]+sol[2]*(y[1]-k1)/h;
v[1][s]=(p1-p[s])*(p1-p[s]);
}
int t,sx,sxs;
double u1,v1,minv;
for(t=2;t<101;t++){
for(s=1;s<11;s++){
double k1=miny+h*s;
double p1=sol[1]+sol[2]*(y[t]-k1);
u1=(p1-p[t])*(p1-p[t]);
System.out.println(u1);
minv=9999;
sxs=0;
for(sx=1;sx<11;sx++){
v1=u1+v[t-1][sx];
double e=(s-sx)*(s-sx);
if(e>1.1)v1=9999;
if(v1<minv)sxs=sx;
if(v1<minv)minv=v1;
}
v[t][s]=minv;
gotok[t][s]=sxs;
}
}
minv=999;
sx=0;
for(s=1;s<11;s++){
if(v[100][s]<minv)sx=s;
if(v[100][s]>minv)minv=v[100][s];
}
op[100]=sx;
for(s=1;s<100;s++){
sx=op[100-s+1];
op[100-s]=gotok[100-s+1][sx];
}
for(s=1;s<101;s++){
System.out.println(op[s]);
}
}
}
package del;
public class ols {
int s,s1,s2;
int datanumber,number;
double x1;
double[][] a=new double[100][100];
double[] b=new double[100];
double[] y=new double[1000];
double[][] x=new double[1000][10];
double[] sol=new double[100];
void makedata(){
for(s1=1;s1<number+1;s1++){
for(s2=1;s2<number+1;s2++){
x1=0;
for(s=1;s<datanumber+1;s++){
x1=x1+x[s][s1]*x[s][s2];
}
a[s1][s2]=x1;
}
}
for(s1=1;s1<number+1;s1++){
x1=0;
for(s=1;s<datanumber+1;s++){
x1=x1+x[s][s1]*y[s];
}
b[s1]=x1;
}
double z;
for(s1=1;s1<number+1;s1++){
for(s2=1;s2<number+1;s2++){
z=a[s2][s1]/a[s1][s1];
if(s1==s2)z=0;
for(s=1;s<number+1;s++){
a[s2][s]=a[s2][s]-z*a[s1][s];
}
b[s2]=b[s2]-z*b[s1];
}
}
for(s1=1;s1<number+1;s1++){
sol[s1]=b[s1]/a[s1][s1];
}
}
}
最終更新:2015年07月31日 19:07