Ejemplo n.º 1
0
        public static SquareMatrix operator *(SquareMatrix Matrix, double Scalar)
        {
            SquareMatrix ReturnMatrix = new SquareMatrix(Matrix.RowSize);

            for (int Row = 0; Row < Matrix.RowSize; Row++)
                for (int Col = 0; Col < Matrix.ColSize; Col++)
                    ReturnMatrix[Row, Col] = Matrix[Row, Col] * Scalar;
            return ReturnMatrix;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 逆行列を取得します。
        /// </summary>
        /// <param name="SquareMatrix">元になる正方行列</param>
        /// <returns>逆行列</returns>
        public SquareMatrix GetInverseMatrix()
        {
            int i, j, k, matrixLength = base.Vectors.Length;
            //元の行列
            SquareMatrix BaseMatrix = new SquareMatrix(base.Vectors);
            //逆行列が入るベクトル。今は単位行列。
            SquareMatrix InverseMatrix = SquareMatrix.IdentityMatrix(matrixLength);
            double temp;

            for (i = 0; i < matrixLength; i++)
            {
                temp = 1 / BaseMatrix[i,i];
                for (j = 0; j < matrixLength; j++)
                {
                    BaseMatrix[i, j] *= temp;
                    InverseMatrix[i, j] *= temp;
                }

                for (j = 0; j < matrixLength; j++)
                {
                    if (i != j)
                    {
                        temp = BaseMatrix[j, i];
                        for (k = 0; k < matrixLength; k++)
                        {
                            BaseMatrix[j, k] -= BaseMatrix[i, k] * temp;
                            InverseMatrix[j, k] -= InverseMatrix[i, k] * temp;
                        }
                    }
                }
            }

            return InverseMatrix;
        }
Ejemplo n.º 3
0
        /// <summary>
        /// 行列式の値を取得
        /// </summary>
        /// <returns>行列式の値</returns>
        public double GetDet()
        {
            double det = 1d;
            int dim = this.ColSize;
            SquareMatrix WorkMatrix = new SquareMatrix(this);

            for (int i = 0; i < dim; i++)
                for (int j = 0; j < dim; j++)
                    if (i < j)
                    {
                        double buf = WorkMatrix[j, i] / WorkMatrix[i, i];
                        for (int k = 0; k < dim; k++)
                            WorkMatrix[j, k] -= WorkMatrix[i, k] * buf;
                    }

            //対角部分の積
            for (int i = 0; i < dim; i++)
                det *= WorkMatrix[i, i];

            return det;
        }
Ejemplo n.º 4
0
 /// <summary>
 /// 指定した階数の単位行列を取得します。
 /// </summary>
 /// <param name="Rank">階数</param>
 /// <returns>単位行列</returns>
 public static SquareMatrix IdentityMatrix(int Rank)
 {
     SquareMatrix ReturnMatrix = new SquareMatrix(Rank);
     for (int i = 0; i < Rank; i++)
         ReturnMatrix[i, i] = 1d;
     return ReturnMatrix;
 }
Ejemplo n.º 5
0
        public static SquareMatrix operator /(SquareMatrix LeftMatrix, double Scalar)
        {
            SquareMatrix ReturnMatrix = new SquareMatrix(LeftMatrix.RowSize);

            for (int Row = 0; Row < LeftMatrix.RowSize; Row++)
                for (int Col = 0; Col < LeftMatrix.ColSize; Col++)
                    ReturnMatrix[Row, Col] = LeftMatrix[Row, Col] / Scalar;
            return ReturnMatrix;
        }
Ejemplo n.º 6
0
        public static SquareMatrix operator -(SquareMatrix LeftMatrix, SquareMatrix RightMatrix)
        {
            if (LeftMatrix.ColSize != RightMatrix.ColSize || LeftMatrix.RowSize != RightMatrix.RowSize)
                throw new ApplicationException("左右の行列の大きさが一致しません");

            SquareMatrix ReturnMatrix = new SquareMatrix(LeftMatrix.RowSize);

            for (int Row = 0; Row < ReturnMatrix.RowSize; Row++)
                for (int Col = 0; Col < ReturnMatrix.ColSize; Col++)
                {
                    double SetValue = LeftMatrix[Row, Col] - RightMatrix[Row, Col];
                    ReturnMatrix[Row, Col] = SetValue;
                }
            return ReturnMatrix;
        }
 public TransitionProbabilityMatrix(SquareMatrix Matrix)
 {
     this.Vectors = (ColumnVector[])Matrix.ColumnVector.Clone();
 }