MAT *sm_mlt(double scalar, const MAT *matrix, MAT *out) #endif { unsigned int m,n,i; if ( matrix==(MAT *)NULL ) error(E_NULL,"sm_mlt"); if ( out==(MAT *)NULL || out->m != matrix->m || out->n != matrix->n ) out = m_resize(out,matrix->m,matrix->n); m = matrix->m; n = matrix->n; for ( i=0; i<m; i++ ) __smlt__(matrix->me[i],(double)scalar,out->me[i],(int)n); /************************************************** for ( j=0; j<n; j++ ) out->me[i][j] = scalar*matrix->me[i][j]; **************************************************/ return (out); }
/* sv_mlt -- scalar-vector multiply -- may be in-situ */ VEC *sv_mlt(double scalar,VEC *vector,VEC *out) { /* u_int dim, i; */ /* Real *out_ve, *vec_ve; */ if ( vector==(VEC *)NULL ) error(E_NULL,"sv_mlt"); if ( out==(VEC *)NULL || out->dim != vector->dim ) out = v_resize(out,vector->dim); if ( scalar == 0.0 ) return v_zero(out); if ( scalar == 1.0 ) return v_copy(vector,out); __smlt__(vector->ve,(double)scalar,out->ve,(int)(vector->dim)); /************************************************** dim = vector->dim; out_ve = out->ve; vec_ve = vector->ve; for ( i=0; i<dim; i++ ) out->ve[i] = scalar*vector->ve[i]; (*out_ve++) = scalar*(*vec_ve++); **************************************************/ return (out); }