Esempio n. 1
0
        /// <summary>
        /// 行列と列ベクトルの乗算
        /// </summary>
        /// <param name="m">行列</param>
        /// <param name="cv">列ベクトル</param>
        /// <returns>乗算結果の列ベクトル</returns>
        public static ColumnVector operator *(Matrix m, ColumnVector cv)
        {
            MatrixChecker.CanMultiply(m, cv);
            ColumnVector ret = new ColumnVector();

            clapack.Function.dgemv(ref ret._body, m._body, m._rsize, m._csize, cv._body);

            return(ret);
        }
Esempio n. 2
0
        /// <summary>
        /// 行ベクトルと行列の乗算
        /// </summary>
        /// <param name="rv">行ベクトル</param>
        /// <param name="m">行列</param>
        /// <returns>乗算結果の行ベクトル</returns>
        public static RowVector operator *(RowVector rv, Matrix m)
        {
            MatrixChecker.CanMultiply(rv, m);
            RowVector ret = new RowVector();

            clapack.Function.dgemv(ref ret._body, rv._body, m._body, m._rsize, m._csize);

            return(ret);
        }
Esempio n. 3
0
        /// <summary>
        /// 行ベクトルと行列の乗算
        /// </summary>
        /// <param name="rv">行ベクトル</param>
        /// <param name="m">行列</param>
        /// <returns>乗算結果の行ベクトル</returns>
        public static RowVector operator *(RowVector rv, Matrix m)
        {
            MatrixChecker.CanMultiply(rv, m);
            RowVector ret = new RowVector();

            krdlab.law.func.dgemv(ref ret._body, rv._body, m._body, m._rsize, m._csize);

            return(ret);
        }
Esempio n. 4
0
        /// <summary>
        /// 行列どうしを乗算する.
        /// </summary>
        /// <param name="m1">左項となる行列</param>
        /// <param name="m2">右項となる行列</param>
        /// <returns>乗算結果の行列</returns>
        public static Matrix operator *(Matrix m1, Matrix m2)
        {
            MatrixChecker.CanMultiply(m1, m2);
            double[] ret   = null;
            int      rsize = 0;
            int      csize = 0;

            clapack.Function.dgemm(ref ret, ref rsize, ref csize,
                                   m1._body, m1._rsize, m1._csize,
                                   m2._body, m2._rsize, m2._csize);

            return(new Matrix(ret, rsize, csize));
        }