예제 #1
0
        public static void LoopCI(DataGridView dataGridView1, RichTextBox richTextBox1, string Cols, string Tail, string Statistics, double Significance)
        {
            //这个函数的目的是循环对所要求的变量进行参数估计
            char[]   separator = { ',' };
            string[] AllCols   = Cols.Split(separator);
            string   result    = "";

            richTextBox1.AppendText("参数估计: ");
            richTextBox1.AppendText(Statistics);
            richTextBox1.AppendText("\r\n");
            richTextBox1.AppendText("置信度: ");
            richTextBox1.AppendText(Significance.ToString());
            richTextBox1.AppendText("\t");
            richTextBox1.AppendText(Tail);
            richTextBox1.AppendText("\r\n");
            richTextBox1.AppendText(Header);
            int ColNum = 0;

            foreach (string EachCol in AllCols)
            {
                if (Int32.TryParse(EachCol, out ColNum))
                {
                    string[] Numbers = Tabulation.ReadVector(MainForm.MainDT, ColNum - 1).ToArray();
                    result = CI(dataGridView1.Columns[ColNum - 1].Name, Numbers, Tail, Statistics, Significance);
                    richTextBox1.AppendText(result);
                }
            }
        }
예제 #2
0
        public static void MultiCorr(DataTable dt, int [] ColNums, RichTextBox richTextBox1)
        {
            StringBuilder Result = new StringBuilder();

            //相关系数输出是一个矩阵,因此要有行名和列名
            //例如:
            //      列1      列2      列3
            //列1    1         0        0
            //列2    0         1        0
            //列3    0         1        1
            //自身的相关系数一定是1
            Result.Append(StrManipulation.PadLeftX(" ", ' ', 12));
            Result.Append("\t");
            foreach (int EachCol in ColNums)
            {
                Result.Append(StrManipulation.PadLeftX(dt.Columns[EachCol].ColumnName, ' ', 12));
                Result.Append("\t");
            }
            Result.Append("\r\n");
            foreach (int EachCol in ColNums)
            {
                Result.Append(StrManipulation.PadLeftX(dt.Columns[EachCol].ColumnName, ' ', 12));
                Result.Append("\t");
                foreach (int EveryCol in ColNums)
                {
                    if (EachCol == EveryCol)
                    {
                        Result.Append(StrManipulation.PadLeftX("1.000", ' ', 12));
                        Result.Append("\t");
                    }
                    else
                    {
                        string[] NumberSeries1 = Tabulation.ReadVector(dt, EachCol).ToArray();
                        string[] NumberSeries2 = Tabulation.ReadVector(dt, EveryCol).ToArray();
                        Result.Append(StrManipulation.PadLeftX(MathV.NumberPolish(Corr(NumberSeries1, NumberSeries2).ToString()), ' ', 12));
                        Result.Append("\t");
                    }
                }
                Result.Append("\r\n");
            }
            richTextBox1.AppendText(Result.ToString());
            MainForm.S.richTextBox1.Select();                                      //让RichTextBox获得焦点
            MainForm.S.richTextBox1.Select(MainForm.S.richTextBox1.TextLength, 0); //将插入符号置于文本结束处
            MainForm.S.richTextBox1.ScrollToCaret();
        }
예제 #3
0
        private static string AddNums(ref string expression, List <string> VariableList, DataTable dt, ref List <int> BlackList)
        {
            VariableList = VariableList.Distinct().ToList();

            int           VarCount = VariableList.Count;
            StringBuilder Sequence = new StringBuilder();

            string [][] Numbers = new string[VarCount][];
            for (int i = 0; i < VarCount; i++)
            {
                Numbers[i] = Tabulation.ReadVector(dt, Convert.ToInt32(VariableList[i].Trim('x')) - 1).ToArray();
            }
            int RowsCount = dt.Rows.Count;
            //List<int> BlackList = new List<int>();
            double Temp    = 0;
            int    IsNaRow = 0;
            //IsNaRow = 0即该行无空格或错误,否则为1
            int RealNumbers = 0;

            for (int i = 0; i < RowsCount; i++)
            {
                for (int j = 0; j < VarCount; j++)
                {
                    if (double.TryParse(Numbers[j][i], out Temp))
                    {
                        continue;
                    }
                    IsNaRow = 1;
                }
                if (IsNaRow == 1)
                {
                    BlackList.Add(i);

                    IsNaRow = 0;
                }
                else
                {
                    RealNumbers++;
                }
            }
            StringBuilder AddNums  = new StringBuilder();
            int           NumCount = 0;

            for (int i = 0; i < VarCount; i++)
            {
                Sequence.Append("double[] ");
                Sequence.Append(VariableList[i]);
                Sequence.Append(" = new double[]{");
                AddNums.Clear();
                NumCount = Numbers[i].Length;
                for (int j = 0; j < NumCount; j++)
                {
                    if (BlackList.IndexOf(j) == -1)
                    {
                        AddNums.Append(Numbers[i][j]);
                        AddNums.Append(",");
                    }
                }
                Sequence.Append(AddNums.ToString().TrimEnd(','));
                Sequence.Append("};");
                expression = expression.Replace(VariableList[i], VariableList[i] + "[i]");
            }
            Sequence.Append("int len = ");
            Sequence.Append(RealNumbers.ToString());
            Sequence.Append(";");
            return(Sequence.ToString());
        }
예제 #4
0
        private void button_Anova_Click(object sender, EventArgs e)
        {
            char[]   separator   = { ',' };
            string[] AllCols     = textBox_Cols.Text.Split(separator);
            int      ColNum      = 0;
            int      Cols_count  = 0;
            int      Cols_length = AllCols.Length;     //变量数

            int[] Row_length   = new int[Cols_length]; //每个变量长度
            int   Total_length = 0;                    //总单元数

            string[][] Numbers = new string[Cols_length][];
            foreach (string EachCol in AllCols)
            {
                if (Int32.TryParse(EachCol, out ColNum))
                {
                    Row_length[Cols_count] = 0;
                    Numbers[Cols_count]    = Tabulation.ReadVector(MainForm.MainDT, ColNum - 1).ToArray();
                    foreach (string value in Numbers[Cols_count])
                    {
                        if (value != "" && value != null)
                        {
                            Row_length[Cols_count]++;
                        }
                    }
                    Total_length += Row_length[Cols_count];
                    //MessageBox.Show("变量" + Cols_count.ToString());
                    //MessageBox.Show("变量长度" + Total_length.ToString());
                }
                Cols_count++;
            }
            //计算开始
            BigDecimal sum_all = 0;

            BigDecimal[] sum_col = new BigDecimal[Cols_length];
            BigDecimal[] xjbar   = new BigDecimal[Cols_length];
            for (int i = 0; i < Cols_length; i++)
            {
                sum_col[i] = 0;
                foreach (BigDecimal value in Numbers[i])
                {
                    sum_all    = sum_all + value;
                    sum_col[i] = sum_col[i] + value;
                    xjbar[i]   = sum_col[i] / Row_length[i];
                }
            }
            BigDecimal xbarbar = sum_all / Total_length;

            BigDecimal SST = 0;
            BigDecimal SSA = 0;
            BigDecimal SSW = 0;

            BigDecimal[] SSW_list = new BigDecimal[Cols_length];
            for (int i = 0; i < Cols_length; i++)
            {
                SSW_list[i] = 0;
                foreach (BigDecimal var in Numbers[i])
                {
                    SST         = SST + (var - xbarbar) * (var - xbarbar);
                    SSW_list[i] = SSW_list[i] + (var - xjbar[i]) * (var - xjbar[i]);
                }
                SSA = SSA + Row_length[i] * (xjbar[i] - xbarbar) * (xjbar[i] - xbarbar);
                SSW = SSW + SSW_list[i];
            }
            BigDecimal MSA    = SSA / (Cols_length - 1);
            BigDecimal MSW    = SSW / (Total_length - Cols_length);
            BigDecimal MST    = SST / (Total_length - 1);
            BigDecimal Fvalue = MSA / MSW;
            BigDecimal Pvalue = Stat.FDIST(Convert.ToDouble(Fvalue.ToString()), Cols_length - 1, Total_length - 1);

            MainForm.S.richTextBox1.AppendText(StrManipulation.PadLeftX(StrManipulation.VariableNamePolish("方差分析"), ' ', 12));
            MainForm.S.richTextBox1.AppendText("\r\n");
            MainForm.S.richTextBox1.AppendText(StrManipulation.PadLeftX(StrManipulation.VariableNamePolish("变量名:"), ' ', 12));
            MainForm.S.richTextBox1.AppendText("\t");
            MainForm.S.richTextBox1.AppendText(textBox_VarNames.Text);
            MainForm.S.richTextBox1.AppendText("\r\n");
            MainForm.S.richTextBox1.AppendText(StrManipulation.PadLeftX(StrManipulation.VariableNamePolish("F值:"), ' ', 12));
            MainForm.S.richTextBox1.AppendText("\t");
            MainForm.S.richTextBox1.AppendText(StrManipulation.PadLeftX(MathV.NumberPolish(Fvalue.ToString()), ' ', 12));
            MainForm.S.richTextBox1.AppendText("\r\n");
            MainForm.S.richTextBox1.AppendText(StrManipulation.PadLeftX(StrManipulation.VariableNamePolish("P值:"), ' ', 12));
            MainForm.S.richTextBox1.AppendText("\t");
            MainForm.S.richTextBox1.AppendText(StrManipulation.PadLeftX(MathV.NumberPolish(Pvalue.ToString()), ' ', 12));
            MainForm.S.richTextBox1.AppendText("\r\n");


            MainForm.S.richTextBox1.AppendText(Header);
            MainForm.S.richTextBox1.AppendText(StrManipulation.PadLeftX(StrManipulation.VariableNamePolish("组内"), ' ', 12));
            MainForm.S.richTextBox1.AppendText("\t");
            MainForm.S.richTextBox1.AppendText(StrManipulation.PadLeftX(MathV.NumberPolish((Cols_length - 1).ToString()), ' ', 12));
            MainForm.S.richTextBox1.AppendText("\t");
            MainForm.S.richTextBox1.AppendText(StrManipulation.PadLeftX(MathV.NumberPolish(SSA.ToString()), ' ', 12));
            MainForm.S.richTextBox1.AppendText("\t");
            MainForm.S.richTextBox1.AppendText(StrManipulation.PadLeftX(MathV.NumberPolish(MSA.ToString()), ' ', 12));
            MainForm.S.richTextBox1.AppendText("\r\n");

            MainForm.S.richTextBox1.AppendText(StrManipulation.PadLeftX(StrManipulation.VariableNamePolish("组间"), ' ', 12));
            MainForm.S.richTextBox1.AppendText("\t");
            MainForm.S.richTextBox1.AppendText(StrManipulation.PadLeftX(MathV.NumberPolish((Total_length - Cols_length).ToString()), ' ', 12));
            MainForm.S.richTextBox1.AppendText("\t");
            MainForm.S.richTextBox1.AppendText(StrManipulation.PadLeftX(MathV.NumberPolish(SSW.ToString()), ' ', 12));
            MainForm.S.richTextBox1.AppendText("\t");
            MainForm.S.richTextBox1.AppendText(StrManipulation.PadLeftX(MathV.NumberPolish(MSW.ToString()), ' ', 12));
            MainForm.S.richTextBox1.AppendText("\r\n");

            MainForm.S.richTextBox1.AppendText(StrManipulation.PadLeftX(StrManipulation.VariableNamePolish("总"), ' ', 12));
            MainForm.S.richTextBox1.AppendText("\t");
            MainForm.S.richTextBox1.AppendText(StrManipulation.PadLeftX(MathV.NumberPolish((Total_length - 1).ToString()), ' ', 12));
            MainForm.S.richTextBox1.AppendText("\t");
            MainForm.S.richTextBox1.AppendText(StrManipulation.PadLeftX(MathV.NumberPolish(SST.ToString()), ' ', 12));
            MainForm.S.richTextBox1.AppendText("\t");
            MainForm.S.richTextBox1.AppendText(StrManipulation.PadLeftX(MathV.NumberPolish(MST.ToString()), ' ', 12));
            MainForm.S.richTextBox1.AppendText("\r\n");
        }
