}//от алгоритма ///что делать с выходным значением??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)); }
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); }