void cGenSysSurResol::Indexee_SoustraitMatrColInLin
     (
           const ElMatrix<tSysCho> &aMatr,
	   const std::vector<cSsBloc> & aVBl
     )
{
    ELISE_ASSERT ( aMatr.tx()==1, "matrice non colonne, Indexee_EcrireMatrColWithLin");

    int anXIn=0;
    for (int aKBl=0 ; aKBl <int(aVBl.size()) ; aKBl++)
    {
        int aI0x = aVBl[aKBl].I0AbsSolve();
        int aI1x = aVBl[aKBl].I1AbsSolve();
        for (int anXOut = aI0x; anXOut < aI1x ; anXOut++)
        {
	     SetElemLin(anXOut,GetElemLin(anXOut)-aMatr(0,anXIn));
             // GetElemLin(anXOut) -= aMatr(0,anXIn);
             anXIn++;
        }
    }
/*
    for (int aK=0 ; aK<int(aVInd.size()) ; aK++)
    {
	GetElemLin(aVInd[aK]) -= aMatr(0,aK);
    }
*/
}
void cGenSysSurResol::Indexee_EcrireDansMatrColWithLin
     (
           ElMatrix<tSysCho> &aMatr,
	   const std::vector<cSsBloc> & aVx
     ) const
{
    ELISE_ASSERT ( aMatr.tx()==1, "matrice non colonne, Indexee_EcrireMatrColWithLin");

    int xout = 0;
    for (int aKx=0 ; aKx <int(aVx.size()) ; aKx++)
    {
        int aI0x = aVx[aKx].I0AbsSolve();
        int aI1x = aVx[aKx].I1AbsSolve();
        for (int xin = aI0x; xin < aI1x ; xin++)
        {
            aMatr(0,xout) = GetElemLin(xin);
            xout ++;
        }
    }
}
void cGenSysSurResol::ShowGSR(int aMode)
{
   for (int aKy=0 ; aKy<NbVar() ; aKy++)
   {
       for (int aKx=0 ; aKx<NbVar() ; aKx++)
       {
          double aV = GetElemQuad(aKx,aKy);
          if (aMode==0)
          {
             std::cout << ((aV==0) ?  "-" : "*");
          }
          else
          {
               ELISE_ASSERT(false,"cGenSysSurResol::ShowGSR");
          }
       }
       std::cout << " " << aKy <<  " " << GetElemLin(aKy) << "\n";
       // printf(" %2d L=%2e\n",aKy,GetElemLin(aKy));
       //std::cout << " : " << aKy << "\n";
   }
}
Example #4
0
Im1D_REAL8  cGenSysSurResol::GSSR_Solve(bool * aResOk)
{

    Im1D_REAL8 aSol = V_GSSR_Solve(aResOk);

if (true && (NbVar() >8))
{
/*
ElMatrix<double> aM2(NbVar(),NbVar());
ElMatrix<double> aL2(1,NbVar());

for (int aJ=0; aJ< NbVar() ; aJ++)
{
aL2(0,aJ) = GetElemLin(aJ);
for (int aI=0; aI< NbVar() ; aI++)
  aM2(aI,aJ) =  GetElemQuad(aI,aJ);
}
ElMatrix<double> aS2 = gaussj(aM2) * aL2;



std::cout << "NBV " << NbVar() << "NB CONTRAINTE " << mNbContrainte << "  Assumed : " << ContraintesAssumed() << "\n";
for (int aK=0 ; aK<NbVar()  ; aK++)
   std::cout << "*************jjkk--- " << aK << " " << aSol.data()[aK] << " " << aS2(0,aK)  << " M2 " << aM2(aK,aK) << "\n";

getchar();
*/


if (0)
{

for (int aJ=0; aJ< NbVar() ; aJ++)
{

double aS0=0;
for (int aK=0; aK< NbVar() ; aK++)
   aS0 += aSol.data()[aK] * GetElemQuad(aJ,aK);



   float aV = (float)GetElemLin(aJ);
   printf("%d %f %f %f :: ",aJ,aSol.data()[aJ],aV,aS0);
for (int aK=0 ; aK< NbVar() ; aK++)
{
   float aV = (float)GetElemQuad(aJ,aK);
   printf("%f ",aV);
}
printf("\n");
}
}
}


    if ((mNbContrainte==0) || mCstrAssumed)
       return aSol;


    for (INT y=0 ;  y<NbVar() ; y++)
        mSol(0,y) = aSol.data()[y];
    mSol += mE;
    mCSol.mul(mC,mSol);

    for (INT y=0 ;  y<NbVar() ; y++)
    {
        aSol.data()[y] = mCSol(0,y);
    }

    return aSol;
}