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"; } }
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; }