public class sysLin{
matrice A;
vecteur b;	

//constructeurs
sysLin(double[][] AA, double[] bb)
{A=new matrice(AA);
b= new vecteur(bb);
}

sysLin(matrice AA, vecteur bb)
{A=new matrice(AA);
b= new vecteur(bb);
}

//afectation
public sysLin affect(matrice AA, vecteur bb) 
{A.affect(AA);
b.affect(bb);
return this;
}
//afectation
public void affectMat(matrice AA) 
{A.affect(AA);
}
//afectation
public void affectVec( vecteur bb) 
{
b.affect(bb);
}
//factorisation LU
public matrice facLU()
{// copies locales
matrice lA= new matrice(A);
lA.afficher();
double c=0.0;
int n=A.nbColonnes();
// Transformation de la matrice
for(int k=0;k<n;k++)
{
for (int i=k+1;i<n;i++)
{  c=lA.coef(i,k)/lA.coef(k,k); 
   lA.toCoef(i,k,c);  
    for (int j=k+1;j<n;j++)
    {
    c=lA.coef(i,j)-lA.coef(i,k)*lA.coef(k,j);
    lA.toCoef(i,j,c);
     }
  }
  }
  lA.afficher();
  // calcul du determinant de A
  c=lA.coef(0,0);
  for (int k=1;k<n;k++)
  c*=lA.coef(k,k);
  System.out.println(c);
return lA;
}

public vecteur resoutLU()
{
 int n=A.nbColonnes();// taille de A
matrice lLu= new matrice(facLU());
vecteur y=new vecteur(n);
vecteur x=new vecteur(n); 

// copie locale de b
vecteur lb= new vecteur(b);
//resolution de  Ly=b 
y.toElt(0,lb.elt(0));
for (int i=1;i<n;i++)
{ 
  double s=0;
  for (int j=0;j<i;j++)
    s+=lLu.coef(i,j)*y.elt(j);
    y.toElt(i,lb.elt(i)-s);
}
// resolution de Ux=y
x.toElt(n-1,y.elt(n-1)/lLu.coef(n-1,n-1));
for (int i=n-2;i>-1;i--)
{ 
  double s=0;
  for (int j=i+1;j<n;j++)
    s+=lLu.coef(i,j)*x.elt(j);
    x.toElt(i,(y.elt(i)-s)/lLu.coef(i,i));
}
x.afficher();
return x;

}

}
