@@ -79,11 +79,7 @@ static void eval_jacobian(expr *node)
7979 {
8080 /* jacobian = 2 * (Q @ x)^T */
8181 csr_matvec (Q , x -> value , node -> jacobian -> x , 0 );
82-
83- for (int j = 0 ; j < x -> size ; j ++ )
84- {
85- node -> jacobian -> x [j ] *= 2.0 ;
86- }
82+ cblas_dscal (x -> size , 2.0 , node -> jacobian -> x , 1 );
8783 }
8884 else
8985 {
@@ -106,10 +102,7 @@ static void eval_jacobian(expr *node)
106102 csc_matvec_fill_values (x -> work -> jacobian_csc , node -> work -> dwork ,
107103 node -> jacobian );
108104
109- for (int j = 0 ; j < node -> jacobian -> nnz ; j ++ )
110- {
111- node -> jacobian -> x [j ] *= 2.0 ;
112- }
105+ cblas_dscal (node -> jacobian -> nnz , 2.0 , node -> jacobian -> x , 1 );
113106 }
114107}
115108
@@ -179,11 +172,8 @@ static void eval_wsum_hess(expr *node, const double *w)
179172 {
180173 /* TODO: do we want to compute this hessian only once (up to a scaling)?
181174 * Maybe unnecessary optimization. */
182- double * H = node -> wsum_hess -> x ;
183- for (int i = 0 ; i < Q -> nnz ; i ++ )
184- {
185- H [i ] = two_w * Q -> x [i ];
186- }
175+ memcpy (node -> wsum_hess -> x , Q -> x , Q -> nnz * sizeof (double ));
176+ cblas_dscal (Q -> nnz , two_w , node -> wsum_hess -> x , 1 );
187177 }
188178 else
189179 {
0 commit comments