Changeset 8505904 in tol


Ignore:
Timestamp:
May 24, 2010, 2:04:31 PM (16 years ago)
Author:
Víctor de Buen <vdebuen@…>
Branches:
1941-docker-image-to-test, devel, master
Children:
b353f4f
Parents:
ab485e9
Message:

Fixes #899

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@2193 be4846ae-f051-483a-831f-b64e7d08527f

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tol/btol/bmodel/modcalc.cpp

    rab485e9 r8505904  
    14261426    PIW_ = PIW_.Sub(n-N,0,N,I);   
    14271427    BMat CI(I,1);  CI.SetAllValuesTo(0);
    1428     CI = MinimumResidualsSolve(PIW_,-A_, CI);
     1428    CI = CholeskiMinimumResidualsSolve(PIW_,-A_);
    14291429    BBool CI_isKnown = FrobeniusNormU(CI.Data()).IsKnown();
    14301430    BMat err = PIW_.T()*(PIW_*CI+A_);
    … …  
    14321432    if(!CI_isKnown ||(test>Sqrt(BDat::Tolerance())))
    14331433    {
    1434     //Std(BText("\nBModel::CleanInterruptions test>Sqrt(BDat::Tolerance())"));
     1434      Warning(BText("There are numerical problems to calculate values for "
     1435      "interruptions by means of Cholesky decomposition. So SVD method will "
     1436      "be tried and process could become slower"));
    14351437      BText method = BText("Golub_Reinsch_Mod");
    14361438      BMat U(N,I), V(I,I);
    14371439      BDiagMatrix<BDat> D(I,1.0), Dp;
    14381440      gsl_SingularValueDecomposition(PIW_,U,D,V, method);
     1441    //Std(BText("\nBModel::CleanInterruptions U=\n")+U.Name()+"\n");
     1442    //Std(BText("\nBModel::CleanInterruptions D=\n")+D.Name()+"\n");
     1443    //Std(BText("\nBModel::CleanInterruptions V=\n")+V.Name()+"\n");
    14391444      Dp=D.P(Sqrt(DEpsilon()));
    1440       CI=V*Dp*(A_.T()*U).T();
     1445    //Std(BText("\nBModel::CleanInterruptions Dp=\n")+Dp.Name()+"\n");
     1446      CI=-V*Dp*(A_.T()*U).T();
     1447    //Std(BText("\nBModel::CleanInterruptions CI=\n")+CI.T().Name()+"\n");
     1448    //Std(BText("\nBModel::CleanInterruptions PIW_*CI=\n")+(PIW_*CI).T().Name()+"\n");
    14411449      err = PIW_.T()*(PIW_*CI+A_);
     1450    //Std(BText("\nBModel::CleanInterruptions err=\n")+(err).T().Name()+"\n");
    14421451      test = err.MaxAbsNorm();
     1452    //Std(BText("\nBModel::CleanInterruptions test=")+test+"\n");
    14431453    }
    14441454    CI_isKnown = FrobeniusNormU(CI.Data()).IsKnown();
    … …  
    14601470      A_  = E + PIWC;
    14611471      sigma = FrobeniusNormU(A.Data());
    1462     //Std(BText("\nCleanInterruptions sigma after = ") + sigma);
     1472      //Std(BText("\nCleanInterruptions sigma after = ") + sigma);
    14631473      if(sigma.IsKnown() &&
    14641474         !gsl_isinf(sigma.Value()) &&
Note: See TracChangeset for help on using the changeset viewer.