Changeset 3673741 in tol
- Timestamp:
- Jan 19, 2010, 2:27:45 PM (17 years ago)
- Branches:
- 1941-docker-image-to-test, devel, master
- Children:
- 4f21bb0
- Parents:
- d6488fb
- File:
-
- 1 edited
-
tol/btol/vmatrix_type/vmat_iterative.cpp (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
tol/btol/vmatrix_type/vmat_iterative.cpp
rd6488fb r3673741 79 79 double advance; 80 80 double relAdv; 81 double oldR;82 81 double R=r.FrobeniusNorm(); 82 double oldR=R*2.0; 83 83 BDat xNorm=x.FrobeniusNorm(); 84 84 BDat oldxNorm; … … 107 107 pa = p*a; 108 108 oldMaxpa = maxpa; 109 oldR = R;110 R = r.FrobeniusNorm();111 109 oldxNorm = xNorm; 112 110 x = x+pa; 113 111 xNorm = x.FrobeniusNorm(); 114 112 xNormAdvance = xNorm-oldxNorm; 115 116 113 maxpa = 0; 117 114 for(i=0; i<cols; i++) … … 123 120 } 124 121 } 125 122 r = r - q*a; 123 oldR = R; 124 R = r.FrobeniusNorm(); 126 125 advance = R-oldR; 127 126 relAdv = advance/oldR; 128 if(k)129 {130 if(S.IsUnknown() ) { break; }131 if(maxpa.IsUnknown() ) { break; }132 if(advance >= 0 ) { break; }133 if(S <= tolerance ) { break; }134 if(1+maxpa-1 == 0 ) { break; }135 /*136 if(maxpa <= chop ) { break; }137 if(fabs(advance) <= chop ) { break; }138 if(fabs(relAdv) <= chop ) { break; }139 if(fabs(R) <= chop ) { break; }140 if(oldMaxpa <= tol ) { break; }141 if(maxpa <= tol ) { break; }142 if(fabs(advance) <= tol ) { break; }143 if(xNormAdvance.Abs() <= tol ) { break; }144 */145 }146 r = r - q*a;147 127 //s = At*r; 148 128 s = (r.T()*A).T(); 149 129 oldS = S; 150 130 S = s.SquaredSum(); 131 if(S <= tolerance ) { break; } 132 if(S.IsUnknown() ) { break; } 133 if(maxpa.IsUnknown() ) { break; } 134 if(advance >= 0 ) { break; } 135 if(1+maxpa-1 == 0 ) { break; } 136 /* 137 if(maxpa <= chop ) { break; } 138 if(fabs(advance) <= chop ) { break; } 139 if(fabs(relAdv) <= chop ) { break; } 140 if(fabs(R) <= chop ) { break; } 141 if(oldMaxpa <= tol ) { break; } 142 if(maxpa <= tol ) { break; } 143 if(fabs(advance) <= tol ) { break; } 144 if(xNormAdvance.Abs() <= tol ) { break; } 145 */ 151 146 b = S.Value()/oldS.Value(); 152 147 p = p*b+s; … … 238 233 int i, k; 239 234 BVMat x, r; 240 if(!CheckOprProd(A,funName)) { return(x); }241 235 r.Convert(b0,ESC_blasRdense); 242 236 if(!x0.Rows()) … … 246 240 else 247 241 { 248 x .Convert(x0,ESC_blasRdense);242 x.Convert(x0,ESC_blasRdense); 249 243 } 250 244 BVMat q; … … 259 253 int rows = q.Rows(); 260 254 int cols = p.Rows(); 261 / /PRECONDITIONS: ENSURING DIMENSIONS255 /* PRECONDITIONS: ENSURING DIMENSIONS */ 262 256 if(!rows||!cols||!r.Columns()||!x.Columns()|| 263 257 (rows<cols)||(rows!=r.Rows())||(cols!=x.Rows())) … … 265 259 return(x); 266 260 } 267 261 268 262 if(chop<0) { chop = sqrt(DEpsilon()/cols); } 269 263 double tolerance = chop*chop; 270 264 if((rows<cols)||(rows!=r.Rows())) { return(x); } 271 265 //BVMat At = A.T(); 266 //BVMat s = At*r; 272 267 BVMat pa; 273 268 BVMat rpa; … … 277 272 double advance; 278 273 double relAdv; 279 double oldR;280 274 double R=r.FrobeniusNorm(); 275 double oldR=R*2.0; 281 276 BDat xNorm=x.FrobeniusNorm(); 282 277 BDat oldxNorm; … … 290 285 for(k=0; k<maxIter; k++) 291 286 { 287 /* 292 288 if(k && !(k%cols)) 293 289 { … … 298 294 " advance="+advance); 299 295 } 300 OprProd(A,p,false,q); 296 */ 297 OprProd(A,x,false, q); 301 298 q2 = q.SquaredSum(); 302 299 a = S.Value()/q2; 303 300 pa = p*a; 304 301 oldMaxpa = maxpa; 305 oldR = R;306 R = r.FrobeniusNorm();307 302 oldxNorm = xNorm; 308 303 x = x+pa; 309 304 xNorm = x.FrobeniusNorm(); 310 305 xNormAdvance = xNorm-oldxNorm; 311 312 306 maxpa = 0; 313 307 for(i=0; i<cols; i++) … … 319 313 } 320 314 } 321 315 r = r - q*a; 316 oldR = R; 317 R = r.FrobeniusNorm(); 322 318 advance = R-oldR; 323 319 relAdv = advance/oldR; 324 if(k)325 {326 if(S.IsUnknown() )327 { break; }328 if(maxpa.IsUnknown())329 { break; }330 if(S <= tolerance )331 { break; }332 /* */333 if(1+maxpa-1 == 0 )334 { break; }335 if(advance > 0 )336 { break; }337 /* */338 }339 r = r - q*a;340 320 //s = At*r; 341 321 OprProd(A,r,true,s); 342 322 oldS = S; 343 323 S = s.SquaredSum(); 324 if(S <= tolerance ) { break; } 325 if(S.IsUnknown() ) { break; } 326 if(maxpa.IsUnknown() ) { break; } 327 if(advance >= 0 ) { break; } 328 if(1+maxpa-1 == 0 ) { break; } 329 /* 330 if(maxpa <= chop ) { break; } 331 if(fabs(advance) <= chop ) { break; } 332 if(fabs(relAdv) <= chop ) { break; } 333 if(fabs(R) <= chop ) { break; } 334 if(oldMaxpa <= tol ) { break; } 335 if(maxpa <= tol ) { break; } 336 if(fabs(advance) <= tol ) { break; } 337 if(xNormAdvance.Abs() <= tol ) { break; } 338 */ 344 339 b = S.Value()/oldS.Value(); 345 340 p = p*b+s;
Note: See TracChangeset
for help on using the changeset viewer.
