ningshuxia
2025-04-16 a67da735b33be01b24845ce03ae7551cf55ddbbc
02-desktop/Desktop/IStation.Test/Program -DataFusionCorrector.cs
@@ -30,12 +30,14 @@
        // 修正组合偏差
        static void Main(string[] args)
        {
            var splineList = new List<CurvePoint>();
            var measuredList = new List<CurvePoint>();
            var name = "22_30";
            var path = AppDomain.CurrentDomain.BaseDirectory;
            var lienPaht = path + @"\pumpcsv\23_44_old_curve.csv";
            var measuredPath = path + @"\pumpcsv\23_44.csv";
            var lienPaht = path + @$"\pumpcsv\{name}_old_curve.csv";
            var measuredPath = path + @$"\pumpcsv\{name}.csv";
            using (var fs = new FileStream(lienPaht, FileMode.Open, FileAccess.Read))
            using (var sr = new StreamReader(fs, Encoding.UTF8))
@@ -76,8 +78,10 @@
  
            var helper = new PumpCurveDataFusionCorrectorHelper();
            (double[] mergedX, double[] mergedY, double[] optimizedX, double[] optimizedY) = helper.Corrent(splineX, splineY, measuredXAll, measuredYAll);
             //var helper = new PumpCurveDataFusionCorrectorHelper();
            var helper = new PumpCurveDataFusionCorrectorHelper2();
            (double[] mergedX, double[] mergedY, double[] optimizedX, double[] optimizedY) =
                helper.Corrent(splineX, splineY, measuredXAll, measuredYAll);
          
            Console.WriteLine($"{splineX.Min()},{splineX.Max()}");
            Console.WriteLine($"{mergedX.Min()},{mergedX.Max()}");
@@ -95,52 +99,15 @@
                pt_list.Add(new CurvePoint(x,y));
            }
            var fullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pumpcsv");
            CsvHelper.ExportToCsv(pt_list, Path.Combine(fullPath, $"23_44_update_curve.csv"));
            CsvHelper.ExportToCsv(pt_list, Path.Combine(fullPath, @$"{name}_update_curve.csv"));
              
            Console.WriteLine("ok");
            Console.ReadKey();
        }
    }
    // 配置类(假设)
    public static class Config
    {
        public const double Z_SCORE_THRESHOLD = 2.5;
        public const double TRANSITION_WIDTH = 500.0;
    }
    // Z-Score 计算辅助类
    public class ZScore
    {
        private readonly double[] _data;
        private readonly double _mean;
        private readonly double _stdDev;
        public ZScore(double[] data)
        {
            _data = data;
            _mean = data.Mean();
            _stdDev = data.StandardDeviation();
        }
        public double[] Scores
        {
            get
            {
                double[] scores = new double[_data.Length];
                for (int i = 0; i < _data.Length; i++)
                {
                    scores[i] = (_data[i] - _mean) / _stdDev;
                }
                return scores;
            }
        }
    }
    }