예제 #5
0
        public static string HypothesisTesting(DataTable MainDT, string ColName,
                                               string Statistics, string Operation, string Tail, double Significance, double NullHypothesis)
        {
            //假设检验
            //Statistics为统计量,Operation为运算(>,<,=)
            //Tail为单尾双尾,这里内容为双侧、左单侧、右单侧
            //Significance为显著性水平
            int ColNum = Tabulation.FindCol(MainDT, ColName);

            string[]      Numbers = Tabulation.ReadVector(MainDT, ColNum).ToArray();
            StringBuilder Result  = new StringBuilder();

            Result.Append("假设检验: ");
            Result.Append(Statistics);
            Result.Append("\r\n");
            Result.Append("显著性水平: ");
            Result.Append(Significance.ToString());
            Result.Append("\t");
            Result.Append(Tail);
            Result.Append("\r\n原假设: ");
            Result.Append(Statistics);
            Result.Append(" ");
            Result.Append(Operation);
            Result.Append(" ");
            Result.Append(NullHypothesis.ToString());
            Result.Append("\r\n备择假设: ");
            Result.Append(Statistics);
            Result.Append(" ");
            if (Operation == "=")
            {
                Result.Append("<>");
            }
            else if (Operation == "<=")
            {
                Result.Append(">");
            }
            else
            {
                Result.Append("<");
            }
            Result.Append(" ");
            Result.Append(NullHypothesis.ToString());
            Result.Append("\r\n");
            BigDecimal sum      = 0;
            BigDecimal mean     = 0;
            BigDecimal Variance = 0;
            BigDecimal Sd       = 0;
            //Sd为标准差
            int        count = 0;
            BigDecimal sum2  = 0;
            //sum2用于计算数字的平方,方便计算方差
            Double     TempNum = 0;
            BigDecimal BigTemp = 0;
            //BigTemp用于记录BigDecimal类型的临时数据
            double Threshold = 0;
            //Threshold为临界值
            double PValue = 0;

            //Pvalue不用多解释了吧~
            foreach (string Num in Numbers)
            {
                if (Double.TryParse(Num, out TempNum))
                {
                    sum  += TempNum;
                    sum2 += (BigDecimal)TempNum * (BigDecimal)TempNum;
                    count++;
                }
            }
            //遍历了该列所有数字
            if (Statistics == "均值")
            {
                if (count >= 30)
                {
                    Result.Append(HTHeader_Ztest);
                }
                else
                {
                    Result.Append(HTHeader_Ttest);
                }
                if (count <= 1)
                {
                    return("样本数量过少,无法进行假设检验!\r\n");
                }
                else
                {
                    //开始计算均值和方差
                    //方差要乘以调整系数
                    mean     = sum / count;
                    Variance = (sum2 / count - mean * mean) * count / (count - 1);

                    Result.Append(StrManipulation.PadLeftX(StrManipulation.VariableNamePolish(ColName), ' ', 12));
                    Result.Append("\t");
                    Result.Append(StrManipulation.PadLeftX(count.ToString(), ' ', 12));
                    Result.Append("\t");
                    Result.Append(StrManipulation.PadLeftX(MathV.NumberPolish(mean.ToString()), ' ', 12));
                    Result.Append("\t");
                    Result.Append(StrManipulation.PadLeftX(MathV.NumberPolish(MathV.Sqrt(Variance.ToString()).ToString()), ' ', 12));
                    Result.Append("\t");
                    if (count >= 30)
                    {
                        //大样本
                        //z检验
                        Sd      = MathV.Sqrt(Variance.ToString()).ToString();
                        BigTemp = (mean - NullHypothesis) / (Sd / Math.Sqrt(count));
                        //BigTemp此时的值为z检验统计量
                        //样本数count无需大数开方,用普通方法开方即可
                        if (Tail == "双侧")
                        {
                            Threshold = NORMSINV(1 - Significance / 2);
                            PValue    = 2 * (1 - NORMDIST(Math.Abs(Convert.ToDouble(BigTemp.ToString()))));
                        }
                        else if (Tail == "左单侧")
                        {
                            Threshold = NORMSINV(Significance);
                            PValue    = 1 - NORMDIST(Math.Abs(Convert.ToDouble(BigTemp.ToString())));
                        }
                        else if (Tail == "右单侧")
                        {
                            Threshold = NORMSINV(1 - Significance);
                            PValue    = 1 - NORMDIST(Math.Abs(Convert.ToDouble(BigTemp.ToString())));
                        }
                        Result.Append(StrManipulation.PadLeftX(MathV.NumberPolish(BigTemp.ToString()), ' ', 12));
                        Result.Append("\t");
                        Result.Append(StrManipulation.PadLeftX(MathV.NumberPolish(Threshold.ToString()), ' ', 12));
                        Result.Append("\t");
                        Result.Append(StrManipulation.PadLeftX(MathV.NumberPolish(PValue.ToString()), ' ', 12));
                        Result.Append("\r\n");
                        if (PValue < Significance)
                        {
                            Result.Append("在");
                            Result.Append(Significance.ToString());
                            Result.Append("的显著性水平上拒绝原假设");
                        }
                        else
                        {
                            Result.Append("在");
                            Result.Append(Significance.ToString());
                            Result.Append("的显著性水平上不拒绝原假设");
                        }
                    }
                    else
                    {
                        //小样本
                        //t检验
                        Sd      = MathV.Sqrt(Variance.ToString()).ToString();
                        BigTemp = (mean - NullHypothesis) / (Sd / Math.Sqrt(count));
                        //BigTemp此时的值为z检验统计量
                        //样本数count无需大数开方,用普通方法开方即可
                        if (Tail == "双侧")
                        {
                            Threshold = TINV(Significance / 2 / 2, count - 1);
                            //每个放进TINV的值都要除以2,这个bug之后会进行修复
                            PValue = TDIST(Math.Abs(Convert.ToDouble(BigTemp.ToString()) / 2), count - 1, 2);
                        }
                        else if (Tail == "左单侧")
                        {
                            Threshold = TINV(Significance / 2, count - 1);
                            PValue    = TDIST(Math.Abs(Convert.ToDouble(BigTemp.ToString()) / 2), count - 1, 1);
                        }
                        else if (Tail == "右单侧")
                        {
                            Threshold = TINV(Significance / 2, count - 1);
                            PValue    = TDIST(Math.Abs(Convert.ToDouble(BigTemp.ToString()) / 2), count - 1, 1);
                        }
                        Result.Append(StrManipulation.PadLeftX(MathV.NumberPolish(BigTemp.ToString()), ' ', 12));
                        Result.Append("\t");
                        Result.Append(StrManipulation.PadLeftX(MathV.NumberPolish(Threshold.ToString()), ' ', 12));
                        Result.Append("\t");
                        Result.Append(StrManipulation.PadLeftX(MathV.NumberPolish(PValue.ToString()), ' ', 12));
                        Result.Append("\r\n");
                        if (PValue < Significance)
                        {
                            Result.Append("在");
                            Result.Append(Significance.ToString());
                            Result.Append("的显著性水平上拒绝原假设");
                        }
                        else
                        {
                            Result.Append("在");
                            Result.Append(Significance.ToString());
                            Result.Append("的显著性水平上不拒绝原假设");
                        }
                    }
                    Result.Append("\r\n");
                    return(Result.ToString());
                }
            }
            else if (Statistics == "比率")
            {
                return("hhh");
            }
            else
            {
                //方差
                return("hhh");
            }
        }
