Mercurial > hg > smallbox
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 |