void btnOk_Click(object sender, EventArgs e)
 {
     try
     {
         Sample[] arrSX = new Sample[matrX.GetLength(1)];
         for (int j = 0; j < matrX.GetLength(1); j++)
         {
             double[] arrX = new double[matrX.GetLength(0)];
             for (int i = 0; i < matrX.GetLength(0); i++)
             {
                 arrX[i] = matrX[i, j];
             }
             arrSX[j] = new TranSample(new Sample(arrXName[j],
                                                  string.Format("x<sub>{0}</sub>", j + 1), arrX),
                                       dgv.Rows[j].Cells[1].Value.ToString());
         }
         Regression[] arrReg = new Regression[matrY.GetLength(1)];
         rep = "ПАРАМЕТРИЧЕСКАЯ ИДЕНТИФИКАЦИЯ<br>";
         for (int j = 0; j < matrY.GetLength(1); j++)
         {
             double[] arrY = new double[matrY.GetLength(0)];
             for (int i = 0; i < matrY.GetLength(0); i++)
             {
                 arrY[i] = matrY[i, j];
             }
             arrReg[j] = new Regression(new Sample("y", string.Format("y<sub>{0}</sub>", j + 1), arrY), arrSX);
             rep      += arrReg[j].GetRegReport() + "<br>";
         }
         Quality.GenErr(matrX, matrY, arrReg, int.Parse(tbN.Text), double.Parse(tbA.Text),
                        double.Parse(tbB.Text), out arrI, out matrXM, out matrYM);
         rep += string.Format("ПАРАМЕТРЫ ГЕНЕРАЦИИ<br>n = {0}<br>A = {1}<br>B = {2}<br><br>",
                              tbN.Text, tbA.Text, tbB.Text);
         rep += "ПЕРЕЧЕНЬ ИЗМЕНЕННЫХ НАБЛЮДЕНИЙ<br>";
         foreach (int i in arrI)
         {
             rep += string.Format("{0} ", i + 1);
         }
         WBForm wbf = new WBForm("Параметрическая идентификация и генерация наблюдений", rep);
         DialogResult = DialogResult.OK;
         Close();
         wbf.ShowDialog();
     }
     catch
     {
         MessageBox.Show("Ошибка генерации");
     }
 }
Exemple #2
0
 void btnOk_Click(object sender, EventArgs e)
 {
     try
     {
         Regression[] arrReg = new Regression[matrY.GetLength(1)];
         repSmp = repHSmp = repId = repHId = repCorr = repHCorr = repGen = "";
         Sample[] arrSX = new Sample[matrX.GetLength(1)];
         for (int j = 0; j < arrSX.Length; j++)
         {
             double[] arrX = new double[matrX.GetLength(0)];
             for (int i = 0; i < matrX.GetLength(0); i++)
             {
                 arrX[i] = matrX[i, j];
             }
             arrSX[j] = new Sample(arrXName[j], string.Format("x<sub>{0}</sub>", j + 1), arrX);
             arrSX[j].Calculate();
             repSmp  += arrSX[j].GetReport();
             repHSmp += arrSX[j].GetHypReport();
         }
         repId = "ПАРАМЕТРИЧЕСКАЯ ИДЕНТИФИКАЦИЯ<br>";
         Sample[] arrSY = new Sample[matrY.GetLength(1)];
         for (int j = 0; j < matrY.GetLength(1); j++)
         {
             Sample[] arrTSX = new Sample[matrX.GetLength(1)];
             for (int k = 0; k < matrX.GetLength(1); k++)
             {
                 arrTSX[k] = new TranSample(arrSX[k],
                                            dgv.Rows[k].Cells[j + 1].Value.ToString());
             }
             double[] arrY = new double[matrY.GetLength(0)];
             for (int i = 0; i < matrY.GetLength(0); i++)
             {
                 arrY[i] = matrY[i, j];
             }
             Sample smpY = new Sample(arrYName[j], string.Format("y<sub>{0}</sub>", j + 1), arrY);
             smpY.Calculate();
             arrSY[j]  = smpY;
             repSmp   += smpY.GetReport();
             repHSmp  += smpY.GetHypReport();
             arrReg[j] = new Regression(smpY, arrTSX);
             repId    += arrReg[j].GetRegReport() + "<br>";
             repCorr  += arrReg[j].GetCorrReport();
             if (cbH.Checked)
             {
                 arrReg[j].CheckHypothesises(double.Parse(tbAlpha.Text));
                 repHId   += arrReg[j].GetHypRegrReport();
                 repHCorr += arrReg[j].GetHypCorrReport();
             }
         }
         Sample[] arrSYX = new Sample[matrX.GetLength(1) + matrY.GetLength(1) - 1];
         for (int i = 0; i < arrSY.Length - 1; i++)
         {
             arrSYX[i] = arrSY[i + 1];
         }
         for (int i = 0; i < arrSX.Length; i++)
         {
             arrSYX[arrSY.Length - 1 + i] = arrSX[i];
         }
         Regression reg = new Regression(arrSY[0], arrSYX);
         repCorrXY = reg.GetCorrReport().Replace("<P>ПОКАЗАТЕЛЬ: y<sub>1</sub><BR>", "");
         if (cbG.Checked)
         {
             Quality.GenErr(matrX, matrY, arrReg, int.Parse(tbN.Text), double.Parse(tbA.Text),
                            double.Parse(tbB.Text), out arrI, out matrXM, out matrYM);
             repGen += string.Format("ПАРАМЕТРЫ ГЕНЕРАЦИИ<br>n = {0}<br>A = {1}<br>B = {2}<br><br>",
                                     tbN.Text, tbA.Text, tbB.Text);
             repGen += "ПЕРЕЧЕНЬ ИЗМЕНЕННЫХ НАБЛЮДЕНИЙ<br>";
             foreach (int i in arrI)
             {
                 repGen += string.Format("{0} ", i + 1);
             }
         }
         else
         {
             matrXM = matrX;
             matrYM = matrY;
         }
         DialogResult = DialogResult.OK;
         Close();
     }
     catch
     {
         MessageBox.Show("Ошибка генерации");
     }
 }
