/// <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)); } } }
///// <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)); } } }