| | |
| | | using System.Text; |
| | | |
| | | namespace PBS.WinFrmUI.Hydro |
| | | { |
| | | |
| | | { |
| | | public enum 二供分区Type |
| | | { |
| | | 加压供水, |
| | |
| | | p.Datasets[pair.Key].range_Y = Range.Union(rangeDefault, pair.Value.range_Y); |
| | | } |
| | | p.CurveFit(); |
| | | return p; |
| | | //factory.Pumps.Add(p); |
| | | //_EditFlag = true; |
| | | //DisplayFactoryListInTreeView(factoryList); |
| | | return p; |
| | | } |
| | | |
| | | [Browsable(false)] |
| | | //[Editor(typeof(TemplatePropertyEditor), typeof(UITypeEditor))] |
| | | [Browsable(false)] |
| | | public string templateID |
| | | { |
| | | get |
| | |
| | | |
| | | public Template template { get; private set; } = null; |
| | | |
| | | |
| | | [Browsable(false)] |
| | | public BuildDataset 流量压降曲线 |
| | | |
| | | { |
| | | get |
| | | { |
| | | if (!Datasets.ContainsKey("流量压降曲线")) Datasets.Add("流量压降曲线", new BuildDataset("流量压降曲线")); |
| | | return Datasets["流量压降曲线"]; |
| | | } |
| | | } |
| | | |
| | | [Browsable(false)] |
| | | |
| | | public BuildDataset 流量压降平均 |
| | | { |
| | | get |
| | | { |
| | | if (!Datasets.ContainsKey("流量压降平均")) Datasets.Add("流量压降平均", new BuildDataset("流量压降平均")); |
| | | return Datasets["流量压降平均"]; |
| | | } |
| | | } |
| | | [Browsable(false)] |
| | | |
| | | public BuildDataset 流量压降上限 |
| | | { |
| | | get |
| | | { |
| | | if (!Datasets.ContainsKey("流量压降上限")) Datasets.Add("流量压降上限", new BuildDataset("流量压降上限")); |
| | | return Datasets["流量压降上限"]; |
| | | } |
| | | } |
| | | [Browsable(false)] |
| | | |
| | | |
| | | public BuildDataset 流量压降下限 |
| | | { |
| | | get |
| | | { |
| | | if (!Datasets.ContainsKey("流量压降下限")) Datasets.Add("流量压降下限", new BuildDataset("流量压降下限")); |
| | | return Datasets["流量压降下限"]; |
| | | } |
| | | } |
| | | |
| | | [Browsable(false)] |
| | | public BuildDataset 用水趋势曲线 |
| | | { |
| | | get |
| | | { |
| | | if (!Datasets.ContainsKey("用水趋势曲线")) Datasets.Add("用水趋势曲线", new BuildDataset("用水趋势曲线")); |
| | | return Datasets["用水趋势曲线"]; |
| | | } |
| | | } |
| | | |
| | | [Browsable(false)] |
| | | public BuildDataset 用水趋势下限 |
| | | { |
| | | get |
| | | { |
| | | if (!Datasets.ContainsKey("用水趋势下限")) Datasets.Add("用水趋势下限", new BuildDataset("用水趋势下限")); |
| | | return Datasets["用水趋势下限"]; |
| | | } |
| | | } |
| | | |
| | | [Browsable(false)] |
| | | public BuildDataset 用水趋势上限 |
| | | { |
| | | get |
| | | { |
| | | if (!Datasets.ContainsKey("用水趋势上限")) Datasets.Add("用水趋势上限", new BuildDataset("用水趋势上限")); |
| | | return Datasets["用水趋势上限"]; |
| | | } |
| | | } |
| | | |
| | | public DataTable UDList { get; set; } |
| | | |
| | | public List<string> UDNames { get; set; } |
| | | |
| | | public List<double> UDPatterns { get; set; } |
| | | |
| | | |
| | | public void CurveFit(bool is拟合 = true) |
| | | { |
| | | |
| | | foreach (var data in Datasets) |
| | | { |
| | | //data.Value.Data.Sort((a, b) => a.X > b.X ? 1 : (a.X == b.X ? 0 : -1)); |
| | | { |
| | | if (data.Value.HasData) data.Value.CurveFit(); |
| | | } |
| | | |
| | | |
| | | //string basetype = "流量压降曲线"; |
| | | |
| | | //string type = ""; |
| | | |
| | | //if (Datasets[basetype].HasData) |
| | | //{ |
| | | // var range = Datasets[basetype].range_X; |
| | | // double step = range.Len / 20; |
| | | // double i0 = 0; |
| | | // List<PointF> list1 = new List<PointF>(); |
| | | // List<PointF> list2 = new List<PointF>(); |
| | | // List<PointF> list3 = new List<PointF>(); |
| | | // for (double i = range.Min; i < range.Max; i+=step) |
| | | // { |
| | | // var valueDatas = Datasets[basetype].Data.FindAll(m => i0 <= m.X && m.X < i).Select(m=>(double)m.Y). ToList(); |
| | | // if (valueDatas.Count < 3) continue; |
| | | // Math_Expect math_Expect = new Math_Expect(valueDatas); |
| | | // var y0= math_Expect.Average(); |
| | | // var x = (i0 + i) / 2; |
| | | // var doubles = math_Expect.GetPercent(0.95);//math_Expect.GetExpect(0.05); |
| | | // var y1 = doubles[0]; |
| | | // var y2 = doubles[1]; |
| | | // list1.Add(new PointF((float)x, (float)y0)); |
| | | // list2.Add(new PointF((float)x, (float)y1)); |
| | | // list3.Add(new PointF((float)x, (float)y2)); |
| | | |
| | | // //Datasets[Global_model.list[1]].FittedCurve.Add(new PointF((float)x, (float)y1)); |
| | | // //Datasets[Global_model.list[2]].FittedCurve.Add(new PointF((float)x, (float)y2)); |
| | | // //Datasets[Global_model.list[0]].IsFitted = true; |
| | | // //Datasets[Global_model.list[1]].IsFitted = true; |
| | | // //Datasets[Global_model.list[2]].IsFitted = true; |
| | | |
| | | |
| | | // //Datasets[Global_model.list[1]].IsFitted = true; |
| | | // //Datasets[Global_model.list[2]].IsFitted = true; |
| | | // i0 = i; |
| | | |
| | | // } |
| | | // if (!is拟合) |
| | | // { |
| | | |
| | | // 流量压降平均.FittedCurve = list1; |
| | | // 流量压降平均.IsFitted = true; |
| | | |
| | | |
| | | // Datasets[Global_model.list[1]].FittedCurve = list2; |
| | | // Datasets[Global_model.list[1]].IsFitted = true; |
| | | |
| | | |
| | | // Datasets[Global_model.list[2]].FittedCurve = list3; |
| | | // Datasets[Global_model.list[2]].IsFitted = true; |
| | | // } |
| | | // else |
| | | // { |
| | | // var rangeX = Datasets[Global_model.list[0]].range_X; |
| | | // 流量压降平均.Data = list1; |
| | | // 流量压降平均.CurveFit(rangeX); |
| | | |
| | | |
| | | |
| | | // Datasets[Global_model.list[1]].Data = list2; |
| | | // Datasets[Global_model.list[1]].CurveFit(rangeX); |
| | | |
| | | |
| | | // Datasets[Global_model.list[2]].Data = list3; |
| | | // Datasets[Global_model.list[2]].CurveFit(rangeX); |
| | | // } |
| | | |
| | | //} |
| | | |
| | | |
| | | |
| | | //type = "流量压降下限"; |
| | | //var type1 = "流量压降上限"; |
| | | //if (Datasets[type].IsFitted) |
| | | //{ |
| | | // List<PointF> points = new List<PointF>(); |
| | | // List<PointF> points1 = new List<PointF>(); |
| | | |
| | | // foreach (var yc in Datasets[basetype].Data) |
| | | // { |
| | | // float x= yc.X; |
| | | // float y_扬程 = yc.Y; |
| | | // float y_效率= (float)Datasets[type].Evaluate(x); |
| | | // points.Add(new PointF(x, y_效率)); |
| | | // points1.Add(new PointF(x,x* y_扬程 / y_效率 /3.6f )); |
| | | |
| | | |
| | | // } |
| | | // Datasets[type].Data = points; |
| | | // Datasets[type1].Data = points1; |
| | | // Datasets[type1].CurveFit(); |
| | | //} |
| | | |
| | | //type = "流量压降上限"; |
| | | //if (Datasets[type].IsFitted) |
| | | //{ |
| | | // List<PointF> points = new List<PointF>(); |
| | | // foreach (var x in Datasets[basetype].Data.Select(p => p.X)) |
| | | // { |
| | | // points.Add(new PointF(x, (float)Datasets[type].Evaluate(x))); |
| | | // } |
| | | // Datasets[type].Data = points; |
| | | |
| | | //} |
| | | } |
| | | |
| | | public void ShowInGrid(DataGridView dataGridView) |
| | | { |
| | | //dataGridView.Rows.Clear(); |
| | | DataTable dt = new DataTable(); |
| | | dt.Columns.Add("流量"); |
| | | dt.Columns.Add("压降"); |
| | | dt.Columns.Add("上限"); |
| | | dt.Columns.Add("下限"); |
| | | |
| | | for (int i = 0; i < 流量压降曲线.Data.Count; i++) |
| | | { |
| | | PointF p = 流量压降曲线.Data[i]; |
| | | double y1 = 0, y2 = 0; |
| | | //if (流量压降上限.IsFitted) y1 = 流量压降上限.Data[i].Y; |
| | | //if (流量压降下限.IsFitted) y2 = 流量压降下限.Data[i].Y; |
| | | dt.Rows.Add(Math.Round(p.X, 1), Math.Round(p.Y, 2), Math.Round(y1, 2), Math.Round(y2, 2)); |
| | | //dataGridView.Rows.Add(Math.Round(p.X,1), Math.Round(p.Y,2), Math.Round(y1,2), Math.Round(y2, 2)); |
| | | } |
| | | dataGridView.DataSource = null; |
| | | dataGridView.DataSource = dt; |
| | | dataGridView.Refresh(); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | | public class Munity : Build |