MAT *m_sub(const MAT *mat1, const MAT *mat2, MAT *out) #endif { unsigned int m,n,i; if ( mat1==(MAT *)NULL || mat2==(MAT *)NULL ) error(E_NULL,"m_sub"); if ( mat1->m != mat2->m || mat1->n != mat2->n ) error(E_SIZES,"m_sub"); if ( out==(MAT *)NULL || out->m != mat1->m || out->n != mat1->n ) out = m_resize(out,mat1->m,mat1->n); m = mat1->m; n = mat1->n; for ( i=0; i<m; i++ ) { __sub__(mat1->me[i],mat2->me[i],out->me[i],(int)n); /************************************************** for ( j=0; j<n; j++ ) out->me[i][j] = mat1->me[i][j]-mat2->me[i][j]; **************************************************/ } return (out); }
/* v_sub -- vector subtraction -- may be in-situ */ VEC *v_sub(VEC *vec1,VEC *vec2,VEC *out) { /* u_int i, dim; */ /* Real *out_ve, *vec1_ve, *vec2_ve; */ if ( vec1==(VEC *)NULL || vec2==(VEC *)NULL ) error(E_NULL,"v_sub"); if ( vec1->dim != vec2->dim ) error(E_SIZES,"v_sub"); if ( out==(VEC *)NULL || out->dim != vec1->dim ) out = v_resize(out,vec1->dim); __sub__(vec1->ve,vec2->ve,out->ve,(int)(vec1->dim)); /************************************************************ dim = vec1->dim; out_ve = out->ve; vec1_ve = vec1->ve; vec2_ve = vec2->ve; for ( i=0; i<dim; i++ ) out->ve[i] = vec1->ve[i]-vec2->ve[i]; (*out_ve++) = (*vec1_ve++) - (*vec2_ve++); ************************************************************/ return (out); }