/// <summary>
        /// 过程参考书P85
        /// </summary>
        private void MainLoop()
        {
            double[,] dFinal = null;
            do
            {
                var r1r2     = MatrixR();
                var auxCoord = CalcAuxCoord(r1r2);
                var A        = CalcErrorA(auxCoord);
                var L        = CalcErrorL(auxCoord);

                if (this.ItCount == 0)
                {
                    this.FirstA = A;
                    this.FirstL = L;
                }

                // 公式见书P83(5-27)
                var AT = MatrixOperation.MatrixTrans(A);
                dFinal = ((1 / (AT * A)) * AT * L).Data;

                // 叠加结果
                this.p1 += dFinal[0, 0];
                this.k1 += dFinal[1, 0];
                this.p2 += dFinal[2, 0];
                this.w2 += dFinal[3, 0];
                this.k2 += dFinal[4, 0];

                this.ItCount++;
            } while (!HasLimited(dFinal));
        }
 public static Matrix operator +(Matrix a, Matrix b)
 {
     return(MatrixOperation.Add(a, b));
 }
 public static Matrix operator *(Matrix a, Matrix b)
 {
     return(MatrixOperation.Multiply(a, b));
 }
 public static Matrix operator *(double a, Matrix b)
 {
     return(MatrixOperation.SimpleMultiply(a, b));
 }
 public static Matrix operator -(Matrix a, Matrix b)
 {
     return(MatrixOperation.Sub(a, b));
 }