コード例 #1
0
        private Tuple <Vectors, double, double> HalfSolve(int len)
        {
            SqMatrix iD1 = D1.SubMatrix(len), iD2 = D2.SubMatrix(len), iS = S.SubMatrix(len);
            Vectors  iR1 = R1.SubVector(len), iR2 = R2.SubVector(len);

            SqMatrix iD1m = D1m.SubMatrix(len), iD2m = D2m.SubMatrix(len), idl;
            Vectors  idr;

            idl = (D2 - S * (D1m * S)).SubMatrix(len);
            idr = (R2 + S * D1m * R1).SubVector(len);

            Vectors id = idl.Solve(idr), icnew = (D1m * (R1 + S * id)).SubVector(len);

            Vectors res = Vectors.Union2(icnew, id);

            double p1 = IntegralClass.IntegralCurve((Point y) => (TestFuncAndCurve.Grads[GF - 1](y) * TestFuncAndCurve.Norm[CIRCLE - 1](y)).Sqr(), CIRCLE - 1);
            double p2 = IntegralClass.IntegralCurve((Point y) => (U(y)).Sqr(), CIRCLE - 1);

            Functional fif = (Point x) =>
            {
                double s = 0;
                for (int i = 0; i < id.Deg; i++)
                {
                    s += icnew[i] * alpha(x, i) + id[i] * beta(x, i);
                }
                return(Math.Abs(s - KursMethods.U(x)));
            };
            double L = IntegralClass.Integral(fif, CIRCLE - 1);

            $"len = {len}, L = {this.F(res)}".Show();

            return(new Tuple <Vectors, double, double>(res, F(res), L));
        }