예제 #1
0
        /// <summary>
        /// 添加数据点
        /// </summary>
        /// <param name="dateTime"></param>
        /// <param name="value"></param>
        public void AddPoint(DateTime dateTime, double value)
        {
            if (++Count > _maximumCount)
            {
                Count = _maximumCount;

                Labels.RemoveAt(0);
                UpperValues.RemoveAt(0);
                LowerValues.RemoveAt(0);
                DataValues.RemoveAt(0);
                CPKValues.RemoveAt(0);
            }

            Labels.Add(dateTime.ToString(GlobalConstants.TimeFormat));
            tbOdValue.Text = value.ToString(GlobalConstants.DoubleFormat);
            UpperValues.Add(_upper);
            LowerValues.Add(_lower);
            DataValues.Add(double.Parse(value.ToString(GlobalConstants.DoubleFormat)));

            if (Values.Count >= CPKCount)
            {
                Values.RemoveAt(0);
            }
            Values.Add(value);
            CPK             = CalculateCPK();
            tbCpkValue.Text = _cpk.ToString(GlobalConstants.DoubleFormat);
            CPKValues.Add(Math.Round(_cpk, 3));
        }
예제 #2
0
        private void CalculateRegression()
        {
            var x = Vector.Create(ChartValues.Select(v => v.NDouble).ToArray());
            var y = Vector.Create(ChartValues.Select(v => v.TotDouble).ToArray());

            _regression = new SimpleRegressionModel(y, x);
            _regression.Fit();

            UpperValues.Clear();
            LowerValues.Clear();
            RegressionValues.Clear();
            NToNValues.Clear();
            XAxis.Clear();
            YAxis.Clear();

            var max = ChartValues.Max(p => p.NDouble);

            XAxis.Add(new ObservablePoint(0, 0));
            XAxis.Add(new ObservablePoint(0, max));
            YAxis.Add(new ObservablePoint(0, 0));
            YAxis.Add(new ObservablePoint(max, 0));



            NToNValues.Add(new ObservablePoint(0, 0));
            NToNValues.Add(new ObservablePoint(max, max));

            var ci = _regression.GetPredictionInterval(0, .99);

            UpperValues.Add(new ObservablePoint(0, ci.UpperBound));
            LowerValues.Add(new ObservablePoint(0, ci.LowerBound));
            RegressionValues.Add(new ObservablePoint(0, ci.Center));

            ci = _regression.GetPredictionInterval(max, .99);
            UpperValues.Add(new ObservablePoint(max, ci.UpperBound));
            LowerValues.Add(new ObservablePoint(max, ci.LowerBound));
            RegressionValues.Add(new ObservablePoint(max, ci.Center));

            var above = 0.0;
            var below = 0.0;

            foreach (var point in ChartValues)
            {
                var interval = _regression.GetPredictionInterval(point.NDouble, .99);
                if (point.TotDouble <= interval.UpperBound && point.TotDouble > interval.Center)
                {
                    above++;
                }
                else if (point.TotDouble <= interval.Center && point.TotDouble >= interval.LowerBound)
                {
                    below++;
                }
            }
            Console.WriteLine("Above Center: " + above / ChartValues.Count);
            Console.WriteLine("Below Center: " + below / ChartValues.Count);
        }