Advertisement
Guest User

Untitled

a guest
Jun 18th, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.76 KB | None | 0 0
  1. using Npgsql;
  2. using NpgsqlTypes;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.ComponentModel;
  6. using System.Data;
  7. using System.Drawing;
  8. using System.Globalization;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading;
  12. using System.Threading.Tasks;
  13. using System.Windows.Forms;
  14. using System.Windows.Forms.DataVisualization.Charting;
  15.  
  16. namespace DaraAnalisator
  17. {
  18. public partial class RegressionAnalysis : Form
  19. {
  20. private double a;
  21. private double b;
  22. private string element;
  23. private string sensorName;
  24. public RegressionAnalysis()
  25. {
  26. InitializeComponent();
  27. InitChart(chart);
  28. }
  29.  
  30. private void buttonStart_Click(object sender, EventArgs e)
  31. {
  32. if ( comboBoxSensor.SelectedItem == null)
  33. {
  34. MessageBox.Show("Выберите сенсор!");
  35. return;
  36. }
  37. richBoxResult.Text = "";
  38. if ( radioButtonLine.Checked )
  39. {
  40. LinearRegr();
  41. }
  42. else if ( radioButtonPoly.Checked )
  43. {
  44. PolynomialRegr();
  45. }
  46. }
  47.  
  48. private void LinearRegr()
  49. {
  50. Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
  51. Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");
  52. const string connectionString =
  53. "Host=localhost;Database=turboshaft;Username=ts_engineer;Password=engineer_pass";
  54. using (var connection = new NpgsqlConnection(connectionString))
  55. {
  56. Sensor sensor = new Sensor(connection, element, sensorName + (comboBoxSensor.SelectedIndex + 1));
  57.  
  58. NpgsqlDateTime now = NpgsqlDateTime.Now;
  59.  
  60. IRegression linearRegression = new LinearRegression(sensor);
  61. double[] linParameters = linearRegression.CalculateParameters();
  62. double p = 0.8;
  63. Tuple<double, double> linInterval = linearRegression.ConfidenceInterval(p);
  64. String query = "select "+ sensorName + (comboBoxSensor.SelectedIndex + 1) + " from " + element + ";";
  65. var array = DataModule.Instance.ExecuteDoubleSelect(query);
  66. var intervals = linearRegression.ConfidenceInterval(p);
  67.  
  68. a = linParameters[1];
  69. b = linParameters[0];
  70. BuildChart(chart, array, intervals);
  71. richBoxResult.AppendText(NpgsqlDateTime.Now.ToString() + "\n\n");
  72. richBoxResult.AppendText("y = " + linParameters[1] + " * x + " + linParameters[0] + "\n\n");
  73. richBoxResult.AppendText("R^2 = " + linearRegression.GetRSquared() + "\n\n");
  74. richBoxResult.AppendText(linearRegression.Predict(now).ToString() + "\n\n");
  75. richBoxResult.AppendText(p + ": " + linInterval.Item1 + " - " + linInterval.Item2 + Environment.NewLine + "\n\n");
  76. }
  77. }
  78.  
  79. private void PolynomialRegr()
  80. {
  81. Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("en-US");
  82. Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("en-US");
  83. const string connectionString =
  84. "Host=localhost;Database=turboshaft;Username=ts_engineer;Password=engineer_pass";
  85. using (var connection = new NpgsqlConnection(connectionString))
  86. {
  87. Sensor sensor = new Sensor(connection, element, sensorName + (comboBoxSensor.SelectedIndex + 1));
  88.  
  89. NpgsqlDateTime now = NpgsqlDateTime.Now;
  90.  
  91. IRegression linearRegression = new PolynomialRegression(sensor,
  92. Convert.ToInt32(numericUpDownOrder.Value));
  93. double[] linParameters = linearRegression.CalculateParameters();
  94. double p = 0.8;
  95. Tuple<double, double> linInterval = linearRegression.ConfidenceInterval(p);
  96. String query = "select " + sensorName + (comboBoxSensor.SelectedIndex + 1) + " from " + element + ";";
  97. var array = DataModule.Instance.ExecuteDoubleSelect(query);
  98. var intervals = linearRegression.ConfidenceInterval(p);
  99.  
  100. a = linParameters[1];
  101. b = linParameters[0];
  102. BuildChart(chart, array, intervals);
  103. richBoxResult.AppendText(NpgsqlDateTime.Now.ToString() + "\n\n");
  104. richBoxResult.AppendText("y = " + linParameters[1] + " * x + " + linParameters[0] + "\n\n");
  105. richBoxResult.AppendText("R^2 = " + linearRegression.GetRSquared() + "\n\n");
  106. richBoxResult.AppendText(linearRegression.Predict(now).ToString() + "\n\n");
  107. richBoxResult.AppendText(p + ": " + linInterval.Item1 + " - " + linInterval.Item2 + Environment.NewLine + "\n\n");
  108. }
  109. }
  110.  
  111. private void BuildChart( Chart chart, List<double> samples, Tuple<double, double> interval)
  112. {
  113. chart.Series[0].Points.Clear();
  114. chart.Series[1].Points.Clear();
  115. chart.Series[2].Points.Clear();
  116.  
  117. for (int x = 0; x < samples.Count; x++)
  118. {
  119. chart.Series[0].Points.AddXY(x, samples[x]);
  120. }
  121. for (int x = 0; x < samples.Count; x++)
  122. {
  123. chart.Series[1].Points.AddXY(x, interval.Item1);
  124. }
  125. for (int x = 0; x < samples.Count; x++)
  126. {
  127. chart.Series[1].Points.AddXY(x, interval.Item2);
  128. }
  129. for (int x = 0; x < samples.Count; x++)
  130. {
  131. double y = (a * x + b);
  132. chart.Series[2].Points.AddXY(x, y);
  133. }
  134. }
  135.  
  136. private void InitChart(Chart chart)
  137. {
  138. chart.Series[0].ChartType = SeriesChartType.Spline;
  139. chart.Series[1].ChartType = SeriesChartType.Spline;
  140. chart.Series[2].ChartType = SeriesChartType.Spline;
  141. chart.Series[0].LegendText = "График";
  142. chart.Series[1].LegendText = "Доверительные интервалы";
  143. chart.Series[2].LegendText = "Аппроксимация";
  144.  
  145. var area = chart.ChartAreas[chart.Series[0].ChartArea];
  146. area.AxisX.Minimum = 0;
  147. area.CursorX.AutoScroll = true;
  148.  
  149. area.AxisX.ScaleView.Zoomable = true;
  150. area.AxisX.ScaleView.SizeType = DateTimeIntervalType.Number;
  151. int position = 0;
  152. int block_size = 200;
  153. int size = block_size;
  154. area.AxisX.ScaleView.Zoom(position, size);
  155. area.AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.SmallScroll;
  156. area.AxisX.ScaleView.SmallScrollSize = block_size;
  157.  
  158. var area1 = chart.ChartAreas[chart.Series[1].ChartArea];
  159. area1.AxisX.Minimum = 0;
  160. area1.CursorX.AutoScroll = true;
  161.  
  162. area1.AxisX.ScaleView.Zoomable = true;
  163. area1.AxisX.ScaleView.SizeType = DateTimeIntervalType.Number;
  164. area1.AxisX.ScaleView.Zoom(position, size);
  165. area1.AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.SmallScroll;
  166. area1.AxisX.ScaleView.SmallScrollSize = block_size;
  167.  
  168. var area2 = chart.ChartAreas[chart.Series[0].ChartArea];
  169. area2.AxisX.Minimum = 0;
  170. area2.CursorX.AutoScroll = true;
  171.  
  172. area2.AxisX.ScaleView.Zoomable = true;
  173. area2.AxisX.ScaleView.SizeType = DateTimeIntervalType.Number;
  174. area2.AxisX.ScaleView.Zoom(position, size);
  175. area2.AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.SmallScroll;
  176. area2.AxisX.ScaleView.SmallScrollSize = block_size;
  177. }
  178.  
  179. private void radioButtonsElement_CheckedChanged(object sender, EventArgs e)
  180. {
  181. int to = 0;
  182. comboBoxSensor.Items.Clear();
  183. if (radioButtonCompressor.Checked)
  184. {
  185. to = 6;
  186. sensorName = "pressure_sensor_";
  187. element = "compressor";
  188. }
  189. else if (radioButtonСombustion.Checked)
  190. {
  191. to = 12;
  192. sensorName = "temperature_sensor_";
  193. element = "combustion_chamber";
  194. }
  195. else if (radioButtonTurbine.Checked)
  196. {
  197. to = 6;
  198. sensorName = "speed_sensor_";
  199. element = "turbine";
  200. }
  201. for (var i = 1; i <= to; i++)
  202. {
  203. comboBoxSensor.Items.Add("Sensor " + i);
  204. }
  205. comboBoxSensor.SelectedIndex = 0;
  206. }
  207. }
  208. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement