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