daily pastebin goal
39%
SHARE
TWEET

Untitled

a guest Jun 18th, 2017 61 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top