示例#1
0
        }//от алгоритма

        ///что делать с выходным значением??type[]
        public void AlgorithmW(double[][] a, Neiron w0, double nu2, double y, int window)
        {
            Random rand = new Random();

            double[,] temp = new double[k + 1, k]; // хранит частные производные

            int    t    = 0;
            int    i_av = 0;
            double buff = 0;

            do
            {
                double[] x = a[i_av];
                x = Neiron.Norma(x);
                i_av++;


                //определение частных производных
                for (int q = 0; q < 4; q++)
                {
                    ///////вместо x.type должен быть выходной вектор temp[0, q] = Neiron.F(net, w0, x, k, q,window) - x.type[q];
                    temp[0, q] = Neiron.F(net, w0, x, k, q, window) - y;
                }

                for (int i = 0; i < k; i++)
                {
                    for (int q = 0; q < 4; q++)
                    {
                        temp[i + 1, q] = (Neiron.F(net, w0, x, k, q, window) - x.type[q]) * (Neiron.Fi(x, net[i], window));
                    }
                }

                //коррекция весов

                for (int q = 0; q < k; q++)
                {
                    w0.setW(q, w0.getW(q) - nu2 * temp[0, q]);
                }

                for (int i = 0; i < k; i++)
                {
                    for (int q = 0; q < k; q++)
                    {
                        net[i].setW(q, net[i].getW(q) - nu2 * temp[i + 1, q]);
                    }
                }
                t++;
                buff = Neiron.F(net, w0, x, k, 0, window) - x.type[0];
                for (int q = 0; q < 4; q++)
                {
                    if ((Neiron.F(net, w0, x, k, q, window) - x.type[q]) > buff)
                    {
                        buff = Neiron.F(net, w0, x, k, q, window) - x.type[q];
                    }
                }
                double h = buff * buff / 2;
                //лейбл!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                form.label19.Text = h.ToString();
            }while (t < window * k && ((buff * buff / 2) > eps));
        }
示例#2
0
        public static double F(Neiron[] net, Neiron w0, double[] x, int k, int q, int window)// это y
        {
            double sum = 0;

            for (int i = 0; i < k; i++)
            {
                sum += net[i].getW(q) * Fi(x, net[i], window);
                //q++;
            }

            sum += w0.getW(q);
            return(sum);
        }