示例#1
0
文件: la.c 项目: BrownRiceRice/amino
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);
        }
    }
}
示例#2
0
文件: la.c 项目: BrownRiceRice/amino
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;
        }
    }
}
示例#3
0
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) );
    }
}
示例#4
0
文件: io.c 项目: BrownRiceRice/amino
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;
}
示例#5
0
文件: la.c 项目: BrownRiceRice/amino
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 );
}
示例#6
0
 double &operator()( size_t i, size_t j ) {
     return AA_MATREF(_array, ROWS, i, j);
 }
示例#7
0
文件: quat_duqu.c 项目: kingdwd/amino
 *   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 );
示例#8
0
文件: la.c 项目: BrownRiceRice/amino
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;
}