예제 #6
0
        public static string QuickSummary(DataTable MainDT, int ColNum)
        {
            string        ColName  = MainDT.Columns[ColNum].ColumnName;
            List <string> Numbers  = Tabulation.ReadVector(MainDT, ColNum);
            StringBuilder Result   = new StringBuilder();
            BigDecimal    sum      = 0;
            BigDecimal    mean     = 0;
            BigDecimal    Variance = 0;
            int           count    = 0;
            BigDecimal    max      = 0;
            BigDecimal    min      = 0;
            BigDecimal    sum2     = 0;
            Double        TempNum  = 0;

            //sum2用于计算数字的平方,方便计算方差
            foreach (string Num in Numbers)
            {
                if (Double.TryParse(Num, out TempNum))
                {
                    sum  += TempNum;
                    sum2 += (BigDecimal)TempNum * (BigDecimal)TempNum;
                    count++;
                    if (count == 1)
                    {
                        max = TempNum;
                        min = TempNum;
                    }
                    else
                    {
                        if (max < TempNum)
                        {
                            max = TempNum;
                        }
                        if (min > TempNum)
                        {
                            min = TempNum;
                        }
                    }
                }
            }
            if (count == 0)
            {
                //如果没有获取任何数字
                return("");
            }
            else if (count == 1)
            {
                //如果只有一个数字,可以计算均值,但是不可以计算标准差
                mean = sum / count;
                Result.Append(StrManipulation.PadLeftX(StrManipulation.VariableNamePolish(ColName), ' ', 12));
                Result.Append("\t");
                Result.Append(StrManipulation.PadLeftX(count.ToString(), ' ', 12));
                Result.Append("\t");
                Result.Append(StrManipulation.PadLeftX(MathV.NumberPolish(mean.ToString()), ' ', 12));
                Result.Append("\t");
                Result.Append(StrManipulation.PadLeftX("NA", ' ', 12));
                Result.Append("\t");
                Result.Append(StrManipulation.PadLeftX(MathV.NumberPolish(min.ToString()), ' ', 12));
                Result.Append("\t");
                Result.Append(StrManipulation.PadLeftX(MathV.NumberPolish(max.ToString()), ' ', 12));
                Result.Append("\r\n");
                //Temp += Result;
                return(Result.ToString());
            }
            else
            {
                //开始计算均值和方差
                //方差要乘以调整系数
                mean     = sum / count;
                Variance = (sum2 / count - mean * mean) * count / (count - 1);
                Result.Append(StrManipulation.PadLeftX(StrManipulation.VariableNamePolish(ColName), ' ', 12));
                Result.Append("\t");
                Result.Append(StrManipulation.PadLeftX(count.ToString(), ' ', 12));
                Result.Append("\t");
                Result.Append(StrManipulation.PadLeftX(MathV.NumberPolish(mean.ToString()), ' ', 12));
                Result.Append("\t");
                Result.Append(StrManipulation.PadLeftX(MathV.NumberPolish(MathV.Sqrt(Variance.ToString()).ToString()), ' ', 12));
                Result.Append("\t");
                Result.Append(StrManipulation.PadLeftX(MathV.NumberPolish(min.ToString()), ' ', 12));
                Result.Append("\t");
                Result.Append(StrManipulation.PadLeftX(MathV.NumberPolish(max.ToString()), ' ', 12));
                Result.Append("\r\n");
                return(Result.ToString());
            }
        }
