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