1 #include "normalize.h"
2 
3 #include "linalg.h"
4 #include "scs.h"
5 
6 /* needed for normalizing the warm-start */
SCS(normalize_sol)7 void SCS(normalize_sol)(ScsWork *w, ScsSolution *sol) {
8   scs_int i;
9   scs_float *D = w->scal->D;
10   scs_float *E = w->scal->E;
11   for (i = 0; i < w->n; ++i) {
12     sol->x[i] /= (E[i] / w->scal->dual_scale);
13   }
14   for (i = 0; i < w->m; ++i) {
15     sol->y[i] /= (D[i] / w->scal->primal_scale);
16   }
17   for (i = 0; i < w->m; ++i) {
18     sol->s[i] *= (D[i] * w->scal->dual_scale);
19   }
20 }
21 
SCS(un_normalize_sol)22 void SCS(un_normalize_sol)(ScsWork *w, ScsSolution *sol) {
23   scs_int i;
24   scs_float *D = w->scal->D;
25   scs_float *E = w->scal->E;
26   for (i = 0; i < w->n; ++i) {
27     sol->x[i] *= (E[i] / w->scal->dual_scale);
28   }
29   for (i = 0; i < w->m; ++i) {
30     sol->y[i] *= (D[i] / w->scal->primal_scale);
31   }
32   for (i = 0; i < w->m; ++i) {
33     sol->s[i] /= (D[i] * w->scal->dual_scale);
34   }
35 }
36 
SCS(un_normalize_primal)37 void SCS(un_normalize_primal)(ScsWork *w, scs_float *r) {
38   scs_int i;
39   scs_float *D = w->scal->D;
40   for (i = 0; i < w->m; ++i) {
41     r[i] /= (D[i] * w->scal->dual_scale);
42   }
43 }
44 
SCS(un_normalize_dual)45 void SCS(un_normalize_dual)(ScsWork *w, scs_float *r) {
46   scs_int i;
47   scs_float *E = w->scal->E;
48   for (i = 0; i < w->n; ++i) {
49     r[i] /= (E[i] * w->scal->primal_scale);
50   }
51 }
52