예제 #7
0
        private void button1_Click(object sender, EventArgs e)
        {
            StringBuilder Result = new StringBuilder();
            int           ColNum = 0;

            if (Int32.TryParse(texbox_dep.Text, out ColNum))
            {
                string[]     NumberSeries  = Tabulation.ReadVector(MainForm.MainDT, ColNum - 1).ToArray();
                int          length        = 0;
                int          lag           = 4; //自己给定lag的值
                string[][]   NumberCombine = new string[lag + 1][];
                BigDecimal[] corr          = new BigDecimal[lag];
                BigDecimal   sum_Qtest     = 0;
                BigDecimal   sum_LBtest    = 0;
                foreach (string Num in NumberSeries)
                {
                    if (Num != "" && Num != null)
                    {
                        length++;
                    }
                }
                if (length < 8)
                {
                    MessageBox.Show("数据量过少,建议使用灰色预测");
                }
                else
                {
                    for (int i = 0; i < lag + 1; i++)
                    {
                        NumberCombine[i] = new string[length - lag];
                        for (int j = 0; j < length - lag; j++)
                        {
                            NumberCombine[i][j] = NumberSeries[j + lag - i];
                        }
                        try
                        {
                            corr[i - 1] = Stat.Corr(NumberCombine[i], NumberCombine[i - 1]);
                            sum_Qtest  += corr[i - 1] * corr[i - 1];
                            sum_LBtest += corr[i - 1] * corr[i - 1] / (BigDecimal)(length - i);
                        }
                        catch (Exception ex) { }
                    }

                    string[] output = Stat.TimeseriesTest(length, sum_Qtest, sum_LBtest, lag, corr);
                    Result.Append(StrManipulation.PadLeftX("时间序列平稳性检验", ' ', 12));
                    Result.Append("\r\n");
                    Result.Append(StrManipulation.PadRightX("Q检验:", ' ', 12));
                    Result.Append("\r\n");
                    Result.Append(StrManipulation.PadLeftX("Q      =", ' ', 12));
                    Result.Append("\t");
                    Result.Append(StrManipulation.PadLeftX(MathV.NumberPolish(output[lag]), ' ', 12));
                    Result.Append("\r\n");
                    Result.Append(StrManipulation.PadLeftX("Prob > Q =", ' ', 12));
                    Result.Append("\t");
                    Result.Append(StrManipulation.PadLeftX(MathV.NumberPolish(output[lag + 1]), ' ', 12));
                    Result.Append("\r\n");

                    Result.Append(StrManipulation.PadRightX("LB检验:", ' ', 12));
                    Result.Append("\r\n");
                    Result.Append(StrManipulation.PadLeftX("LB      =", ' ', 12));
                    Result.Append("\t");
                    Result.Append(StrManipulation.PadLeftX(MathV.NumberPolish(output[lag + 2]), ' ', 12));
                    Result.Append("\r\n");
                    Result.Append(StrManipulation.PadLeftX("Prob > LB =", ' ', 12));
                    Result.Append("\t");
                    Result.Append(StrManipulation.PadLeftX(MathV.NumberPolish(output[lag + 3]), ' ', 12));
                    Result.Append("\r\n");


                    if (Convert.ToDouble(output[lag + 1]) <= 0.05 || Convert.ToDouble(output[lag + 3]) <= 0.05)
                    {
                        Result.Append(StrManipulation.PadRightX("在95%的显著性水平下认为序列非白噪声,观测值间显著相关。", ' ', 50));
                        Result.Append("\r\n");
                    }
                    else
                    {
                        Result.Append(StrManipulation.PadRightX("在95%的显著性水平下认为序列为白噪声,观测值间相互独立。", ' ', 50));
                        Result.Append("\r\n");
                    }
                    Result.Append("\r\n");
                    int period = 0;
                    if (Int32.TryParse(textBox_period.Text, out period))
                    {
                        BigDecimal[] AR1           = Stat.AR1(NumberSeries, length, corr, period);
                        BigDecimal[] AR2           = Stat.AR2(NumberSeries, length, corr, period);
                        BigDecimal[] plot_forecast = new BigDecimal[period];
                        if (AR1[period] <= AR2[period])
                        {
                            Result.Append(StrManipulation.PadRightX("最佳预测模型:AR1", ' ', 12));
                            Result.Append("\r\n");
                            Result.Append(StrManipulation.PadLeftX("序号(预测)", ' ', 12));
                            Result.Append("\t");
                            for (int i = 0; i < period; i++)
                            {
                                Result.Append(StrManipulation.PadLeftX(i.ToString(), ' ', 12));
                                plot_forecast[i] = AR1[i];
                                Result.Append("\t");
                            }
                            Result.Append("\r\n");
                            Result.Append(StrManipulation.PadLeftX("预测值", ' ', 12));
                            Result.Append("\t");

                            for (int i = 0; i < period; i++)
                            {
                                Result.Append(StrManipulation.PadLeftX(MathV.NumberPolish(AR1[i].ToString()), ' ', 12));
                                Result.Append("\t");
                            }
                        }
                        else
                        {
                            Result.Append(StrManipulation.PadRightX("最佳预测模型:AR2", ' ', 12));
                            Result.Append("\r\n");
                            Result.Append(StrManipulation.PadLeftX("序号(预测)", ' ', 12));
                            Result.Append("\t");
                            for (int i = 0; i < period; i++)
                            {
                                Result.Append(StrManipulation.PadLeftX(i.ToString(), ' ', 12));
                                plot_forecast[i] = AR2[i];
                                Result.Append("\t");
                            }
                            Result.Append("\r\n");
                            Result.Append(StrManipulation.PadLeftX("预测值", ' ', 12));
                            Result.Append("\t");

                            for (int i = 0; i < period; i++)
                            {
                                Result.Append(StrManipulation.PadLeftX(MathV.NumberPolish(AR2[i].ToString()), ' ', 12));
                                Result.Append("\t");
                            }
                        }
                        Result.Append("\r\n");
                        Result.Append("\r\n");
                        MainForm.S.richTextBox1.AppendText(Result.ToString());
                        //MainForm.S.richTextBox1.Select();//让RichTextBox获得焦点

                        chart_timeseries.Series.Clear();
                        Series series  = new Series("原数据");
                        Series series2 = new Series("预测数据");
                        //ChartArea area = chart_timeseries.ChartAreas.Add("chartArea");
                        //area.AxisX.MajorGrid.LineWidth = 0;
                        series.Color  = Color.MidnightBlue;
                        series2.Color = Color.Maroon;
                        if (length <= 50)
                        {
                            series.BorderWidth  = 2;
                            series2.BorderWidth = 2;
                        }
                        series.ChartType  = SeriesChartType.Line;
                        series2.ChartType = SeriesChartType.Line;
                        for (int i = 0; i < length; i++)
                        {
                            series.Points.AddXY(i + 1, Convert.ToDouble(NumberSeries[i].ToString()));
                        }
                        series2.Points.AddXY(length, Convert.ToDouble(NumberSeries[length - 1].ToString()));
                        for (int i = 0; i < period; i++)
                        {
                            series2.Points.AddXY(i + 1 + length, Convert.ToDouble(plot_forecast[i].ToString()));
                        }
                        chart_timeseries.Series.Add(series);
                        chart_timeseries.Series.Add(series2);
                    }
                    else
                    {
                        MessageBox.Show("请输入预测期数");
                    }
                }
            }
            else
            {
                MessageBox.Show("无此列");
            }
        }