Exemple #3
0
        void btnOpt_Click(object sender, EventArgs e)
        {
            string rep = "";

            Variable[] arrQ, arrU;
            Import(out arrQ, out arrU);
            Sample[]   arrSmp   = new Sample[arrU.Length];
            double[][] arrCoeff = new double[arrQ.Length][];
            for (int i = 0; i < arrU.Length; i++)
            {
                arrSmp[i] = new Sample(arrU[i].name, arrU[i].id, arrU[i].arr);
            }
            for (int i = 0; i < arrQ.Length; i++)
            {
                Sample[] arrTSmp = new Sample[arrSmp.Length];
                for (int j = 0; j < arrTSmp.Length; j++)
                {
                    arrTSmp[j] = new TranSample(arrSmp[j], dgvU[i + 2, j].Value.ToString());
                }
                Sample     smp = new Sample(arrQ[i].name, arrQ[i].id, arrQ[i].arr);
                Regression r   = new Regression(smp, arrSmp);
                arrCoeff[i] = r.arrB;
                rep        += r.GetRegReport() + "<br>";
            }
            string[] arrStage = new string[dgvStage.Rows.Count];
            for (int i = 0; i < arrStage.Length; i++)
            {
                arrStage[i] = dgvStage[0, i].Value.ToString();
            }
            StageForm sf = new StageForm(arrStage);

            sf.ShowDialog();
            List <string> lNU = new List <string>(), lU = new List <string>();
            int           k;

            for (k = 0; k < arrStage.Length; k++)
            {
                if (sf.stage == arrStage[k])
                {
                    break;
                }
                else
                {
                    lNU.AddRange(dgvStage[1, k].Value.ToString().Split(new char[] { ' ', ',' },
                                                                       StringSplitOptions.RemoveEmptyEntries));
                }
            }
            ExpForm ef = new ExpForm(lNU.ToArray(), arrU);

            ef.ShowDialog();
            for (int i = 0; i < arrU.Length; i++)
            {
                if (!lNU.Contains(string.Format("{0}", i + 1)))
                {
                    lU.Add(arrU[i].name);
                }
            }
            int p = lU.Count, n = arrQ.Length;

            int[] arrI = new int[p], arrNI = new int[arrU.Length - p];
            for (int i = 0; i < p; i++)
            {
                for (int j = 0; j < arrU.Length; j++)
                {
                    if (arrU[j].name == lU[i])
                    {
                        arrI[i] = j;
                        break;
                    }
                }
            }
            for (int i = 0; i < arrNI.Length; i++)
            {
                for (int j = 0; j < arrU.Length; j++)
                {
                    if (arrU[j].name == lNU[i])
                    {
                        arrNI[i] = j;
                        break;
                    }
                }
            }
            string[,] matrFunc = new string[p, n];
            for (int i = 0; i < p; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    matrFunc[i, j] = dgvU[j + 2, arrI[i]].Value.ToString();
                }
            }
            double[][] arrC = new double[n][];
            for (int j = 0; j < n; j++)
            {
                arrC[j] = new double[p + 1];
                double s = arrCoeff[j][0];
                for (int i = 0; i < arrU.Length; i++)
                {
                    for (k = 0; k < p; k++)
                    {
                        if (arrI[k] == i)
                        {
                            break;
                        }
                    }
                    if (k < p)
                    {
                        arrC[j][k + 1] = arrCoeff[j][i + 1];
                    }
                    else
                    {
                        for (k = 0; k < p; k++)
                        {
                            if (arrNI[k] == i)
                            {
                                break;
                            }
                        }
                        s += arrCoeff[j][i + 1] * F(ef.arr[k], dgvU[j + 2, i].Value.ToString());
                    }
                }
                arrC[j][0] = s;
            }
            double[] arrUMin = new double[p], arrUMax = new double[p], arrUSMin = new double[p];
            for (int i = 0; i < p; i++)
            {
                arrUMin[i]  = double.Parse(dgvUParam[1, arrI[i]].Value.ToString());
                arrUMax[i]  = double.Parse(dgvUParam[2, arrI[i]].Value.ToString());
                arrUSMin[i] = double.Parse(dgvUParam[3, arrI[i]].Value.ToString());
            }
            double[] arrYOpt = new double[n], arrYMin = new double[n], arrYMax = new double[n], arrAlpha = new double[n];
            for (int i = 0; i < n; i++)
            {
                arrYOpt[i]  = double.Parse(dgvQParam[4, i].Value.ToString());
                arrYMin[i]  = double.Parse(dgvQParam[2, i].Value.ToString());
                arrYMax[i]  = double.Parse(dgvQParam[3, i].Value.ToString());
                arrAlpha[i] = double.Parse(dgvQParam[1, i].Value.ToString());
            }
            double          R    = double.Parse(tbR.Text);
            HJInitialParams init = new HJInitialParams(double.Parse(tbDU.Text), double.Parse(tbDF.Text),
                                                       arrCoeff, matrFunc, arrUMin, arrUMax, arrUSMin, arrYOpt, arrYMin, arrYMax, arrAlpha, R);
            int iterNum = 0;
            List <HJIteration> lIter = new List <HJIteration>();

            double[] arrX = new double[2 * p], arrXDelta = new double[2 * p];
            double   xEps = double.Parse(tbDU.Text);

            for (int i = 0; i < 2 * p; i++)
            {
                arrX[i]      = 0.5;
                arrXDelta[i] = xEps;
            }
            HJIteration it  = new HJIteration(arrX, arrXDelta);
            HJOptimizer opt = new HJOptimizer();

            opt.Initialize(init);
            //double C = double.Parse(tbC.Text);
            double f = double.MaxValue, fEps = double.Parse(tbDF.Text);

            rep += "ОПТИМИЗАЦИЯ МЕТОДОМ ХУКА-ДЖИВСА<br><table border = 1 cellspacing = 0><tr>";
            for (int i = 0; i < p; i++)
            {
                rep += "<td>" + lU[i];
            }
            rep += "<td>Целевая функция";
            rep += it.ToHtml(init, 3);
            //do
            {
                do
                {
                    it = (HJIteration)opt.DoIteration(it);
                    if (it == null)
                    {
                        break;
                    }
                    lIter.Add(it);
                    iterNum++;
                    rep += it.ToHtml(init, 3);
                }while (iterNum < 1000);
                //double FNext = lIter.Last().fRes;
                //if (Math.Abs(FNext - f) < fEps)
                //    break;
                //f = FNext;
                //R *= C;
                //init = new HJInitialParams(double.Parse(tbDU.Text), double.Parse(tbDF.Text),
                //    arrCoeff, matrFunc, arrUMin, arrUMax, arrUSMin, arrYOpt, arrYMin, arrYMax, arrAlpha, R);
                //it = new HJIteration(lIter.Last().arrX, arrXDelta);
            }
            //while (true);
            rep += "</table><br>";
            rep += "РЕЗУЛЬТАТЫ ОПТИМИЗАЦИИ<br>";
            for (int i = 0; i < p; i++)
            {
                rep += string.Format("m<sub>{0}</sub> = {1:f4}<br>", i + 1, lIter.Last().arrX[i]);
            }
            Random rnd = new Random();

            for (int i = 0; i < p; i++)
            {
                rep += string.Format("s<sub>{0}</sub> = {1:f4}<br>", i + 1, lIter.Last().arrX[i + p]);
            }
            rep += string.Format("<br>Целевая функция:<br>F = {0:f4}<br>", init.GetFuncValue(lIter.Last().arrX));

            rep += "<br>Значения параметров распределений показателей качества<br>";
            for (int i = 0; i < n; i++)
            {
                rep += string.Format("mu<sub>{0}</sub> = {1:f4}<br>", i + 1, init.arrMu[i]);
                rep += string.Format("sigma<sub>{0}</sub> = {1:f4}<br>", i + 1, init.arrSigma[i]);
            }
            rep += "<br>Значения показателей качества<br>";
            for (int i = 0; i < n; i++)
            {
                rep += string.Format("y<sub>{0}</sub> = {1:f4}<br>", i + 1, init.arrY[i]);
            }
            rep += "<br>Технологические факторы до и после оптимизации<br>";
            rep += "Нормированные средние значения до и после оптимизации<table border = 1 cellspacing = 0><tr>" +
                   "<td>Величина<td>Среднее до оптимизации<td>Среднее после оптимизации";
            for (int i = 0; i < p; i++)
            {
                rep += string.Format("<tr><td>{0}<td>{1:f4}<td>{2:f4}", arrU[i].name, 0,
                                     lIter.Last().arrX[i]);
            }
            rep += "</table><br>Средние значения до и после оптимизации<table border = 1 cellspacing = 0><tr>" +
                   "<td>Величина<td>Среднее до оптимизации<td>Среднее после оптимизации";
            for (int i = 0; i < p; i++)
            {
                rep += string.Format("<tr><td>{0}<td>{1:f4}<td>{2:f4}", arrU[i].name, arrU[i].Inv(0),
                                     arrU[i].Inv(lIter.Last().arrX[i]));
            }
            rep += "</table><br>Нормированные средние квадратические отклонения до и после оптимизации<table border = 1 cellspacing = 0><tr>" +
                   "<td>Величина<td>СКО до оптимизации<td>СКО после оптимизации";
            for (int i = 0; i < p; i++)
            {
                rep += string.Format("<tr><td>{0}<td>{1:f4}<td>{2:f4}", arrU[i].name, 1,
                                     lIter.Last().arrX[p + i]);
            }
            rep += "</table><br>Средние квадратические отклонения до и после оптимизации<table border = 1 cellspacing = 0><tr>" +
                   "<td>Величина<td>СКО до оптимизации<td>СКО после оптимизации";
            for (int i = 0; i < p; i++)
            {
                rep += string.Format("<tr><td>{0}<td>{1:f4}<td>{2:f4}", arrU[i].name, arrU[i].sigma,
                                     arrU[i].sigma * lIter.Last().arrX[p + i]);
            }
            rep += "</table>";

            rep += "<br>Показатели качества до и после оптимизации<br>";
            rep += "Нормированные средние значения до и после оптимизации<table border = 1 cellspacing = 0><tr>" +
                   "<td>Величина<td>Среднее до оптимизации<td>Среднее после оптимизации";
            for (int i = 0; i < n; i++)
            {
                rep += string.Format("<tr><td>{0}<td>{1:f4}<td>{2:f4}", arrQ[i].name, 0,
                                     init.arrMu[i]);
            }
            rep += "</table><br>Средние значения до и после оптимизации<table border = 1 cellspacing = 0><tr>" +
                   "<td>Величина<td>Среднее до оптимизации<td>Среднее после оптимизации";
            for (int i = 0; i < n; i++)
            {
                rep += string.Format("<tr><td>{0}<td>{1:f4}<td>{2:f4}", arrQ[i].name, arrQ[i].Inv(0),
                                     arrQ[i].Inv(init.arrMu[i]));
            }
            rep += "</table><br>Нормированные средние квадратические отклонения до и после оптимизации<table border = 1 cellspacing = 0><tr>" +
                   "<td>Величина<td>СКО до оптимизации<td>СКО после оптимизации";
            for (int i = 0; i < n; i++)
            {
                rep += string.Format("<tr><td>{0}<td>{1:f4}<td>{2:f4}", arrQ[i].name, 1,
                                     init.arrSigma[i]);
            }
            rep += "</table><br>Средние квадратические отклонения до и после оптимизации<table border = 1 cellspacing = 0><tr>" +
                   "<td>Величина<td>СКО до оптимизации<td>СКО после оптимизации";
            for (int i = 0; i < n; i++)
            {
                rep += string.Format("<tr><td>{0}<td>{1:f4}<td>{2:f4}", arrQ[i].name, arrQ[i].sigma,
                                     arrQ[i].sigma * init.arrSigma[i]);
            }
            rep += "</table>";

            List <Sample> lSmp = new List <Sample>();

            for (int i = 1; i < arrQ.Length; i++)
            {
                lSmp.Add(new Sample(arrQ[i].name, string.Format("y{0}", i + 1), arrQ[i].arr));
            }
            lSmp.AddRange(arrSmp);
            Regression reg = new Regression(new Sample(arrQ[0].name, "y0", arrQ[0].arr), lSmp.ToArray());

            rep += reg.GetCorrReport();
            ResForm rf = new ResForm(rep);

            rf.Show();
            List <double[]> lArr = new List <double[]>();
            List <string>   lName = new List <string>();
            List <double>   lMu = new List <double>(), lSigma = new List <double>();

            for (int i = 0; i < arrU.Length; i++)
            {
                lName.Add(arrU[i].name);
                lMu.Add(arrU[i].Inv(lIter.Last().arrX[i]));
                lSigma.Add(arrU[i].sigma * lIter.Last().arrX[i + p]);
                double[] arr = new double[arrU[i].arr.Length];
                for (int j = 0; j < arr.Length; j++)
                {
                    arr[j] = arrU[i].Inv(arrU[i].arr[j]);
                }
                lArr.Add(arr);
            }
            for (int i = 0; i < arrQ.Length; i++)
            {
                lName.Add(arrQ[i].name);
                lMu.Add(arrQ[i].Inv(init.arrMu[i]));
                lSigma.Add(arrQ[i].sigma * init.arrSigma[i]);
                double[] arr = new double[arrQ[i].arr.Length];
                for (int j = 0; j < arr.Length; j++)
                {
                    arr[j] = arrQ[i].Inv(arrQ[i].arr[j]);
                }
                lArr.Add(arr);
            }
            DistForm df = new DistForm(lName.ToArray(), lArr.ToArray(), lMu.ToArray(), lSigma.ToArray());

            df.Show();
        }
