public void ToPositiveInfinityIntegralTest()
        {
            var abs = Math.Pow(10, -8);

            Func <double, double> func1 = (x) => 1 / Math.Pow(x, 2);
            var res1 = IntegralCalculator.Integrate(1, double.PositiveInfinity, func1);

            Assert.AreEqual(1.0, res1, abs);

            Func <double, double> func2 = (x) => x / (Math.Pow(x, 4) + 1);
            var res2 = IntegralCalculator.Integrate(0, double.PositiveInfinity, func2);

            Assert.AreEqual(Math.PI / 4, res2, abs);

            Func <double, double> func3 = (x) => 1 / (Math.Pow(x, 2) + 4 * x + 5);
            var res3 = IntegralCalculator.Integrate(-1, double.PositiveInfinity, func3);

            Assert.AreEqual(Math.PI / 4, res3, abs);

            Func <double, double> func4 = (x) => x *Math.Pow(Math.E, (-1) *x *x);

            var res4 = IntegralCalculator.Integrate(0, double.PositiveInfinity, func4);

            Assert.AreEqual(0.5, res4, abs);
        }
Ejemplo n.º 2
0
        public override void Solve()
        {
            base.Solve();

            var expressionGrammar = new LabGrammar();
            var language          = new LanguageData(expressionGrammar);
            var parser            = new Parser(language);
            var runtime           = new LabRuntime(language);

            ParseTree tree = parser.Parse(Function);

            if (tree.HasErrors())
            {
                Results.Add(new BoxModel("Error at parsing", "Syntax errors found. Abrting."));
                return;
            }

            if (Precision * Math.Abs(A - B) > 0.3 && Method != "simpson")
            {
                Results.Add(new BoxModel("Precision too small", "Use Simpson's method or make precisionne bigger"));
                return;
            }


            Results.AddRange(IntegralCalculator.Calculate(
                                 tree,
                                 runtime,
                                 A,
                                 B,
                                 Precision,
                                 Method,
                                 Subtype
                                 ));
        }
Ejemplo n.º 3
0
        public MyIntegralViewModel(string userid)
        {
            var caculator = new IntegralCalculator(userid);

            Integral       = caculator.Integral;
            UsedIntegral   = caculator.UsedIntegral;
            FrozenIntegral = caculator.FrozenIntegral;
        }
Ejemplo n.º 4
0
    static void Main()
    {
        int n = int.Parse(Console.ReadLine());

        for (int i = 0; i < n; i++)
        {
            double[] args = Array.ConvertAll(Console.ReadLine().Split(' '), x => double.Parse(x));
            IntegralCalculator.InsertParameter((int)args[0]);
            Console.WriteLine(func(args[1], args[2]).ToString("f3"));
        }
    }
        public void FromNegativeToPositiveInfinityIntegralTest()
        {
            var abs = Math.Pow(10, -8);

            Func <double, double> func1 = (x) => x *Math.Pow(Math.E, (-1) *x *x);

            var res1 = IntegralCalculator.Integrate(double.NegativeInfinity, double.PositiveInfinity, func1);

            Assert.AreEqual(0, res1, abs);

            Func <double, double> func2 = (x) => 1 / (x * x + 2 * x + 8);
            var res2 = IntegralCalculator.Integrate(double.NegativeInfinity, double.PositiveInfinity, func2);

            Assert.AreEqual(Math.PI / Math.Sqrt(7), res2, abs);
        }
        public void FromNegativeInfinityIntegralTest()
        {
            var abs = Math.Pow(10, -8);

            Func <double, double> func1 = (x) => 2.0 / (Math.Pow(x, 2) + 9);
            var res1 = IntegralCalculator.Integrate(double.NegativeInfinity, -3.0, func1);

            Assert.AreEqual(Math.PI / 6, res1, abs);

            Func <double, double> func2 = (x) => x *Math.Pow(Math.E, (-1) *x *x);

            var res2 = IntegralCalculator.Integrate(double.NegativeInfinity, 0, func2);

            Assert.AreEqual(-0.5, res2, abs);
        }
Ejemplo n.º 7
0
        private void CalcIntegralBtn_Click(object sender, RoutedEventArgs e)
        {
            double start = double.Parse(this.IntegralStart.Text);
            double end   = double.Parse(this.IntegralEnd.Text);

            if (this.Controller.CurrentSelectedFunction != null)
            {
                if (this.Controller.CurrentSelectedFunction.IsSolutionFunction)
                {
                    return;
                }
                double answer = IntegralCalculator.CalculateIntegralOf(this.Controller.CurrentSelectedFunction, start, end);
                this.CalculatedIntegral.Content = answer;
                //Console.WriteLine(answer);
            }
        }
Ejemplo n.º 8
0
        public ActionResult UserIntegral(string u)
        {
            if (WebSecurity.UserExists(u))
            {
                var userId = WebSecurity.GetUserId(u).ToString();

                var calc = new IntegralCalculator(userId);

                return(View(new AdminCommonModel()
                {
                    PageTitle = "用户积分",
                    SubTitle = "管理 & 更新",
                    UserName = u,
                    SearchKeyWord = string.Format("<b>{0}</b> 可用积分 {1},历史总积分 {2},当前冻结积分 {3}", u, calc.Integral, calc.TotalIntegral, calc.FrozenIntegral)
                }));
            }
            return(Content(string.Format("不存在用户\"{0}\"", u)));
        }
Ejemplo n.º 9
0
        public List <Point> GetCDFDataForPlot(double?xMin = null, double?xMax = null, int numberOfPoints = 1000)
        {
            var resultPoints = new List <Point>();

            if (!xMin.HasValue)
            {
                xMin = PiecewisePDF.Segments.First().FindLeftPoint();
            }

            if (!xMax.HasValue)
            {
                xMax = PiecewisePDF.Segments.Last().FindRightPoint();
            }

            //var segments = PiecewisePDF.Segments.OrderBy(s => s.A);
            var integralValue = default(double);
            var leftValue     = double.NegativeInfinity;

            foreach (var segment in PiecewisePDF.Segments)
            {
                var args = segment.GetPoints(xMin, xMax, numberOfPoints);

                var points = new List <Point>();
                foreach (var arg in args)
                {
                    integralValue += IntegralCalculator.Integrate(leftValue, arg, (x) => segment[x]);
                    points.Add(new Point(arg, integralValue));

                    leftValue = arg;
                }

                resultPoints.AddRange(points);
            }

            return(resultPoints);
        }