예제 #8
0
        private void button_chart_Click(object sender, EventArgs e)
        {
            StringBuilder Result = new StringBuilder();
            int           ColNum = 0;

            if (Int32.TryParse(texbox_dep.Text, out ColNum))
            {
                string[] NumberSeries = Tabulation.ReadVector(MainForm.MainDT, ColNum - 1).ToArray();
                int      length       = 0;
                foreach (string Num in NumberSeries)
                {
                    if (Num != "" && Num != null)
                    {
                        length++;
                    }
                }
                int period = 0;
                if (Int32.TryParse(textBox_period.Text, out period))
                {
                    BigDecimal[] cumsum = new BigDecimal[length];
                    for (int i = 0; i < length; i++)
                    {
                        cumsum[i] = 0;
                        for (int j = 0; j <= i; j++)
                        {
                            cumsum[i] += NumberSeries[j];
                        }
                    }
                    BigDecimal[] C = new BigDecimal[length - 1];
                    for (int i = 0; i < length - 1; i++)
                    {
                        C[i] = 0 - (cumsum[i] + cumsum[i + 1]) / 2;
                    }
                    BigDecimal[,] D = new BigDecimal[length - 1, 1];
                    for (int i = 0; i < length - 1; i++)
                    {
                        D[i, 0] = NumberSeries[i + 1];
                    }
                    BigDecimal[,] E = new BigDecimal[2, length - 1];
                    for (int i = 0; i < length - 1; i++)
                    {
                        E[1, i] = 1;
                        E[0, i] = C[i];
                    }
                    //BigNumber[,] c = MathV.MatTimes(MathV.MatTimes(MathV.MatInv(MathV.MatTimes(E, MathV.MatTrans(E)), 2), E), MathV.MatTrans(D));
                    BigDecimal[,] c = MathV.MatTimes(MathV.MatTimes(MathV.MatInv(MathV.MatTimes(E, MathV.MatTrans(E)), 2), E), D);
                    BigDecimal   a = c[0, 0];
                    BigDecimal   b = c[1, 0];
                    BigDecimal   t = b / a;
                    BigDecimal[] F = new BigDecimal[length + period];
                    for (int i = 0; i < length + period; i++)
                    {
                        BigDecimal e1 = 2.718281828;
                        F[i] = (NumberSeries[0] - t) / Math.Exp((i) * Convert.ToDouble(a.ToString())) + t;
                    }

                    BigDecimal[] G = new BigDecimal[length + period];
                    G[0] = NumberSeries[0];
                    for (int i = 1; i < length + period; i++)
                    {
                        G[i] = F[i] - F[i - 1];
                    }

                    Result.Append(StrManipulation.PadRightX("灰色预测GM(1,1)模型", ' ', 12));
                    Result.Append("\r\n");
                    Result.Append(StrManipulation.PadLeftX("序号(所有)", ' ', 12));
                    Result.Append("\t");
                    for (int i = 0; i < period; i++)
                    {
                        Result.Append(StrManipulation.PadLeftX(i.ToString(), ' ', 12));
                        Result.Append("\t");
                    }
                    Result.Append("\r\n");
                    Result.Append(StrManipulation.PadLeftX("预测值", ' ', 12));
                    Result.Append("\t");

                    for (int i = 0; i < period + length; i++)
                    {
                        Result.Append(StrManipulation.PadLeftX(MathV.NumberPolish(G[i].ToString()), ' ', 12));
                        Result.Append("\t");
                    }
                    Result.Append("\r\n");
                    Result.Append("\r\n");
                    chart_timeseries.Series.Clear();
                    Series series3 = new Series("原数据(点)");
                    Series series4 = new Series("灰色预测数据");
                    series3.MarkerStyle = MarkerStyle.Circle;
                    series3.MarkerSize  = 6;
                    series4.BorderWidth = 2;
                    series3.Color       = Color.MidnightBlue;
                    series4.Color       = Color.Maroon;
                    series3.ChartType   = SeriesChartType.Point;
                    series4.ChartType   = SeriesChartType.Line;
                    for (int i = 0; i < length; i++)
                    {
                        series3.Points.AddXY(i + 1, Convert.ToDouble(NumberSeries[i].ToString()));
                    }

                    for (int i = 0; i < period + length; i++)
                    {
                        series4.Points.AddXY(i + 1, Convert.ToDouble(G[i].ToString()));
                    }
                    chart_timeseries.Series.Add(series3);
                    chart_timeseries.Series.Add(series4);
                }
                else
                {
                    MessageBox.Show("请输入预测期数");
                }
            }
            else
            {
                MessageBox.Show("无此列");
            }
        }
예제 #9
0
        public static void NAProcess(DataGridView dataGridView1, string Cols, string type, RichTextBox richTextBox1, ComboBox comboBox_user_defined, TextBox textBox_user_defined)
        {
            char []    separator      = { ',' };
            string []  AllCols        = Cols.Split(separator);
            List <int> ColsNeedRemove = new List <int>();
            int        NACount        = 0;
            //计算缺失值数量
            DataTable dt = dataGridView1.DataSource as DataTable;

            richTextBox1.AppendText("缺失值处理:\r\n");
            richTextBox1.AppendText("    处理方式: " + type + "\r\n");
            richTextBox1.Select();                           //让RichTextBox获得焦点
            richTextBox1.Select(richTextBox1.TextLength, 0); //将插入符号置于文本结束处
            richTextBox1.ScrollToCaret();
            BigNumber Mean = 0;
            BigNumber Sum  = 0;

            foreach (string Col in AllCols)
            {
                int StartCount = 0;
                //从第一个非空值开始计数
                NACount = 0;
                Sum     = 0;
                if (comboBox_user_defined.Text == "平均值")
                {
                    string [] Numbers   = Tabulation.ReadVector(MainForm.MainDT, Convert.ToInt32(Col) - 1).ToArray();
                    int       NumCounts = 0;
                    foreach (string Num in Numbers)
                    {
                        if (Tabulation.IsStrDouble(Num))
                        {
                            Sum += Convert.ToDouble(Num);
                            NumCounts++;
                        }
                    }
                    Mean = Sum / NumCounts;
                }
                for (int i = dataGridView1.Rows.Count - 2; i >= 0; i--)
                {
                    //倒着数,从后往前数
                    if (StartCount == 0 && dataGridView1.Rows[i].Cells[Convert.ToInt32(Col) - 1].Value.ToString().Trim() != "")
                    {
                        StartCount = 1;
                        continue;
                    }
                    if (StartCount == 1 && dataGridView1.Rows[i].Cells[Convert.ToInt32(Col) - 1].Value.ToString().Trim() == "")
                    {
                        //遇到缺失值了
                        if (type == "计算缺失值个数")
                        {
                            NACount++;
                        }
                        else if (type == "删除整行")
                        {
                            NACount++;
                            //dt.Rows.RemoveAt(i);
                            ColsNeedRemove.Add(i);
                        }
                        else if (type == "替换为特定值")
                        {
                            if (comboBox_user_defined.Text == "平均值")
                            {
                                dataGridView1.Rows[i].Cells[Convert.ToInt32(Col) - 1].Value = Mean.ToString();
                            }
                            else if (comboBox_user_defined.Text == "自定义值")
                            {
                                dataGridView1.Rows[i].Cells[Convert.ToInt32(Col) - 1].Value = textBox_user_defined.Text;
                            }
                            NACount++;
                        }
                    }
                }

                if (StartCount != 0)
                {
                    richTextBox1.AppendText("    " + "第" + Col + "列" + "缺失值个数: " + NACount.ToString() + "\r\n");
                    richTextBox1.Select();                           //让RichTextBox获得焦点
                    richTextBox1.Select(richTextBox1.TextLength, 0); //将插入符号置于文本结束处
                    richTextBox1.ScrollToCaret();
                }
            }
            richTextBox1.AppendText("\r\n");
            if (type == "删除整行")
            {
                ColsNeedRemove = ColsNeedRemove.Distinct().ToList();
                ColsNeedRemove.Sort();
                int [] SequenceRemove = ColsNeedRemove.ToArray();
                for (int i = SequenceRemove.Length - 1; i >= 0; i--)
                {
                    dt.Rows.RemoveAt(SequenceRemove[i]);
                }
                dataGridView1.DataSource = dt;
            }
        }
