class lp{
int mlong,nlong,ms,ns,nx;
double[][] a=new double[100][100];
double[] b=new double[100];
double[] x=new double[100];
void makedata(){
ns=seekn();
while(ns>0){
ns=seekn();
ms=0;
if(ns>0)ms=seekm(ns);
if(ms>0)cal(ms,ns);
}
for(nx=1;nx<nlong+1;nx++){
x[nx]=sol(nx);
}
}
double sol(int nx){
int mx,h,num,mxs;
double s1;
num=0;
mxs=0;
for(mx=0;mx<mlong+1;mx++){
h=0;
if(a[mx][nx]>0.00001)h=100;
if(a[mx][nx]<-0.00001)h=100;
if(h>50)num=num+1;
if(h>50)mxs=mx;
}
s1=0;
if(num==1)s1=b[mxs]/a[mxs][nx];
return s1;
}
void cal(int ms,int ns){
double z;
int mx,nx;
for(mx=0;mx<mlong+1;mx++){
z=a[mx][ns]/a[ms][ns];
if(mx==ms)z=0;
for(nx=1;nx<nlong+1;nx++){
a[mx][nx]=a[mx][nx]-z*a[ms][nx];
}
b[mx]=b[mx]-z*b[ms];
}
}
int seekm(int ns){
int mx,mxs,h;
double minm,a1,q;
minm=99999;
mxs=0;
for(mx=1;mx<mlong+1;mx++){
h=0;
a1=a[mx][ns];
if(a1>0)h=h+1;
if(a1==0)a1=1;
q=b[mx]/a1;
if(q<minm)h=h+1;
if(q<0)h=0;
if(h==2)mxs=mx;
if(h==2)minm=q;
}
return mxs;
}
int seekn(){
int nx,nxs;
double maxn;
maxn=0;
nxs=0;
for(nx=1;nx<nlong+1;nx++){
if(a[0][nx]>maxn)nxs=nx;
if(a[0][nx]>maxn)maxn=a[0][nx];
}
return nxs;
}
}
最終更新:2011年08月25日 04:13