アットウィキロゴ

lp4お

package lp;
 
 
public class pro {
 
    double[][] a=new double[6][6]; 
  double[] b=new double[6];
  int creditnumber,linenumber;
     double[] sol=new double[6];
int s;
 
 
    public static void main(String[] args) {
       pro test=new pro();
    }
 pro(){   
 
  creditnumber=5;     
linenumber=3;
 
a[0][1]=400;
a[0][2]=300;
a[1][1]=60;
a[1][2]=40;
a[2][1]=20;
a[2][2]=30;
a[3][1]=20;
a[3][2]=10;
a[1][3]=1;
a[2][4]=1;
a[3][5]=1;
b[1]=3800;
b[2]=2100;
b[3]=1200;
 
 
linear sub=new linear();
sub.a=a;
sub.b=b;
sub.creditnumber=creditnumber;
sub.linenumber=linenumber;
sub.makedata();
sol=sub.sol;
 
for(s=1;s<creditnumber+1;s++){
System.out.println(sol[s]);
}
 
 
 
 
 }
}
 
 
 
 
package lp;
 
 
public class linear{
 
  double[][] a=new double[6][6]; 
  double[] b=new double[6];
   double[] sol=new double[6];
  int creditnumber,linenumber;
 int n,m,s,sx;
 
 void makedata(){   
 
n=search();
 
while(n>0){
n=search();
m=line(n);
if(n>0)cal(m,n);
}
 
 
for(sx=1;sx<creditnumber+1;sx++){
sol(sx);
}
 
 
 
}  
 
 void cal(int m,int n){
int s,sx;
double z;  
for(s=0;s<linenumber+1;s++){    
z=a[s][n]/a[m][n];
if(s==m)z=0;
for(sx=1;sx<creditnumber+1;sx++){  
a[s][sx]=a[s][sx]-z*a[m][sx];
}
b[s]=b[s]-z*b[m];
}    
 
}
 
void sol(int sx){
int s,sxs;
double a1,c2;
int c1;
sxs=0; 
c1=0;
for(s=0;s<linenumber+1;s++){    
a1=geta(s,sx);
if(a1>0.01)c1=c1+1;
if(a1<-0.01)c1=c1+1;
} 
 
 
sxs=0;
for(s=0;s<linenumber+1;s++){    
a1=geta(s,sx);
if(a1>0.01)sxs=s;
if(a1<-0.01)sxs=s;
} 
 
double b1;
 
b1=b[sxs];
a1=geta(sxs,sx);
 
c2=0;
if(c1==1)c2=b1/a1;
sol[sx]=c2;
}
 
 int line(int nx){
int s,sx,h;
double a1,b1,c1,minc;
sx=0;
minc=999;
    for(s=1;s<linenumber+1;s++){ 
    a1=geta(s,nx);
    b1=getb(s);
    c1=9999;
    if(a1>0.001)c1=b1/a1;
    h=0;
    if(c1>0)h=h+1;
    if(c1==0)h=h+1;
    if(c1<minc)h=h+1;
    if(h==2)minc=c1;
    if(h==2)sx=s;
    }
return sx;    
}
int search(){
int s,sx;
double a1;
sx=0;
    for(s=1;s<creditnumber+1;s++){ 
    a1=geta(0,s);
    if(a1>0.01)sx=s;
    }
return sx;    
}
 
double getb(int s){
double a1,a2;
a1=b[s];
a2=0;
if(a1>0.01)a2=a1;
if(a1<-0.01)a2=a1;
return a2;
}
double geta(int s,int sx){
double a1,a2;
a1=a[s][sx];
a2=0;
if(a1>0.01)a2=a1;
if(a1<-0.01)a2=a1;
return a2;
}
}
 
最終更新:2013年12月03日 13:34