123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows.Forms;
- namespace OTSExtremum
- {
- public partial class GroupsGridForm : Form
- {
- List<Business.groupInfo> data;
- List<Business.groupInfo> maxData=new List<Business.groupInfo>();
- public GroupsGridForm(List<Business.groupInfo> list)
- {
- data = list;
- InitializeComponent();
- }
- private void GroupsGridForm_Load(object sender, EventArgs e)
- {
- Calculation();
- }
- private void Calculation()
- {
- //List<List<double[]>> alldata = new List<List<double[]>>();
- //先设置一下头的高度,否则会太矮不好看
- dtgrid.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.EnableResizing;
- dtgrid.ColumnHeadersHeight = 40;
- dtgrid.ColumnHeadersDefaultCellStyle.Font = new Font("微软雅黑", 12, FontStyle.Regular);
- dtgrid.ColumnHeadersDefaultCellStyle.BackColor = Color.WhiteSmoke;
-
- foreach (Business.groupInfo item in data)
- {
- List<double[]> allData = new List<double[]>();
- double[] vs = item.values;
- Array.Sort(vs);
- int N = vs.Length;
- double mean = Business.Tools.Mean(vs);
- double sdev = Business.Tools.StDev(vs);
- double delta = sdev * Math.Sqrt(6) / 3.1416;//δ
- double lambda = mean - 0.5772 * delta;//λ
- double sumLL = 0;
- double[] ret = Business.Tools.OPTMax(vs);
- double[] C = new double[N];
- double[] D = new double[N];
- double[] E = new double[N];
- double[] F = new double[N];
- double[] G = new double[N];
- double[] H = new double[N];
- double[] I = new double[N];
- for (int i = 0; i < N; i++)
- {
- double temp = i + 1;
- double t = 1;
- C[i] = temp / (N + 1);
- D[i] = -1 * Math.Log(-1 * Math.Log(C[i]));
- F[i] = Math.Log(t / delta) - (vs[i] - lambda) / delta - Math.Exp((lambda - vs[i]) / delta);
- E[i] = Math.Log(t / ret[0]) - (vs[i] - ret[1]) / ret[0] - Math.Exp((ret[1] - vs[i]) / ret[0]);
- G[i] = ret[0] * D[i] + ret[1];
- double se = ret[0] * (Math.Sqrt((1.109 + 0.514 * D[i] + 0.608 * D[i] * D[i]) / N));
- H[i] = G[i] - 2 * se;
- I[i] = G[i] + 2 * se;
- sumLL += E[i];
- }
- allData.Add(D);
- allData.Add(vs);
- allData.Add(G);
- allData.Add(H);
- allData.Add(I);
- double se2 = (11.61 * ret[0]) / Math.Sqrt(N);
- double max = 6.91 * ret[0] + ret[1];
- double tn = (vs.Max() - mean) / sdev;
- double t1 = (mean - vs.Min()) / sdev;
- Business.groupInfo maxdt = new Business.groupInfo() { groupTitle=item.groupTitle,values=new double[] { max , se2/2 } };
- maxData.Add(maxdt);
- int add_rowindex = dtgrid.Rows.Add();
- dtgrid.Rows[add_rowindex].Cells[0].Value = item.groupTitle;
- dtgrid.Rows[add_rowindex].Cells[1].Value =vs.Max().ToString();
- dtgrid.Rows[add_rowindex].Cells[2].Value = vs.Min().ToString();
- dtgrid.Rows[add_rowindex].Cells[3].Value = Math.Round(max, 1).ToString();
- dtgrid.Rows[add_rowindex].Cells[4].Value = Math.Round(se2, 1).ToString();
- dtgrid.Rows[add_rowindex].Cells[5].Value = Math.Round(tn, 3).ToString();
- dtgrid.Rows[add_rowindex].Cells[6].Value = Math.Round(t1, 3).ToString();
- dtgrid.Rows[add_rowindex].Cells[7].Value = Math.Round(max, 1).ToString() + "+-"+ Math.Round(se2, 1).ToString();
- dtgrid.Rows[add_rowindex].Cells[8].Value = Math.Round(max- se2, 3).ToString();
- dtgrid.Rows[add_rowindex].Cells[9].Value = Math.Round(max + se2, 3).ToString();
- for (int i = 0; i < allData.Count; i++)
- {
- for (int j = 0; j < allData[i].Length; j++)
- {
- if (double.IsNaN(allData[i][j]) || double.IsInfinity(allData[i][j]))
- {
- MessageBox.Show("数据不正常,会造成溢出");
- return;
- }
- }
- }
- ChartControl chartControl = new ChartControl();
- chartControl.parameters = allData;
- chartControl.delta = ret[0];
- chartControl.lambda= ret[1];
- chartControl.title = item.groupTitle;
- int chkcount = panel1.Controls.Count;
- int row = chkcount / 2;
- int col = chkcount % 2;
- chartControl.Location = new Point(col * 550, row * 400 + 10);
- panel1.Controls.Add(chartControl);
- }
- }
- private void btnShow_Click(object sender, EventArgs e)
- {
- for (int i = 0; i < maxData.Count; i++)
- {
- for (int j = 0; j < maxData[i].values.Length; j++)
- {
- if (double.IsNaN(maxData[i].values[j]) || double.IsInfinity(maxData[i].values[j]))
- {
- MessageBox.Show("数据不正常,会造成溢出");
- return;
- }
- }
- }
- GroupLmax groupLmax = new GroupLmax();
- groupLmax.parameters = maxData;
- groupLmax.Show();
- }
- }
- }
|