コード例 #1
0
ファイル: WeatherUpdate.cs プロジェクト: ckaczor/HomeMonitor
        private void CalculatePressureTrend()
        {
            var pressureData = _database
                               .GetReadingValueHistory(WeatherValueType.Pressure, Timestamp.AddHours(-3), Timestamp).Result.ToList();

            var xData = pressureData.Select(p => (double)p.Timestamp.ToUnixTimeSeconds()).ToArray();
            var yData = pressureData.Select(p => (double)p.Value / 100.0).ToArray();

            var lineFunction = Fit.LineFunc(xData, yData);

            PressureDifferenceThreeHour = (decimal)(lineFunction(xData.Last()) - lineFunction(xData[0]));
        }
コード例 #2
0
ファイル: FitTests.cs プロジェクト: DragonLi/mathnet-numerics
        public void FitsToExactLineWhenPointsAreOnLine()
        {
            var x = new[] { 30.0, 40.0, 50.0, 12.0, -3.4, 100.5 };
            var y = x.Select(z => 4.0 - 1.5 * z).ToArray();

            var resp = Fit.Line(x, y);

            Assert.AreEqual(4.0, resp.Item1, 1e-12);
            Assert.AreEqual(-1.5, resp.Item2, 1e-12);

            var resf = Fit.LineFunc(x, y);

            foreach (var z in Enumerable.Range(-3, 10))
            {
                Assert.AreEqual(4.0 - 1.5 * z, resf(z), 1e-12);
            }
        }
コード例 #3
0
ファイル: FitTests.cs プロジェクト: DragonLi/mathnet-numerics
        public void FitsToBestLine()
        {
            // Mathematica: Fit[{{1,4.986},{2,2.347},{3,2.061},{4,-2.995},{5,-2.352},{6,-5.782}}, {1, x}, x]
            // -> 7.01013 - 2.08551*x

            var x = Enumerable.Range(1, 6).Select(Convert.ToDouble).ToArray();
            var y = new[] { 4.986, 2.347, 2.061, -2.995, -2.352, -5.782 };

            var resp = Fit.Line(x, y);

            Assert.AreEqual(7.01013, resp.Item1, 1e-4);
            Assert.AreEqual(-2.08551, resp.Item2, 1e-4);

            var resf = Fit.LineFunc(x, y);

            foreach (var z in Enumerable.Range(-3, 10))
            {
                Assert.AreEqual(7.01013 - 2.08551 * z, resf(z), 1e-4);
            }
        }
コード例 #4
0
        public void FitsToLineSameAsExcelTrendLine()
        {
            // X	Y
            // 1   0.2
            // 2   0.3
            // 4   1.3
            // 6   4.2
            // -> y = -1.078 + 0.7932*x

            var x = new[] { 1.0, 2.0, 4.0, 6.0 };
            var y = new[] { 0.2, 0.3, 1.3, 4.2 };

            var resp = Fit.Line(x, y);

            Assert.AreEqual(-1.078, resp.Item1, 1e-3);
            Assert.AreEqual(0.7932, resp.Item2, 1e-3);

            var resf = Fit.LineFunc(x, y);

            foreach (var z in Enumerable.Range(-3, 10))
            {
                Assert.AreEqual(-1.078 + 0.7932 * z, resf(z), 1e-2);
            }
        }
コード例 #5
0
 public virtual Func <double, double> LinearFittingFunc(double[] x, double[] y)
 {
     return(Fit.LineFunc(x, y));
 }