Example #1
0
        public event EventHandler <GetEps> Print;  //Сигнатура события в методе FindReValue,  событие с аргументом


        public double FindReValue(double a, double b, double val, double eps, RealFunc f)// находим обратное значение
        {
            //Делим отрезок на 10 частей и итерируемся по нему до тех пор пока
            //не сойдёмся с нужной точностью или не перестанем сходится к точке
            //потом берём подотрезок и проходим аналогично по нему
            double h = (b - a) / 10;
            int    n = 0;

            while (Math.Abs(f(a + h) - val) > eps)
            {
                h = (b - a) / 10;
                n = 0;
                while ((Math.Abs(f(a + n * h) - val) > Math.Abs(f(a + (n + 1) * h) - val)) && (Math.Abs(f(a + n * h) - val) > eps))
                {
                    n++;
                    print(Math.Abs(f(a + n * h) - val));// вызов события
                }

                a = a + (n - 1) * h;
                b = a + (n + 1) * h;
            }


            return(a + h);
        }
        public void DrawCurves2()
        {
            SequenceFunc t = (double x, int k) => Math.Exp(k * x);//FuncMethods.Monoms;

            int[]      count = new int[] { 9, 16, 34 };
            RealFunc[] f     = new RealFunc[count.Length];
            Point[]    b     = new Point[] { new Point(-1, 5), new Point(-4, 4), new Point(-2, 4), new Point(-2, 2), new Point(-1, 1), new Point(-1, 1) };

            RealFunc f1 = (double x) => Math.Cos(2 * x) * (Math.Exp((x / 3).Abs()) - 4 * Math.Log(1 + x.Abs()));//Math.Sin(5 * x) / Math.Exp(x.Abs() / 3);
            RealFunc fl;


            Parallel.For(0, f.Length, (int i) =>
            {
                f[i] = FuncMethods.Approx(f1, t, SequenceFuncKind.Other, count[i], b[0].x, b[0].y, true);
            });
            fl = FuncMethods.Approx(f1, t, SequenceFuncKind.Other, count[count.Length - 1], b[0].x, b[0].y);

            int    c = 280;
            double h = (b[0].y - b[0].x) / (c - 1);


            StreamWriter fs = new StreamWriter($"Monoms vs.txt");

            //fs.WriteLine($"count normal ultra");
            for (int j = 0; j < c; j++)
            {
                double arg = b[0].x + j * h;
                fs.Write($"{arg} {f1(arg)} {fl(arg)}");
                for (int i = 0; i < count.Length; i++)
                {
                    fs.Write($" {f[i](arg)}");
                }
                fs.WriteLine();
            }

            fs.Close();
        }
        public void Polynoms()
        {
            RealFunc f = (double x) => 1.0 / (1.0 + x * x);
            double   a = -9, b = 5;

            using (StreamWriter fs = new StreamWriter("Runge.txt"))
            {
                for (int i = 1; i < 30; i++)
                {
                    Polynom p = Polynom.Lag(f, i - 1, a, b);
                    fs.WriteLine($"{i} {FuncMethods.RealFuncMethods.NormDistanceС(f,p.Value,a,b)} {FuncMethods.RealFuncMethods.NormDistance(f, p.Value, a, b)}");
                }
            }
        }
        public void DrawCurves()
        {
            SequenceFunc t = (double x, int kk) => Math.Log(0.01 + (x + 1 - 0.1 * kk).Sqr());//1.0/(1.0+kk*x*x);//FuncMethods.Monoms;


            RealFunc[] f = new RealFunc[] { (double x) => Math.Exp(x / (x.Abs() + 1)), (double x) => Math.Sin(x + 2) * Math.Cos(2 * x), (double x) => x.Abs() * Math.Exp(Math.Cos(x)), (double x) => Math.Log(1 + x.Abs()) * Math.Sinh(x / 2), (double x) => Math.Sin(x) - 8.0 / (2 * x + 6), (double x) => x.Abs() + Math.Log(0.01 + x * x) };
            Point[]    b = new Point[] { new Point(0, 5), new Point(-4, 4), new Point(-2, 4), new Point(-2, 2), new Point(-1, 1), new Point(-1, 1) };

            int k = 64;

            int[] mas = new int[k];
            for (int i = 0; i < k; i++)
            {
                mas[i] = i + 1;
            }

            Parallel.For(0, f.Length, (int i) =>
            {
                var c           = FuncMethods.UltraVsNormal(f[i], t, SequenceFuncKind.Other, k, b[i].x, b[i].y);
                StreamWriter fs = new StreamWriter($"Monoms {i + 1}.txt");
                fs.WriteLine($"count normal ultra");
                for (int j = 0; j < k; j++)
                {
                    fs.WriteLine($"{mas[j]} {c.Item1[j]} {c.Item2[j]}");
                }
                fs.Close();
            });


            //k = 75;
            //mas = new int[k];
            //for (int i = 0; i < k; i++)
            //    mas[i] = i + 1;
            //Parallel.For(0, f.Length, (int i) =>
            //{
            //    t = FuncMethods.TrigSystem(b[i].x, b[i].y);
            //    var c = FuncMethods.UltraVsNormal(f[i], t, SequenceFuncKind.Orthogonal, k, b[i].x, b[i].y);
            //    StreamWriter fs = new StreamWriter($"Trig {i + 1}.txt");
            //    fs.WriteLine($"count normal ultra");
            //    for (int j = 0; j < k; j++)
            //        fs.WriteLine($"{mas[j]} {c.Item1[j]} {c.Item2[j]}");
            //    fs.Close();
            //});
        }
        public Energy()
        {
            InitializeComponent();
            Библиотека_графики.ForChart.SetToolTips(ref chart1);
            Библиотека_графики.ForChart.ClearPointsAndHideLegends(ref chart1);

            Ez0 = (double z) =>
            {
                ComplexFunc us = (Number.Complex x) => (абКонсоль.uRes(x.Re, 0).Conjugate *абКонсоль.q(x.Re) + абКонсоль.uRes(-x.Re, 0).Conjugate *абКонсоль.q(-x.Re)) / абКонсоль.m1;
                return((FuncMethods.DefInteg.GaussKronrod.DINN_GK(us, 0, 0, 0, 0, 0, 0)).Re);
            };
            Ez = (double z) =>
            {
                //ComplexFunc us = (Number.Complex x) => РабКонсоль.uRes(x.Re, z).Conjugate * (РабКонсоль.uRes(x.Re, z+ РабКонсоль.eps) - РабКонсоль.uRes(x.Re , z- РабКонсоль.eps)) / (2 * РабКонсоль.eps);
                //ComplexFunc us_ = (Number.Complex x) => РабКонсоль.uRes(-x.Re, z).Conjugate * (РабКонсоль.uRes(-x.Re, z + РабКонсоль.eps) - РабКонсоль.uRes(-x.Re, z - РабКонсоль.eps)) / (2 * РабКонсоль.eps);
                //return (FuncMethods.DefInteg.GaussKronrod.DINN_GK(us, 0, 0, 0, 0, 0, 0) + FuncMethods.DefInteg.GaussKronrod.DINN_GK(us_, 0, 0, 0, 0, 0, 0)).Abs;

                //ComplexFunc us = (Number.Complex x) => (РабКонсоль.uRes(x.Re, z).Conjugate * (РабКонсоль.uRes(x.Re, z + РабКонсоль.eps) - РабКонсоль.uRes(x.Re, z - РабКонсоль.eps)) + РабКонсоль.uRes(-x.Re, z).Conjugate * (РабКонсоль.uRes(-x.Re, z + РабКонсоль.eps) - РабКонсоль.uRes(-x.Re, z - РабКонсоль.eps))) / (2 * РабКонсоль.eps);
                //return (FuncMethods.DefInteg.GaussKronrod.DINN_GK(us, 0, 0, 0, 0, 0, 0)).Abs;

                //ComplexFunc us = (Number.Complex x) => РабКонсоль.uRes(x.Re, z).Conjugate * РабКонсоль.uResdz(x.Re, z) + РабКонсоль.uRes(-x.Re, z).Conjugate * РабКонсоль.uResdz(-x.Re, z);
                //return (FuncMethods.DefInteg.GaussKronrod.DINN_GK(us, 0, 0, 0, 0, 0, 0)).Re;

                //ComplexFunc us = (Number.Complex x) => РабКонсоль.u(x.Re, z).Conjugate * РабКонсоль.u_(x.Re, z).Re + РабКонсоль.u(-x.Re, z).Conjugate * РабКонсоль.u_(-x.Re, z).Re;
                //return (FuncMethods.DefInteg.GaussKronrod.DINN_GK(us, 0, 0, 0, 0, 0, 0)).Re;

                ComplexFunc us = (Number.Complex x) => абКонсоль.U_(x, z) * абКонсоль.U(x.Conjugate, z).Conjugate + абКонсоль.U_(-x, z) * абКонсоль.U(-x.Conjugate, z).Conjugate;
                return((FuncMethods.DefInteg.GaussKronrod.DINN_GK(us, абКонсоль.t1, абКонсоль.t2, абКонсоль.t3, абКонсоль.t4, абКонсоль.tm)).Im / 2 / Math.PI);
            };
            Ex = (double x) =>
            {
                //ComplexFunc u = (Number.Complex z) => (РабКонсоль.uRes(x + РабКонсоль.eps, z.Re) - РабКонсоль.uRes(x - РабКонсоль.eps, z.Re)) / (2 * РабКонсоль.eps) * РабКонсоль.uRes(x, z.Re).Conjugate;
                //return FuncMethods.DefInteg.GaussKronrod.MySimpleGaussKronrod(u, -РабКонсоль.h, 0).Re;

                ComplexFunc u = (Number.Complex z) => абКонсоль.uResdx(x, z.Re) * абКонсоль.uRes(x, z.Re).Conjugate;
                return(FuncMethods.DefInteg.GaussKronrod.MySimpleGaussKronrod(u, -абКонсоль.h, 0).Im);

                //RealFunc ureal = (double z) => u(z).Re;
                //return FuncMethods.DefInteg.GaussKronrod.Integral(ureal, -РабКонсоль.h, 0);
            };
        }