Exemplo n.º 1
0
 /// <summary>
 /// 得到秩判据中的状态观测增广矩阵
 /// </summary>
 /// <param name="A"></param>
 /// <param name="C"></param>
 /// <param name="n"></param>
 /// <returns></returns>
 private static Matrix <double> GetPBHOfQo(Matrix <double> A, Matrix <double> C, int n)
 {
     if (n <= 0)
     {
         Console.WriteLine("错误!错误的输入参数 n");
         throw new Self.ExceptionSelf.WrongInputArgument("输入参数:n 格式错误");
         //return Matrix<double>.Build.Dense(1, 1, -1);
     }
     else
     {
         if (n == 1)
         {
             return(C);
         }
         else
         {
             return(ToolSelf.MatrixZengGuang(GetPBHOfQo(A, C, n - 2), C * ToolSelf.PowerSelf(A, n - 1), 1));
         }
     }
 }
Exemplo n.º 2
0
        ///// <summary>
        ///// 实现矩阵的增广功能的函数,返回一个增光的数值 C#无法实现泛型编程,所以这里就只能写一个自己用到的但是通用意义不算特别强的
        ///// 这里面的axis是进行增广的尺度,如果为0,表示横向增广,如果为1,表示纵向增广。
        /////
        ///// </summary>
        //private static Matrix<T> MatrixZengGuang<T>(Matrix<T> matrix1, Matrix<T> matrix2, int axis)
        //{
        //    if (axis == 0)
        //    {
        //        Matrix<T> matrix = Matrix<T>.Build.Dense(matrix1.RowCount, matrix1.ColumnCount + matrix2.ColumnCount);
        //        for (int i = 0; i < matrix1.RowCount; i++)
        //            for (int j = 0; j < matrix1.ColumnCount + matrix2.ColumnCount; j++)
        //            {
        //                if (j < matrix1.ColumnCount)
        //                    matrix(i, j) = matrix1(i, j);
        //                else
        //                    matrix(i, j) = matrix2(i, j - matrix1.ColumnCount);
        //            }
        //        return matrix;
        //    }
        //    else if (axis == 1)
        //    {
        //        Matrix<T> matrix = Matrix<T>.Build.Dense(matrix1.RowCount + matrix2.RowCount, matrix1.ColumnCount);
        //        for (int i = 0; i < matrix1.RowCount + matrix2.RowCount; i++)
        //            for (int j = 0; j < matrix1.ColumnCount; j++)
        //            {
        //                if (i < matrix1.RowCount)
        //                    matrix(i, j) = matrix1(i, j);
        //                else
        //                    matrix(i, j) = matrix2(i - matrix1.RowCount, j);
        //            }
        //        return matrix;
        //    }
        //    else
        //    {
        //        Console.WriteLine("错误的输入尺度。矩阵只能在行或者列的方向上进行增广");
        //        //报出异常

        //    }
        //}

        /// <summary>
        /// 私有方法,用来得到能控标准型矩阵
        /// </summary>
        /// <param name="A"></param>
        /// <param name="B"></param>
        /// <param name="n"></param>
        /// <returns></returns>
        private Matrix <double> GetPBHOfQc(Matrix <double> A, Matrix <double> B, int n)
        {
            if (n <= 0)
            {
                //Console.WriteLine("错误!错误的输入参数 n");
                throw new Self.ExceptionSelf.WrongInputArgument("输入参数:n 格式错误");
                //return Matrix<double>.Build.Dense(1, 1, -1);
            }
            else
            {
                if (n == 1)
                {
                    return(B);
                }
                else
                {
                    return(ToolSelf.MatrixZengGuang(GetPBHOfQc(A, B, n - 2), ToolSelf.PowerSelf(A, n - 1) * B, 0));
                }
            }
        }