예제 #10
0
        private void button1_Click(object sender, EventArgs e)
        {
            int ProvinceNum = 0;
            int VariableNum = 0;

            if (Int32.TryParse(texbox_province.Text, out ProvinceNum))
            {
                if (Int32.TryParse(textBox_variable.Text, out VariableNum))
                {
                    string[] Province_name = Tabulation.ReadVector(MainForm.MainDT, ProvinceNum - 1).ToArray();
                    string[] Variable_data = Tabulation.ReadVector(MainForm.MainDT, VariableNum - 1).ToArray();
                    double[] data1         = new double[31];

                    string[] match = new string[] { "黑", "内", "新", "吉", "辽", "甘", "河北", "京", "山西", "津", "陕", "夏", "青", "山东", "藏", "河南", "苏", "安", "川", "湖北", "重", "上", "浙", "湖南", "江西", "云", "贵", "福", "广西", "海南", "广东" };
                    for (int i = 0; i < 31; i++)
                    {
                        for (int j = 0; j < 31; j++)
                        {
                            if (Province_name[j].IndexOf(match[i]) > -1)
                            {
                                data1[i] = Convert.ToDouble(Variable_data[j]);

                                break;
                            }
                        }
                    }
                    string    str2       = Environment.CurrentDirectory;
                    DataTable dt         = new DataTable();
                    DataTable dt_fill    = new DataTable();
                    string    coor_path  = str2 + "\\coordinates_tiny.csv";
                    string    coor_fill  = str2 + "\\coordinates_tinyfill.csv";
                    char[]    separators = new char[1];
                    separators[0] = ',';
                    dt            = Tabulation.LoadFromCSVFile(coor_path, separators);
                    dt_fill       = Tabulation.LoadFromCSVFile(coor_fill, separators);
                    int[] X_fill    = new int[dt_fill.Rows.Count];
                    int[] Y_fill    = new int[dt_fill.Rows.Count];
                    int[] Num_count = new int[31]; //31个省的填充坐标点数
                    Num_count[0]  = 5436;
                    Num_count[1]  = 18313;
                    Num_count[2]  = 35839;
                    Num_count[3]  = 37966;
                    Num_count[4]  = 39530;
                    Num_count[5]  = 43696;
                    Num_count[6]  = 45647;
                    Num_count[7]  = 45814;
                    Num_count[8]  = 47410;
                    Num_count[9]  = 47531;
                    Num_count[10] = 49571;
                    Num_count[11] = 50103;
                    Num_count[12] = 57224;
                    Num_count[13] = 58756;
                    Num_count[14] = 70210;
                    Num_count[15] = 71816;
                    Num_count[16] = 72785;
                    Num_count[17] = 74121;
                    Num_count[18] = 78660;
                    Num_count[19] = 80410;
                    Num_count[20] = 81181;
                    Num_count[21] = 81229;
                    Num_count[22] = 82155;
                    Num_count[23] = 84079;
                    Num_count[24] = 85602;
                    Num_count[25] = 89021;
                    Num_count[26] = 90616;
                    Num_count[27] = 91701;
                    Num_count[28] = 93791;
                    Num_count[29] = 94079;
                    Num_count[30] = 95620;

                    for (int i = 0; i < dt_fill.Rows.Count; i++)
                    {
                        //读取每个省的填充坐标数据
                        for (int j = 0; j < 31; j++)
                        {
                            if (j == 0)
                            {
                                if (i < Num_count[j])
                                {
                                    X_fill[i] = Convert.ToInt32(dt_fill.Rows[i][0]); // 经度
                                    Y_fill[i] = Convert.ToInt32(dt_fill.Rows[i][1]); //纬度
                                }
                            }
                            else
                            {
                                if (i < Num_count[j] && i >= Num_count[j - 1])
                                {
                                    X_fill[i] = Convert.ToInt32(dt_fill.Rows[i][0]); // 经度
                                    Y_fill[i] = Convert.ToInt32(dt_fill.Rows[i][1]); //纬度
                                    //ID_coordinates[i] = Convert.ToDouble(dt.Rows[i][0]);
                                }
                            }
                        }
                    }
                    //double[] data1 = new double[] {0.589967025780379,2.76640767785393,2.94486656044847,5.18774795087285,9.55568524078571,7.21217446706751,4.81608668665851,5.67326916712699,9.54321203609774,6.27015178543689,0.354135803190215,8.14711495872654,2.47480472823066,3.05263290782758,2.21504588700546,6.70140475318904,6.05666406518314,2.40509705776911,2.60405493113485,1.6725398082315,5.49355137602265,2.82091154095248,9.6588283411846,5.38501889047855,2.50490878854465,0.604765223162727,1.58887244642718,1.17203933984219,2.20719788025169,2.15731627156846,9.43471799430495}; //按照黑龙江 。。。。 的顺序排好的数
                    double[] data = new double[31];
                    data1.CopyTo(data, 0);

                    double[] datarank = MathV.Sort(31, data1);//从小到大排序
                    this.chart1.Series.Clear();
                    int      count_class = 4;
                    double[] quan_value  = new double[count_class + 1];
                    quan_value[0] = datarank[0];
                    quan_value[1] = datarank[7];
                    quan_value[2] = datarank[15];
                    quan_value[3] = datarank[23];
                    quan_value[4] = datarank[30];
                    for (int i = 0; i < count_class; i++)
                    {
                        Series series = new Series();
                        series.ChartType = SeriesChartType.FastPoint;
                        this.chart1.Series.Add(series);
                    }
                    for (int i = 0; i < 4; i++)
                    {
                        Series series = new Series();
                        series.Name      = "(" + MathV.round(quan_value[i].ToString(), 2, 0) + "," + MathV.round(quan_value[i + 1].ToString(), 2, 0) + ")";
                        series.ChartType = SeriesChartType.Column;
                        this.chart1.Series.Add(series);
                    }
                    //台湾不能忘
                    Series series_taiwan = new Series();
                    series_taiwan.ChartType = SeriesChartType.FastPoint;   //边界
                    this.chart1.Series.Add(series_taiwan);
                    series_taiwan.MarkerStyle       = MarkerStyle.Circle;
                    series_taiwan.MarkerSize        = 2;
                    series_taiwan.IsVisibleInLegend = false;
                    series_taiwan.Color             = Color.FromArgb(6, 52, 156);
                    if (comboBox_theme.Text == "蓝色")
                    {
                        this.chart1.Series[0].Color = Color.FromArgb(151, 182, 251);
                        this.chart1.Series[1].Color = Color.FromArgb(78, 131, 248);
                        this.chart1.Series[2].Color = Color.FromArgb(9, 71, 219);
                        this.chart1.Series[3].Color = Color.FromArgb(6, 52, 156);
                        this.chart1.Series[4].Color = Color.FromArgb(151, 182, 251);
                        this.chart1.Series[5].Color = Color.FromArgb(78, 131, 248);
                        this.chart1.Series[6].Color = Color.FromArgb(9, 71, 219);
                        this.chart1.Series[7].Color = Color.FromArgb(6, 52, 156);

                        series_taiwan.Color = Color.FromArgb(6, 52, 156);
                    }
                    else if (comboBox_theme.Text == "青色")
                    {
                        this.chart1.Series[0].Color = Color.FromArgb(128, 234, 248);
                        this.chart1.Series[1].Color = Color.FromArgb(34, 217, 242);
                        this.chart1.Series[2].Color = Color.FromArgb(12, 190, 214);
                        this.chart1.Series[3].Color = Color.FromArgb(8, 119, 134);
                        this.chart1.Series[4].Color = Color.FromArgb(128, 234, 248);
                        this.chart1.Series[5].Color = Color.FromArgb(34, 217, 242);
                        this.chart1.Series[6].Color = Color.FromArgb(12, 190, 214);
                        this.chart1.Series[7].Color = Color.FromArgb(8, 119, 134);

                        series_taiwan.Color = Color.FromArgb(8, 119, 134);
                    }
                    else if (comboBox_theme.Text == "绿色")
                    {
                        this.chart1.Series[0].Color = Color.FromArgb(122, 250, 146);
                        this.chart1.Series[1].Color = Color.FromArgb(55, 247, 92);
                        this.chart1.Series[2].Color = Color.FromArgb(9, 221, 49);
                        this.chart1.Series[3].Color = Color.FromArgb(6, 144, 32);
                        this.chart1.Series[4].Color = Color.FromArgb(122, 250, 146);
                        this.chart1.Series[5].Color = Color.FromArgb(55, 247, 92);
                        this.chart1.Series[6].Color = Color.FromArgb(9, 221, 49);
                        this.chart1.Series[7].Color = Color.FromArgb(6, 144, 32);

                        series_taiwan.Color = Color.FromArgb(6, 144, 32);
                    }
                    else if (comboBox_theme.Text == "红色")
                    {
                        this.chart1.Series[0].Color = Color.FromArgb(253, 149, 141);
                        this.chart1.Series[1].Color = Color.FromArgb(251, 73, 59);
                        this.chart1.Series[2].Color = Color.FromArgb(242, 21, 4);
                        this.chart1.Series[3].Color = Color.FromArgb(196, 0, 0);
                        this.chart1.Series[4].Color = Color.FromArgb(253, 149, 141);
                        this.chart1.Series[5].Color = Color.FromArgb(251, 73, 59);
                        this.chart1.Series[6].Color = Color.FromArgb(242, 21, 4);
                        this.chart1.Series[7].Color = Color.FromArgb(196, 0, 0);

                        series_taiwan.Color = Color.FromArgb(196, 0, 0);
                    }

                    for (int i = 0; i < 4; i++)
                    {
                        this.chart1.Series[i].MarkerStyle       = MarkerStyle.Circle;
                        this.chart1.Series[i].MarkerSize        = 2;
                        this.chart1.Series[i].IsVisibleInLegend = false;
                    }

                    Series series5 = new Series();
                    series5.ChartType = SeriesChartType.FastPoint;   //边界
                    this.chart1.Series.Add(series5);
                    series5.MarkerStyle       = MarkerStyle.Square;
                    series5.MarkerSize        = 2;
                    series5.IsVisibleInLegend = false;
                    if (comboBox_boundary.Text == "无边界")
                    {
                    }
                    else if (comboBox_boundary.Text == "白色")
                    {
                        series5.Color = Color.White;
                        for (int i = 0; i < dt.Rows.Count - 168; i++)
                        {
                            series5.Points.AddXY(Convert.ToInt32(dt.Rows[i][1]), Convert.ToInt32(dt.Rows[i][2]));
                        }
                    }
                    else
                    {
                        series5.Color = Color.Black;
                        for (int i = 0; i < dt.Rows.Count - 168; i++)
                        {
                            series5.Points.AddXY(Convert.ToInt32(dt.Rows[i][1]), Convert.ToInt32(dt.Rows[i][2]));
                        }
                    }

                    for (int i = 12504; i < 12672; i++)
                    {
                        series_taiwan.Points.AddXY(Convert.ToInt32(dt.Rows[i][1]), Convert.ToInt32(dt.Rows[i][2]));
                    }

                    for (int i = 0; i < 31; i++)
                    {
                        if (data[i] <= quan_value[1])
                        {
                            if (i == 0)
                            {
                                for (int j = 0; j < Num_count[i]; j++)
                                {
                                    //MessageBox.Show(X_fill[j].ToString());
                                    this.chart1.Series[0].Points.AddXY(X_fill[j], Y_fill[j]);  //添加对应数据点
                                }
                            }
                            else
                            {
                                for (int j = Num_count[i - 1]; j < Num_count[i]; j++)
                                {
                                    this.chart1.Series[0].Points.AddXY(X_fill[j], Y_fill[j]);  //添加对应数据点
                                }
                            }
                        }
                        if (data[i] > quan_value[1] && data[i] <= quan_value[2])
                        {
                            if (i == 0)
                            {
                                for (int j = 0; j < Num_count[i]; j++)
                                {
                                    this.chart1.Series[1].Points.AddXY(X_fill[j], Y_fill[j]);  //添加对应数据点
                                }
                            }
                            else
                            {
                                for (int j = Num_count[i - 1]; j < Num_count[i]; j++)
                                {
                                    this.chart1.Series[1].Points.AddXY(X_fill[j], Y_fill[j]);  //添加对应数据点
                                }
                            }
                        }
                        if (data[i] > quan_value[2] && data[i] <= quan_value[3])
                        {
                            if (i == 0)
                            {
                                for (int j = 0; j < Num_count[i]; j++)
                                {
                                    this.chart1.Series[2].Points.AddXY(X_fill[j], Y_fill[j]);  //添加对应数据点
                                }
                            }
                            else
                            {
                                for (int j = Num_count[i - 1]; j < Num_count[i]; j++)
                                {
                                    this.chart1.Series[2].Points.AddXY(X_fill[j], Y_fill[j]);  //添加对应数据点
                                }
                            }
                        }
                        if (data[i] > quan_value[3])
                        {
                            if (i == 0)
                            {
                                for (int j = 0; j < Num_count[i]; j++)
                                {
                                    this.chart1.Series[3].Points.AddXY(X_fill[j], Y_fill[j]);  //添加对应数据点
                                }
                            }
                            else
                            {
                                for (int j = Num_count[i - 1]; j < Num_count[i]; j++)
                                {
                                    this.chart1.Series[3].Points.AddXY(X_fill[j], Y_fill[j]);  //添加对应数据点
                                }
                            }
                        }
                    }
                }
            }
        }