public void Mul()//DataGridView dt, DataGridView dt1, DataGridView dt2, DataGridView dt3,DataGridView dt4)
        {
            Function = MulFunction;
            ListUnion();
            TransformationOfLists();
            CreatedListsForMultiple();
            List <double> X1 = new List <double>();
            List <double> X2 = new List <double>();

            for (int k = 0; k < X.Count; k++)
            {
                X1.Add(X[k]);
                X2.Add(X[k]);
            }

            List <double> KD = new List <double>();
            List <double> KU = new List <double>();
            List <double> MD = new List <double>();
            List <double> MU = new List <double>();

            //foreach (var V in X)
            //{
            //    dt4.Rows.Add(V.ToString());
            //}
            for (int i = 0; i < X.Count - 1; i++)
            {
                if (Math.Round(KoefLFIDown[i][0], 6) != 0 && Math.Round(KoefLFIDown[i][1], 6) != 0)
                {
                    K1 = KoefLFIDown[i][0]; K2 = KoefLFIDown[i][1]; M1 = KoefLFIDown[i][2]; M2 = KoefLFIDown[i][3];
                    List <double> ListD = new List <double>()
                    {
                        ExtremePointForParabola()
                    };
                    LFI LinFuncIntD = new LFI(1, X[i], X[i + 1], ListD, ParabolaFunction, DerivativeParabolaFunction);
                    LinFuncIntD.BuildLFI();
                    //LinFuncIntD.PaintLFI(chart);
                    for (int j = 1; j < LinFuncIntD.X.Count - 1; j++)
                    {
                        X1.Add(Math.Round(LinFuncIntD.X[j], 10));
                    }
                    for (int j = 0; j < LinFuncIntD.KDown.Count; j++)
                    {
                        KD.Add(LinFuncIntD.KDown[j]);
                        MD.Add(LinFuncIntD.MDown[j]);
                    }
                }
                else
                {
                    K1 = KoefLFIDown[i][0]; K2 = KoefLFIDown[i][1]; M1 = KoefLFIDown[i][2]; M2 = KoefLFIDown[i][3];
                    KD.Add(CreateMulK());
                    MD.Add(CreateMulM());
                }
                //---------------------------------------------------------------------------------------------------------//
                if (Math.Round(KoefLFIUp[i][0], 6) != 0 && Math.Round(KoefLFIUp[i][1], 6) != 0)
                {
                    K1 = KoefLFIUp[i][0]; K2 = KoefLFIUp[i][1]; M1 = KoefLFIUp[i][2]; M2 = KoefLFIUp[i][3];
                    List <double> ListU = new List <double>()
                    {
                        ExtremePointForParabola()
                    };
                    LFI LinFuncIntU = new LFI(1, X[i], X[i + 1], ListU, ParabolaFunction, DerivativeParabolaFunction);
                    LinFuncIntU.BuildLFI();
                    for (int j = 1; j < LinFuncIntU.X.Count - 1; j++)
                    {
                        X2.Add(Math.Round(LinFuncIntU.X[j], 10));
                    }
                    for (int j = 0; j < LinFuncIntU.KUp.Count; j++)
                    {
                        KU.Add(LinFuncIntU.KUp[j]);
                        MU.Add(LinFuncIntU.MUp[j]);
                    }
                }
                else
                {
                    K1 = KoefLFIUp[i][0]; K2 = KoefLFIUp[i][1]; M1 = KoefLFIUp[i][2]; M2 = KoefLFIUp[i][3];
                    KU.Add(CreateMulK());
                    MU.Add(CreateMulM());
                }
            }

            X1.Sort();
            X2.Sort();


            X.Clear();
            //List<double> NewX = new List<double>();
            X = X1.Union(X2).ToList();
            //X = X.Distinct().ToList();
            X.Sort();
            //for (int k = 0; k < X1.Count; k++)
            //{
            //    dt.Rows.Add(X1[k].ToString());
            //}

            //for (int k = 0; k < X2.Count; k++)
            //{
            //    dt1.Rows.Add(X2[k].ToString());
            //}
            //for (int k = 0; k < X.Count; k++)
            //{
            //    dt2.Rows.Add(X[k].ToString());
            //}

            for (int i = 0; i < X.Count - 1; i++)
            {
                for (int j1 = 0; j1 < X1.Count - 1; j1++)
                {
                    if (X[i] >= X1[j1] && X[i + 1] <= X1[j1 + 1])
                    {
                        KDown.Add(KD[j1]);
                        MDown.Add(MD[j1]);
                    }
                }
                for (int j2 = 0; j2 < X2.Count - 1; j2++)
                {
                    if (X[i] >= X2[j2] && X[i + 1] <= X2[j2 + 1])
                    {
                        KUp.Add(KU[j2]);
                        MUp.Add(MU[j2]);
                    }
                }
            }
            CreatedFLists();
            //for (int k = 0; k < KU.Count; k++)
            //{
            //    dt3.Rows.Add(KU[k].ToString(), MU[k].ToString());//,KDown[k].ToString(), MDown[k].ToString());
            //}
        }
        //-------------------------------------------------------------------------------------------------------------------------//

        private void CreateLFIbutton_Click(object sender, EventArgs e)
        {
            int    N = Convert.ToInt32(NtextBox.Text);
            double A = Convert.ToDouble(AtextBox.Text);
            double B = Convert.ToDouble(BtextBox.Text);

            //LFI LinFuncIntQuad = new LFI(N, A, B, ListOfExtremePointsQuad, QuadraticFunction, DerivateQuadFunc);
            //LFI LinFuncIntQuadMy = new LFI(N, A, B, ListOfExtremePointsQuadMy, QuadraticFunctionMy, DerivateQuadFuncMy);
            //LFI LinFuncIntSin = new LFI(N, A, B, ListOfExtremePointsSin, Sin, DerivativeSin);
            //LFI LinFuncIntCos = new LFI(N, A, B, ListOfExtremePointsCos, Cos, DerivativeCos);
            //LFI LinFuncIntPow = new LFI(N, A, B, ListOfExtremePointsPow, Pow, DerivativePow);
            //LFI LinFuncIntLn = new LFI(N, A, B, ListOfExtremePointsLn, Ln, DerivativeLn);
            LFI LFI1 = new LFI(N, A, B, X1, ElemFunction1, DerivateFunction1);
            LFI LFI2 = new LFI(N, A, B, X2, ElemFunction2, DerivateFunction2);

            LFI1.BuildLFI();
            LFI1.PaintLFI(chart1);

            LFI2.BuildLFI();
            LFI2.PaintLFI(chart2);

            ArithmeticOperation Sum = new ArithmeticOperation(LFI1.X, LFI1.KUp, LFI1.KDown, LFI1.MUp, LFI1.MDown,
                                                              LFI2.X, LFI2.KUp, LFI2.KDown, LFI2.MUp, LFI2.MDown, LFI1.ElemFunction, LFI2.ElemFunction);

            Sum.Sum();
            Sum.PaintOperation(chart3);
            Sum.Norma();
            Sum.Width();
            //Sum.PaintLists(dgvSuma);
            //Sum.FunctionalNorm(dgvSumNorm);
            //Sum.FunctionalWidth(dgvSumWidth);

            ArithmeticOperation Sub = new ArithmeticOperation(LFI1.X, LFI1.KUp, LFI1.KDown, LFI1.MUp, LFI1.MDown,
                                                              LFI2.X, LFI2.KUp, LFI2.KDown, LFI2.MUp, LFI2.MDown, LFI1.ElemFunction, LFI2.ElemFunction);

            Sub.Sub();
            Sub.PaintOperation(chart4);
            Sub.Norma();
            Sub.Width();
            //Sub.PaintLists(dgvSub);
            //Sub.FunctionalNorm(dgvSubNorm);
            //Sub.FunctionalWidth(dgvSubWidth);

            //ArithmeticOperation Mul = new ArithmeticOperation(LinFuncIntQuad.X, LinFuncIntQuad.KUp, LinFuncIntQuad.KDown, LinFuncIntQuad.MUp, LinFuncIntQuad.MDown,
            // LinFuncIntLn.X, LinFuncIntLn.KUp, LinFuncIntLn.KDown, LinFuncIntLn.MUp, LinFuncIntLn.MDown, LinFuncIntQuad.ElemFunction, LinFuncIntLn.ElemFunction);
            //Mul.Mul();
            //Mul.PaintOperation(chart5);
            //Mul.Norma();
            //Mul.Width();
            //Mul.FunctionalNorm(dgvMulNorm);
            //Mul.FunctionalWidth(dgvMulWidth);
            //Mul.PaintLists(dgvMul);

            AgregateOperation Ag = new AgregateOperation(LFI1.X, LFI1.KUp, LFI1.KDown, LFI1.MUp, LFI1.MDown,
                                                         LFI2.X, LFI1.ElemFunction, LFI2.ElemFunction, DerivateFunction2);

            // ++          AgregateOperation Ag = new AgregateOperation(LinFuncIntQuad.X, LinFuncIntQuad.KUp, LinFuncIntQuad.KDown, LinFuncIntQuad.MUp, LinFuncIntQuad.MDown,
            //LinFuncIntPow.X, QuadraticFunction, PowMy, DerivativePowMy);

            //             AgregateOperation Ag = new AgregateOperation(LinFuncIntQuad.X, LinFuncIntQuad.KUp, LinFuncIntQuad.KDown, LinFuncIntQuad.MUp, LinFuncIntQuad.MDown,
            //ListOfExtremePointsCos, QuadraticFunction, Cos, DerivativeCos);


            Ag.Agregate();
            Ag.PaintOperation(chart5);
            //Sub.Norma();
            //Sub.Width();
            //Sub.PaintLists(dgvSub);
            //Sub.FunctionalNorm(dgvSubNorm);
            //Sub.FunctionalWidth(dgvSubWidth);
        }