コード例 #1
0
        public void CurveFit(int length)
        {
            if (length < 2)
            {
                throw new Exception("Occured curvefit's data length low error in Calibrator.CurveFit");
            }

            double[] rawX = new double[length];
            double[] rawY = new double[length];

            for (int i = 0; i < length; i++)
            {
                rawX[i] = Points[i].PV;
                rawY[i] = Points[i].SV;
            }

            DiffA = 0;
            DiffB = 0;
            DiffC = 0;

            try
            {
                switch (length)
                {
                case 2:
                    RawA = rawY[0] - rawX[0];
                    RawB = (rawY[1] - rawY[0]) / (rawX[1] - rawX[0]);
                    RawC = 0;
                    break;

                default:
                    if ((IsDoubleArrayAllZero(rawX) == false) &&
                        (IsDoubleArrayAllZero(rawY) == false))
                    {
                        double[] raw = Fitting.LsFit(rawX, rawY, 2);
                        RawA = raw[0];
                        RawB = raw[1];
                        RawC = raw[2];
                    }
                    else
                    {
                        RawA = 0;
                        RawB = 1;
                        RawC = 0;
                    }
                    break;
                }

                Active = true;
            }
            catch (Exception e)
            {
                Clear();
                Resource.TLog.Log((int)ELogItem.Exception, e.ToString());
                throw new Exception("Occured calculation error in Calibrator.CurveFit");
            }
        }