Changeset 236
- Timestamp:
- 05/05/09 11:31:00 (16 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
issm/trunk/src/c/Orthx/Orthx.cpp
r1 r236 14 14 15 15 /*intermediary:*/ 16 Vec oldgradj2=NULL; 17 double norm,dot_product;; 16 double norm_new,norm_old,dot_product;; 18 17 18 /*Initialize output*/ 19 VecDuplicate(gradj,&newgradj); 20 VecCopy(gradj,newgradj); 19 21 20 if (!oldgradj){21 VecDuplicate(gradj,&oldgradj2);22 VecCopy(gradj,oldgradj2);23 /*scale to 1:*/24 Vec Norm(oldgradj2,NORM_INFINITY,&norm);25 Vec Scale(oldgradj2,1.0/norm);22 /*rough orthagonalization 23 gradient=gradient-(gradient'*oldgradient)*oldgradient /norm(oldgradient)^2; */ 24 if(oldgradj){ 25 VecNorm(oldgradj,NORM_2,&norm_old); 26 VecDot(newgradj,oldgradj,&dot_product); 27 VecAXPY(newgradj, -dot_product/pow(norm_old,2), oldgradj); 26 28 } 27 29 28 /*% normalize gradient to 1:*/ 29 VecDuplicate(gradj,&newgradj); 30 VecCopy(gradj,newgradj); 31 VecNorm(newgradj,NORM_INFINITY,&norm); 32 VecScale(newgradj,1.0/norm); 33 34 /*rough orthagonalization 35 gradient=gradient-(gradient'*oldgradient)*oldgradient; 36 */ 37 38 if(oldgradj){ 39 VecDot(newgradj,oldgradj,&dot_product); 40 VecAXPY(newgradj, -dot_product,oldgradj); 41 } 42 else{ 43 VecDot(newgradj,oldgradj2,&dot_product); 44 VecAXPY(newgradj, -dot_product,oldgradj2); 45 } 30 /*scale to 1: gradient=gradient/max(abs(gradient))*/ 31 VecNorm(newgradj,NORM_INFINITY,&norm_new); 32 VecScale(newgradj,1.0/norm_new); 46 33 47 34 /*Assign correct pointer*/ 48 35 *pnewgradj=newgradj; 49 50 /*Free ressources and return*/51 VecFree(&oldgradj2);52 36 }
Note:
See TracChangeset
for help on using the changeset viewer.