Exemple #4
0
        void btnOpt_Click(object sender, EventArgs e)
        {
            Variable[] arrQ, arrU;
            Import(out arrQ, out arrU);
            Sample[]   arrSmp   = new Sample[arrU.Length];
            double[][] arrCoeff = new double[arrQ.Length][];
            for (int i = 0; i < arrU.Length; i++)
            {
                arrSmp[i] = new Sample(arrU[i].name, arrU[i].id, arrU[i].arr);
            }
            for (int i = 0; i < arrQ.Length; i++)
            {
                Sample[] arrTSmp = new Sample[arrSmp.Length];
                for (int j = 0; j < arrTSmp.Length; j++)
                {
                    arrTSmp[j] = new TranSample(arrSmp[j], dgvU[i + 1, j].Value.ToString());
                }
                Sample     smp = new Sample(arrQ[i].name, arrQ[i].id, arrQ[i].arr);
                Regression r   = new Regression(smp, arrSmp);
                arrCoeff[i] = r.arrB;
            }
            string[][] arrF = new string[arrQ.Length][];
            for (int i = 0; i < arrF.Length; i++)
            {
                arrF[i] = new string[arrU.Length];
                for (int j = 0; j < arrU.Length; j++)
                {
                    arrF[i][j] = dgvU[i + 1, j].Value.ToString();
                }
            }
            int[] arrN = new int[arrQ.Length + arrU.Length];
            for (int i = 0; i < arrN.Length; i++)
            {
                arrN[i] = int.Parse(dgvParam[1, i].Value.ToString());
            }
            double[,] mData = Data(arrQ, arrU, arrN);
            int      iQ = int.Parse(tbIQ.Text), N = int.Parse(tbN.Text);
            double   eMin = double.Parse(tbEMin.Text), eMax = double.Parse(tbEMax.Text);
            DataForm df = new DataForm(mData, arrU.Length, iQ, arrU, arrQ[iQ]);

            df.ShowDialog();
            int             iOpt = df.listBox1.SelectedIndex;
            List <double[]> listArrE = new List <double[]>(), listArrV = new List <double[]>();
            List <int>      lIndex = new List <int>();

            for (int i = 0; i < N; i++)
            {
                double[] arr1, arr2;
                lIndex.Add(Calc(arrCoeff, arrF, mData, iOpt, iQ, eMin, eMax, out arr1, out arr2));
                listArrE.Add(arr1);
                listArrV.Add(arr2);
            }
            ResDataForm rf = new ResDataForm(mData, arrU.Length, iQ, arrU, arrQ[iQ], iOpt, lIndex.ToArray(), listArrE, listArrV);

            rf.ShowDialog();
            List <Variable> listV = new List <Variable>(arrU);

            listV.AddRange(arrQ);
            HistForm hf = new HistForm(listV.ToArray(), mData, lIndex.ToArray(), arrN);

            hf.ShowDialog();

            /*string rep = "";
             * Variable[] arrQ, arrU;
             * Import(out arrQ, out arrU);
             * Sample[] arrSmp = new Sample[arrU.Length];
             * double[][] arrCoeff = new double[arrQ.Length][];
             * for (int i = 0; i < arrU.Length; i++)
             *  arrSmp[i] = new Sample(arrU[i].name, arrU[i].id, arrU[i].arr);
             * for (int i = 0; i < arrQ.Length; i++)
             * {
             *  Sample[] arrTSmp = new Sample[arrSmp.Length];
             *  for (int j = 0; j < arrTSmp.Length; j++)
             *      arrTSmp[j] = new TranSample(arrSmp[j], dgvU[i + 1, j].Value.ToString());
             *  Sample smp = new Sample(arrQ[i].name, arrQ[i].id, arrQ[i].arr);
             *  Regression r = new Regression(smp, arrSmp);
             *  arrCoeff[i] = r.arrB;
             *  rep += r.GetRegReport() + "<br>";
             * }
             * string[] arrStage = new string[dgvStage.Rows.Count - 1];
             * for (int i = 0; i < arrStage.Length; i++)
             *  arrStage[i] = dgvStage[0, i].Value.ToString();
             * StageForm sf = new StageForm(arrStage);
             * sf.ShowDialog();
             * List<string> lNU = new List<string>(), lU = new List<string>();
             * int k;
             * for (k = 0; k < arrStage.Length; k++)
             *  if (sf.stage == arrStage[k])
             *      break;
             *  else
             *      lNU.AddRange(dgvStage[1, k].Value.ToString().Split(new char[] { ' ', ',' },
             *          StringSplitOptions.RemoveEmptyEntries));
             * ExpForm ef = new ExpForm(lNU.ToArray());
             * ef.ShowDialog();
             * for (int i = 0; i < arrU.Length; i++)
             *  if (!lNU.Contains(arrU[i].name))
             *      lU.Add(arrU[i].name);
             * int p = lU.Count, n = arrQ.Length;
             * int[] arrI = new int[p], arrNI = new int[arrU.Length - p];
             * for (int i = 0; i < p; i++)
             *  for (int j = 0; j < arrU.Length; j++)
             *      if (arrU[j].name == lU[i])
             *      {
             *          arrI[i] = j;
             *          break;
             *      }
             * for (int i = 0; i < arrNI.Length; i++)
             *  for (int j = 0; j < arrU.Length; j++)
             *      if (arrU[j].name == lNU[i])
             *      {
             *          arrNI[i] = j;
             *          break;
             *      }
             * string[,] matrFunc = new string[p, n];
             * for (int i = 0; i < p; i++)
             *  for (int j = 0; j < n; j++)
             *      matrFunc[i, j] = dgvU[j + 1, arrI[i]].Value.ToString();
             * double[][] arrC = new double[n][];
             * for (int j = 0; j < n; j++)
             * {
             *  arrC[j] = new double[p + 1];
             *  double s = arrCoeff[j][0];
             *  for (int i = 0; i < arrU.Length; i++)
             *  {
             *      for (k = 0; k < p; k++)
             *          if (arrI[k] == i)
             *              break;
             *      if (k < p)
             *          arrC[j][k + 1] = arrCoeff[j][i + 1];
             *      else
             *      {
             *          for (k = 0; k < p; k++)
             *              if (arrNI[k] == i)
             *                  break;
             *          s += arrCoeff[j][i + 1] * F(ef.arr[k], dgvU[j + 1, i].Value.ToString());
             *      }
             *  }
             *  arrC[j][0] = s;
             * }
             * double[] arrUMin = new double[p], arrUMax = new double[p], arrUSMin = new double[p];
             * for (int i = 0; i < p; i++)
             * {
             *  arrUMin[i] = double.Parse(dgvParam[1, arrI[i]].Value.ToString());
             *  arrUMax[i] = double.Parse(dgvParam[2, arrI[i]].Value.ToString());
             *  arrUSMin[i] = double.Parse(dgvParam[3, arrI[i]].Value.ToString());
             * }
             * double[] arrMuOpt = new double[n], arrSigmaOpt = new double[n], arrAlpha = new double[n];
             * for (int i = 0; i < n; i++)
             * {
             *  arrMuOpt[i] = double.Parse(dgvQParam[1, i].Value.ToString());
             *  arrSigmaOpt[i] = double.Parse(dgvQParam[2, i].Value.ToString());
             *  arrAlpha[i] = double.Parse(dgvQParam[3, i].Value.ToString());
             * }
             * double R = double.Parse(tbN.Text);
             * HJInitialParams init = new HJInitialParams(double.Parse(tbEMax.Text), double.Parse(tbDF.Text),
             *  arrCoeff, matrFunc, arrUMin, arrUMax, arrUSMin, arrMuOpt, arrSigmaOpt, arrAlpha, R);
             * int iterNum = 0;
             * List<HJIteration> lIter = new List<HJIteration>();
             * double[] arrX = new double[2 * p], arrXDelta = new double[2 * p];
             * double xEps = double.Parse(tbEMax.Text);
             * for (int i = 0; i < 2 * p; i++)
             *          {
             *  arrX[i] = 0.5;
             *  arrXDelta[i] = xEps;
             *          }
             * HJIteration it = new HJIteration(arrX, arrXDelta);
             * HJOptimizer opt = new HJOptimizer();
             * opt.Initialize(init);
             * double C = double.Parse(tbEMin.Text);
             * double f = double.MaxValue, fEps = double.Parse(tbDF.Text);
             * rep += "ОПТИМИЗАЦИЯ МЕТОДОМ ХУКА-ДЖИВСА<br>";
             * do
             * {
             *  do
             *  {
             *      it = (HJIteration)opt.DoIteration(it);
             *      if (it == null)
             *          break;
             *      lIter.Add(it);
             *      iterNum++;
             *      rep += it.ToHtml(init, 3);
             *  }
             *  while (iterNum < 100);
             *  double FNext = lIter.Last().fRes;
             *  if (Math.Abs(FNext - f) < fEps)
             *      break;
             *  f = FNext;
             *  R *= C;
             *  init = new HJInitialParams(double.Parse(tbEMax.Text), double.Parse(tbDF.Text),
             *      arrCoeff, matrFunc, arrUMin, arrUMax, arrUSMin, arrMuOpt, arrSigmaOpt, arrAlpha, R);
             *  it = new HJIteration(lIter.Last().arrX, arrXDelta);
             * }
             * while (true);
             * rep += "РЕЗУЛЬТАТЫ ОПТИМИЗАЦИИ<br>";
             * for (int i = 0; i < p; i++)
             *  rep += string.Format("m{0} = {1:g4}<br>", i + 1, lIter.Last().arrX[i]);
             * Random rnd = new Random();
             * for (int i = 0; i < p; i++)
             *  rep += string.Format("s{0} = {1:g4}<br>", i + 1, Math.Abs(lIter.Last().arrX[i + p]));
             * rep += string.Format("<br>Целевая функция:<br>F = {0:g4}", init.GetFuncValue(lIter.Last().arrX));//rnd.Next(100) / 100.0);
             *
             * rep += "<br>Значения параметров распределений показателей качества<br>";
             * for (int i = 0; i < n; i++)
             * {
             *  rep += string.Format("mu{0} = {1:g4}<br>", i + 1, arrMuOpt[i] + rnd.Next(0, 100) / 1000.0);
             *  rep += string.Format("sigma{0} = {1:g4}<br>", i + 1, arrSigmaOpt[i] + rnd.Next(0, 100) / 1000.0);
             * }
             * ResForm rf = new ResForm(rep);
             * rf.Show();*/
        }