Почему никакие изменения не выполняются в w[I, j] с циклом while?
Привет Я написал следующий код, но цикл while не оказывает никакого влияния на w[i,j]
что в этом плохого?
помогите мне пожалуйста
спасибо
Что я уже пробовал:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace xxxxxxx { class Program { static void Main(string[] args) { int[,] x = new int[,] { { 1, 1 }, { 1, -1 }, { -1, 1 } }; int[] t = new int[] { -1, 1, 1 }; double[,] w = new double[,] { { 0.05, 0.1 }, { 0.2, 0.2 }, { 0.5, 0.5 } }; double[] b = new double[] { 0.3, 0.15, 0.5 }; bool ep = true; int x1; int x2; double zin1; double zin2; int z1; int z2; double yin; int y; int pp = 0; while (pp < 15) { //ep = false; for (int j = 0; j < 3; j = j + 1) { x1 = x[j, 0]; x2 = x[j, 1]; zin1 = b[0] + (x1 * w[0, 0]) + (x2 * w[1, 0]); zin2 = b[1] + (x1 * w[0, 1]) + (x2 * w[1, 1]); if (zin1 >= 0) { z1 = 1; } else { z1 = -1; } if (zin2 >= 0) { z2 = 1; } else { z2 = -1; } yin = b[2] + z1 * w[2, 0] + z2 * w[2, 1]; if (yin >= 0) { y = 1; } else { y = -1; } if (y != t[j]) { //ep = true; if (t[j] == 1) { if (Math.Abs(zin1) < Math.Abs(zin2)) { b[0] = b[0] + 0.5 * (1 - zin1); w[0, 0] = w[0, 0] + 0.5 * (1 - zin1) * x1; w[1, 0] = w[1, 0] + 0.5 * (1 - zin1) * x2; } else { b[1] = b[1] + 0.5 * (1 - zin2); w[0, 1] = w[0, 1] + 0.5 * (1 - zin2) * x1; w[1, 1] = w[1, 1] + 0.5 * (1 - zin2) * x2; } } else if(t[j] == -1) { if (zin1 > 0 && zin2 > 0) { b[0] = b[0] + 0.5 * (-1 - zin1); w[0, 0] = w[0, 0] + 0.5 * (-1 - zin1) * x1; w[1, 0] = w[1, 0] + 0.5 * (-1 - zin1) * x2; b[1] = b[1] + 0.5 * (-1 - zin2); w[0, 1] = w[0, 1] + 0.5 * (-1 - zin2) * x1; w[1, 1] = w[1, 1] + 0.5 * (-1 - zin2) * x2; } else if (zin1 > 0 && zin2 <= 0) { b[0] = b[0] + 0.5 * (-1 - zin1); w[0, 0] = w[0, 0] + 0.5 * (-1 - zin1) * x1; w[1, 0] = w[1, 0] + 0.5 * (-1 - zin1) * x2; } else if (zin1 < 0 && zin2 > 0) { b[1] = b[1] + 0.5 * (-1 - zin2); w[0, 1] = w[0, 1] + 0.5 * (-1 - zin2) * x1; w[1, 1] = w[1, 1] + 0.5 * (-1 - zin2) * x2; } } } } pp = pp + 1; } Console.WriteLine("b1:{0} , b2:{1} , b3:{2} \n w00:{3} , w10:{4} , w01:{5}, w11:{6}", b[0], b[1], b[2], w[0, 0], w[1, 0], w[0, 1], w[1, 1]); int[,] test = new int[,] { { -1, -1 } }; x1 = test[0, 0]; x2 = test[0, 1]; zin1 = b[0] + (x1 * w[0, 0]) + (x2 * w[1, 0]); zin2 = b[1] + (x1 * w[0, 1]) + (x2 * w[1, 1]); if (zin1 >= 0) z1 = 1; else z1 = -1; if (zin2 >= 0) z2 = 1; else z2 = -1; yin = b[2] + w[2, 0] * z1 + w[2, 1] * z2; if (yin >= 0) y = 1; else y = -1; if (y == 1) { Console.WriteLine("1"); } else { Console.WriteLine("-1"); } Console.ReadLine(); } //private static void f(double zin, int y) // { // if (zin >= 0) // y = 1; // else // y = -1; // } } }
W∴ Balboos, GHB
Я настоятельно рекомендую вам пройти через ваш код с помощью отладчика и посмотреть,попытается ли он вообще что-нибудь сделать с w[i, j]. Если нет, то почему?