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