Beispiel #1
0
        /// <summary>
        /// 最小二乘误差矩阵
        /// [1 0  -y  x]
        /// [0 1   x  y]
        /// </summary>
        /// <param name="X"></param>
        /// <returns></returns>

        private double[,] GetB(double[,] X)
        {
            int rowNum = X.GetLength(0);

            double[,] B = MatrixTool.Init(rowNum, 4);
            //double[,] M = GetM();
            double[,] mi = MatrixTool.Ident(2);
            //double[,]  MK;

            //MK = specialMulti(M, X);

            for (int i = 0; i < rowNum; i += 2)
            {
                MatrixTool.CopySub(mi, 0, 0, 2, 2, ref B, i, 0);
            }

            for (int i = 0; i < rowNum; i += 2)
            {
                B[i, 2]     = X[i, 0];
                B[i, 3]     = -X[i + 1, 0];
                B[i + 1, 2] = X[i + 1, 0];
                B[i + 1, 3] = X[i, 0];
            }

            return(B);
        }
Beispiel #2
0
        private double[,] GetA()
        {
            double[,] M  = GetM();
            double[,] I2 = MatrixTool.Ident(3);
            double[,] A  = MatrixTool.Init(3, 6);

            MatrixTool.MutliConst(ref I2, -1);
            MatrixTool.MutliConst(ref M, (1 + k));
            MatrixTool.CopySub(M, 0, 0, 3, 3, ref A, 0, 0);
            MatrixTool.CopySub(I2, 0, 0, 3, 3, ref A, 0, 3);
            return(A);
        }
Beispiel #3
0
        private double[,] GetB(double[,] X)
        {
            int rowNum = X.GetLength(0);

            double[,] B = MatrixTool.Init(rowNum, 7);
            //double[,] M = GetM();
            //double[,] Mdx = GetMdx();
            //double[,] Mdy = GetMdy();
            //double[,] Mdz = GetMdz();
            double[,] mi = MatrixTool.Ident(3);
            //double[,] MX, MY, MZ, MK;

            //MK = specialMulti(M, X);
            //MX = specialMulti(Mdx, X);
            //MY = specialMulti(Mdy, X);
            //MZ = specialMulti(Mdz, X);

            for (int i = 0; i < rowNum; i += 3)
            {
                MatrixTool.CopySub(mi, 0, 0, 3, 3, ref B, i, 0);

                B[i, 3] = 0;
                B[i, 4] = -X[i + 2, 0];
                B[i, 5] = X[i + 1, 0];
                B[i, 6] = X[i, 0];

                B[i + 1, 3] = X[i + 2, 0];
                B[i + 1, 4] = 0;
                B[i + 1, 5] = -X[i + 0, 0];
                B[i + 1, 6] = X[i + 1, 0];

                B[i + 2, 3] = -X[i + 1, 0];
                B[i + 2, 4] = X[i + 0, 0];
                B[i + 2, 5] = 0;
                B[i + 2, 6] = X[i + 2, 0];
            }
            //MatrixTool.CopySub(MX, 0, 0, rowNum, 1, ref B, 0, 3);
            //MatrixTool.CopySub(MY, 0, 0, rowNum, 1, ref B, 0, 4);
            //MatrixTool.CopySub(MZ, 0, 0, rowNum, 1, ref B, 0, 5);
            //MatrixTool.CopySub(MK, 0, 0, rowNum, 1, ref B, 0, 6);
            return(B);
        }