AA_API void aa_la_transpose2( size_t m, size_t n, const double *A, double *At ) { for( size_t i = 0; i < m; i ++ ) { for( size_t j = 0; j < n; j++ ) { AA_MATREF(At,n,j,i) = AA_MATREF(A,m,i,j); } } }
AA_API void aa_la_transpose( size_t n, double *A ) { for( size_t i = 0; i < n; i ++ ) { for( size_t j = i+1; j < n; j++ ) { double t = AA_MATREF(A,n,i,j); AA_MATREF(A,n,i,j) = AA_MATREF(A,n,j,i); AA_MATREF(A,n,j,i) = t; } } }
AA_API void aa_dump_mat( FILE *file, const double *A, size_t m, size_t n ) { for( size_t i = 0; i < m; i ++ ) { for( size_t j = 0; j < n-1; j ++ ) { fprintf(file, "%f\t", AA_MATREF(A, m,i,j)); } fprintf(file, "%f\n", AA_MATREF(A, m, i, n-1) ); } }
size_t aa_io_fread_matrix_fix( FILE *fin, size_t m, size_t n, double *A, size_t lda ) { struct aa_mem_region *reg = aa_mem_region_local_get(); void *ptr = aa_mem_region_tmpalloc(reg,1); size_t cnt = 0; for( size_t i = 0; i < m; i ++ ) { cnt += aa_io_getvector( fin, reg, n, &AA_MATREF(A, lda, i, 0), lda ); } aa_mem_region_pop( reg, ptr ); return cnt; }
AA_API void aa_la_xlsnp( size_t m, size_t n, const double *A, const double *A_star, const double *x, const double *yp, double *y ) { aa_la_mvmul(n,m,A_star,x,y); double *B = (double*)aa_mem_region_local_alloc( sizeof(double) * n*n ); // B = A^* A cblas_dgemm( CblasColMajor, CblasNoTrans, CblasNoTrans, (int)n, (int)n, (int)m, 1, A_star, (int)n, A, (int)m, 0, B, (int)n ); // B = A^* A - I for( size_t i = 0; i < n; i ++ ) AA_MATREF(B,n,i,i) -= 1; // y = y + -B yp cblas_dgemv( CblasColMajor, CblasNoTrans, (int)n, (int)n, -1.0, B, (int)n, yp, 1, 1, y, 1 ); aa_mem_region_local_pop( B ); }
double &operator()( size_t i, size_t j ) { return AA_MATREF(_array, ROWS, i, j); }
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * */ AA_API void aa_tf_duqu_matrix_l( const double S[AA_RESTRICT 8], double *AA_RESTRICT M, size_t ldm ) { const size_t r = AA_TF_DUQU_REAL; const size_t d = AA_TF_DUQU_DUAL; aa_tf_qmatrix_l(&S[r], &AA_MATREF(M,ldm,r,r), ldm); aa_tf_qmatrix_l(&S[d], &AA_MATREF(M,ldm,d,r), ldm); FOR_QUAT(i) AA_MEM_ZERO( &AA_MATREF(M,ldm,r,d+i), 4 ); FOR_QUAT(i) AA_MEM_CPY( &AA_MATREF(M,ldm,d,d+i), &AA_MATREF(M,ldm,r,r+i), 4); } AA_API void aa_tf_duqu_matrix_r( const double S[AA_RESTRICT 8], double *AA_RESTRICT M, size_t ldm ) { const size_t r = AA_TF_DUQU_REAL; const size_t d = AA_TF_DUQU_DUAL; aa_tf_qmatrix_r(&S[r], &AA_MATREF(M,ldm,r,r), ldm); aa_tf_qmatrix_r(&S[d], &AA_MATREF(M,ldm,d,r), ldm); FOR_QUAT(i) AA_MEM_ZERO( &AA_MATREF(M,ldm,r,d+i), 4 );
double aa_la_det3x3( const double R[restrict 9] ) { double d; d = AA_MATREF(R,3,0,0) * ( AA_MATREF(R,3,1,1) * AA_MATREF(R,3,2,2) - AA_MATREF(R,3,1,2) * AA_MATREF(R,3,2,1) ) - AA_MATREF(R,3,0,1) * ( AA_MATREF(R,3,1,0) * AA_MATREF(R,3,2,2) - AA_MATREF(R,3,1,2) * AA_MATREF(R,3,2,0)) + AA_MATREF(R,3,0,2) * ( AA_MATREF(R,3,1,0) * AA_MATREF(R,3,2,1) - AA_MATREF(R,3,1,1) * AA_MATREF(R,3,2,0) ); return d; }