using IStation.Model;
|
using MathNet.Numerics;
|
using MathNet.Numerics.Interpolation;
|
using MathNet.Numerics.LinearRegression;
|
using MathNet.Numerics.Statistics;
|
using System.Data;
|
using System.Text;
|
namespace IStation.Test
|
{
|
internal class Program
|
{
|
string _dataName = ".csv";
|
|
string _oldCurveurveName = "_old_curve.csv";
|
string _newCurveName = "_update_curve.csv";
|
static void Main(string[] args)
|
{
|
var fullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pumpcsv");
|
var list = GetFileInfoList(fullPath);
|
foreach (var item in list)
|
{
|
|
}
|
|
|
var splineList = new List<CurvePoint>();
|
var measuredList = new List<CurvePoint>();
|
|
var fileName = "21_38";
|
var path = AppDomain.CurrentDomain.BaseDirectory;
|
var lienPaht = path + $@"\pumpcsv\{fileName}_old_curve.csv";
|
var measuredPath = path + $@"\pumpcsv\{fileName}.csv";
|
|
using (var fs = new FileStream(lienPaht, FileMode.Open, FileAccess.Read))
|
using (var sr = new StreamReader(fs, Encoding.UTF8))
|
{
|
var strLine = string.Empty;
|
sr.ReadLine();
|
while (!string.IsNullOrEmpty(strLine = sr.ReadLine()))
|
{
|
var strList = strLine.Split(',');
|
var x = double.Parse(strList[0]);
|
var y = double.Parse(strList[1]);
|
splineList.Add(new CurvePoint(x, y));
|
}
|
}
|
|
using (var fs = new FileStream(measuredPath, FileMode.Open, FileAccess.Read))
|
using (var sr = new StreamReader(fs, Encoding.UTF8))
|
{
|
var strLine = string.Empty;
|
sr.ReadLine();
|
while (!string.IsNullOrEmpty(strLine = sr.ReadLine()))
|
{
|
var strList = strLine.Split(',');
|
var x = double.Parse(strList[4]);
|
var y = double.Parse(strList[5]);
|
measuredList.Add(new CurvePoint(x, y));
|
}
|
}
|
|
measuredList = measuredList.OrderBy(x => x.X).ToList();
|
|
// 样条曲线处理
|
double[] splineX = splineList.Select(x => x.X).ToArray();
|
double[] splineY = splineList.Select(x => x.Y).ToArray();
|
|
// 实测数据处理
|
double[] measuredXAll = measuredList.Select(x => x.X).ToArray();
|
double[] measuredYAll = measuredList.Select(x => x.Y).ToArray();
|
|
|
|
var helper = new PumpCurveDataFusionCorrectorHelper2(); //PumpCurveDataFusionCorrectorHelper2DeepSeek
|
(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()}");
|
Console.WriteLine($"{optimizedX.Min()},{optimizedX.Max()}");
|
|
Console.WriteLine($"{splineY.Min()},{splineY.Max()}");
|
Console.WriteLine($"{mergedY.Min()},{mergedY.Max()}");
|
Console.WriteLine($"{optimizedY.Min()},{optimizedY.Max()}");
|
|
var pt_list = new List<CurvePoint>();
|
for (int i = 0; i < optimizedX.Length; i++)
|
{
|
var x = optimizedX[i];
|
var y = optimizedY[i];
|
pt_list.Add(new CurvePoint(x, y));
|
}
|
var fullPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "pumpcsv");
|
if (File.Exists(Path.Combine(fullPath, $"{fileName}_update_curve.csv")))
|
{
|
File.Delete(Path.Combine(fullPath, $"{fileName}_update_curve.csv"));
|
}
|
CsvHelper.ExportToCsv(pt_list, Path.Combine(fullPath, $"{fileName}_update_curve.csv"));
|
|
Console.WriteLine("ok");
|
Console.ReadKey();
|
}
|
|
|
|
|
|
|
|
static List<(string dataFile, string oldCurveFile)> GetFileInfoList(string folder)
|
{
|
if (!Directory.Exists(folder))
|
return default;
|
var files = Directory.GetFiles(folder);
|
if (files == null || files.Count() < 1)
|
return default;
|
|
var list = new List<(string dataFile, string oldCurveFile)>(files.Count());
|
var group = files.GroupBy(x => x.Substring(0, 5));
|
foreach (var item in group)
|
{
|
var name = item.Key;
|
var dataFile = $"{name}{_dataName}";
|
var oldCurveFile = $"{name}{_oldCurveurveName}";
|
list.Add((dataFile, oldCurveFile));
|
}
|
|
return list;
|
}
|
|
}
|
}
|