Changeset 8505904 in tol
- Timestamp:
- May 24, 2010, 2:04:31 PM (16 years ago)
- Branches:
- 1941-docker-image-to-test, devel, master
- Children:
- b353f4f
- Parents:
- ab485e9
- File:
-
- 1 edited
-
tol/btol/bmodel/modcalc.cpp (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
tol/btol/bmodel/modcalc.cpp
rab485e9 r8505904 1426 1426 PIW_ = PIW_.Sub(n-N,0,N,I); 1427 1427 BMat CI(I,1); CI.SetAllValuesTo(0); 1428 CI = MinimumResidualsSolve(PIW_,-A_, CI);1428 CI = CholeskiMinimumResidualsSolve(PIW_,-A_); 1429 1429 BBool CI_isKnown = FrobeniusNormU(CI.Data()).IsKnown(); 1430 1430 BMat err = PIW_.T()*(PIW_*CI+A_); … … 1432 1432 if(!CI_isKnown ||(test>Sqrt(BDat::Tolerance()))) 1433 1433 { 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")); 1435 1437 BText method = BText("Golub_Reinsch_Mod"); 1436 1438 BMat U(N,I), V(I,I); 1437 1439 BDiagMatrix<BDat> D(I,1.0), Dp; 1438 1440 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"); 1439 1444 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"); 1441 1449 err = PIW_.T()*(PIW_*CI+A_); 1450 //Std(BText("\nBModel::CleanInterruptions err=\n")+(err).T().Name()+"\n"); 1442 1451 test = err.MaxAbsNorm(); 1452 //Std(BText("\nBModel::CleanInterruptions test=")+test+"\n"); 1443 1453 } 1444 1454 CI_isKnown = FrobeniusNormU(CI.Data()).IsKnown(); … … 1460 1470 A_ = E + PIWC; 1461 1471 sigma = FrobeniusNormU(A.Data()); 1462 //Std(BText("\nCleanInterruptions sigma after = ") + sigma);1472 //Std(BText("\nCleanInterruptions sigma after = ") + sigma); 1463 1473 if(sigma.IsKnown() && 1464 1474 !gsl_isinf(sigma.Value()) &&
Note: See TracChangeset
for help on using the changeset viewer.
