1 #include "normalize.h" 2 3 #include "linalg.h" 4 #include "scs.h" 5 6 /* needed for normalizing the warm-start */ SCS(normalize_sol)7void 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)22void 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)37void 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)45void 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