comparison util/ksvd utils/ompbox utils/ompcoreGabor.c @ 139:4bd6856a7128 ivand_dev

ompGabor mex version debuged and tested
author Ivan <ivan.damnjanovic@eecs.qmul.ac.uk>
date Thu, 21 Jul 2011 16:37:14 +0100
parents 9207d56c5547
children
comparison
equal deleted inserted replaced
138:56d719a5fd31 139:4bd6856a7128
54 /*** status flags ***/ 54 /*** status flags ***/
55 55
56 DtX_specified = (DtX!=0); /* indicates whether D'*x was provided */ 56 DtX_specified = (DtX!=0); /* indicates whether D'*x was provided */
57 XtX_specified = (XtX!=0); /* indicates whether sum(x.*x) was provided */ 57 XtX_specified = (XtX!=0); /* indicates whether sum(x.*x) was provided */
58 58
59 standardomp = (G==0); /* batch-omp or standard omp are selected depending on availability of G */ 59 standardomp = 1;//(G==0); /* batch-omp or standard omp are selected depending on availability of G */
60 batchomp = !standardomp; 60 batchomp = !standardomp;
61 61
62 62
63 63
64 /*** allocate output matrix ***/ 64 /*** allocate output matrix ***/
102 n12 = (double*)mxMalloc(m/2*sizeof(double)); 102 n12 = (double*)mxMalloc(m/2*sizeof(double));
103 103
104 vec_smult(1,D2, D1, n*m/2); 104 vec_smult(1,D2, D1, n*m/2);
105 105
106 for (i=0; i<m/2; i++) { 106 for (i=0; i<m/2; i++) {
107 D1D2[i]=0;
108 n12[i]=0;
107 for (j=0; j<n; j++) { 109 for (j=0; j<n; j++) {
108 D1D2[i] += D1[i*n+j]; 110 D1D2[i] += D1[i*n+j];
109 } 111 }
110 n12[i]=1/(1-D1D2[i]); 112 n12[i]=1/(1-D1D2[i]*D1D2[i]);
111 } 113 }
112 114
113 memcpy(D1, D , n*m/2*sizeof(double)); 115 memcpy(D1, D , n*m/2*sizeof(double));
114 116
115 alpha = (double*)mxMalloc(m/2*sizeof(double)); /* contains D'*residual */ 117 alpha = (double*)mxMalloc(m/2*sizeof(double)); /* contains D'*residual */
230 for (k=0; k<m/2; k++){ 232 for (k=0; k<m/2; k++){
231 alpha[k] = (proj1[k] - D1D2[k]*proj2[k])*n12[k]; 233 alpha[k] = (proj1[k] - D1D2[k]*proj2[k])*n12[k];
232 beta[k] = (proj2[k] - D1D2[k]*proj1[k])*n12[k]; 234 beta[k] = (proj2[k] - D1D2[k]*proj1[k])*n12[k];
233 } 235 }
234 for (k=0; k<m/2; k++){ 236 for (k=0; k<m/2; k++){
237 error[k]=0;
235 for (j=0; j<n; j++){ 238 for (j=0; j<n; j++){
236 error[k]+= (abs(r[j])-D1[k*n+j]*alpha[k]-D2[(k+m/2)*n+j]*beta[k])*(abs(r[j])-D1[k*n+j]*alpha[k]-D2[(k+m/2)*n+j]*beta[k]); 239 error[k]+= (abs(r[j])-D1[k*n+j]*alpha[k]-D2[k*n+j]*beta[k])*(abs(r[j])-D1[k*n+j]*alpha[k]-D2[k*n+j]*beta[k]);
237 } 240 }
238 } 241 }
239 pos = maxabs(error, m/2); 242 pos = maxabs(error, m/2);
240 addproftime(&pd, MAXABS_TIME); 243 addproftime(&pd, MAXABS_TIME);
241 244