예제 #1
0
        public static bool ResizeMatrix(Kalman k, double[,] m, KALMAN_RESIZE f)
        {
            int r = k.T;
            int c = 0;

            if (f == KALMAN_RESIZE.E)
            {
                c = k.n;
            }
            else if (f == KALMAN_RESIZE.V)
            {
                c = (k.n * k.n + k.n) / 2;
            }
            else if (f == KALMAN_RESIZE.BIG_S)
            {
                c = k.r;
            }
            else if (f == KALMAN_RESIZE.BIG_P)
            {
                c = (k.r * k.r + k.r) / 2;
            }
            else if (f == KALMAN_RESIZE.LL)
            {
                c = 1;
            }
            else if (f == KALMAN_RESIZE.K)
            {
                c = k.r * k.n;
            }
            else
            {
                return(false);
            }

            m = null;

            if (m.GetLength(0) != r || m.GetLength(1) != c)
            {
                m = new double[r, c];
            }

            return(m != null);
        }
예제 #2
0
        public static bool CheckMatrix(Kalman k, double[,] m, KALMAN_CHECK f)
        {
            int  r    = 0;
            int  c    = 0;
            bool symm = (f == KALMAN_CHECK.Q || f == KALMAN_CHECK.R);

            if (f == KALMAN_CHECK.F || f == KALMAN_CHECK.Q || f == KALMAN_CHECK.P)
            {
                r = c = k.r;
            }
            else if (f == KALMAN_CHECK.A)
            {
                r = k.k;
                c = k.n;
            }
            else if (f == KALMAN_CHECK.H)
            {
                r = k.r;
                c = k.n;
            }
            else if (f == KALMAN_CHECK.R)
            {
                r = c = k.n;
            }
            else if (f == KALMAN_CHECK.S || f == KALMAN_CHECK.m)
            {
                r = k.r;
                c = 1;
            }

            if (m.GetLength(0) != r || m.GetLength(1) != c)
            {
                return(false);
            }
            else if (symm)
            {
                return(false);
            }

            return(true);
        }