Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовик ЭВМиВС мой.doc
Скачиваний:
2
Добавлен:
15.09.2019
Размер:
2.63 Mб
Скачать

Заключение

Разработанная программа соответствует заданным на этапе проектирования требованиям. Во время работы над программой были улучшены навыки программирования на языке С#, а также навыки программирования микроконтроллеров. Была исследована модель нейросети созданная на микроконтроллере, которая показала хорошие результаты.

В качестве перспектив развития данной темы можно отметить такие нереализованные возможности как обучение непосредственно на микроконтроллере, подключение датчиков для формирования входных значений и непосредственное применение в какой-либо области робототехники.

Список литературы

  1. Павловская Т.А. C#. Программирование на языке высокого уровня. СПб. : Питер, 2007.

  2. Фролов А. В., Фролов Г. В. Язык С#. Самоучитель. М: ДИАЛОГ-МИФИ, 2003.- 560с.

  3. STM32F405xx, STM32F407xx, STM32F415xx and STM32F417xx advanced ARM-based 32-bit MCUs – Datasheet.

  4. ГОСТ 2.105-95 Единая система конструкторской документации. Общие требования к текстовым документам.

  5. ГОСТ 19.504-79 (СТ СЭВ 2095-80). Руководство программиста. Требования к содержанию и оформлению.

  6. ГОСТ 19.701-90 (ИСО 5807-85). ЕСПД. Схемы алгоритмов, программ, данных и систем.

Приложение а Текст программы на пк.

Текст программы файла Form1.cs представлен на рисунке А.1.

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

using System.Threading;

using System.IO;

using System.IO.Ports;

namespace курсовой_титп_2

{

public partial class Form1 : Form

{

public double[] x1, x2, r;

Random number = new Random();

Neyro nr;

public bool flag = false; //флаг создания нейросети

public bool fl_pot = false; //флаг работы потоков

public Thread pp;

public Thread pp1;

public DateTime dd;

public int mx = 5, my = 100; //Масштаб

public System.Drawing.Graphics graphicsObj;

public Pen myPen1 = new Pen(System.Drawing.Color.Red, 1);

public Pen myPen2 = new Pen(System.Drawing.Color.Black, 1);

public static SerialPort sp = new SerialPort(); // com port

public bool flag_connect = false; //флаг соединения по ком порту

public Thread readThread; //поток чтения ком портаъ

public Form1()

{

this.x1 = new double[200]; //числа первого класса

this.x2 = new double[200]; //числа второго класса

this.r = new double[6]; //рандомные числа

double sum_r = 0;

for(int i=0; i<200;i++)

{

for (int j = 0; j < 6; j++)

{

r[j] = number.NextDouble();

sum_r += r[j];

}

x1[i] = (sum_r - 3) / Math.Sqrt(0.5);

x1[i] = Math.Round(x1[i],3)+2.5;

x2[i] = x1[i] + 7.5;

Рисунок А.1 – Текст программы файла Form1.cs.

Продолжение приложения А

sum_r = 0;

}

InitializeComponent();

//обновление списка доступных ком портов

comboBox2.Items.AddRange(SerialPort.GetPortNames());

//установка первого доступного ком порта в список

if (SerialPort.GetPortNames().Length != 0)

{

comboBox2.Text = SerialPort.GetPortNames()[0];

}

//int aaa = sizeof(double);

}

// ///////////////////////////////////////////

// кнопка создать сеть

private void button1_Click(object sender, EventArgs e)

{

int neyr1, neyr2;

double k, skor;

flag = true;

if (textBox1.TextLength != 0)

{

neyr1 = Convert.ToInt32(textBox1.Text); //количество нейронов первого слоя

}

else

{

MessageBox.Show("Введите количество нейронов первого слоя");

return;

}

if (textBox2.TextLength != 0)

{

neyr2 = Convert.ToInt32(textBox2.Text); //количество нейронов второго слоя

}

else

{

MessageBox.Show("Введите количество нейронов второго слоя");

return;

}

if (textBox9.TextLength != 0)

{

k = Convert.ToDouble(textBox9.Text); //коэффицент сигмоида k

}

else

{

MessageBox.Show("Введите k");

return;

}

if (textBox11.TextLength != 0)

{

skor = Convert.ToDouble(textBox9.Text); //коэффицент скорости обучения

}

Рисунок А.1 – Продолжение.

Продолжение приложения А

else

{

MessageBox.Show("Введите skor");

return;

}

nr = new Neyro(neyr1, neyr2, k, skor); //вызываем конструктор класса

nr.CreateNS();

//выводим резульат нейросети

textBox3.Clear();

for(int i=0; i<neyr2;i++)

{

textBox3.AppendText(Convert.ToString(Math.Round(nr.rez[i],3)) +" ");

}

}

////////////////////////////////////////////////////////////

//кнопка сброс

private void button2_Click(object sender, EventArgs e)

{

textBox1.Clear();

textBox2.Clear();

textBox3.Clear();

textBox4.Clear();

textBox6.Clear();

textBox7.Clear();

comboBox1.Text = "";

comboBox2.Text = "";

comboBox3.Text = "";

comboBox4.Text = "";

}

// //////////////////////////////////////

// кнопка обучить 1 класс

private void button3_Click(object sender, EventArgs e)

{

string file;

//int kl = 1;

string file_osibka = "oshibka.txt";

if (flag == false)

{

MessageBox.Show("Создайте сеть");

return;

}

if (comboBox1.Text != "")

{

file = comboBox1.Text; //выбранный файл для обучения первого класса

}

Рисунок А.1 – Продолжение.

Продолжение приложения А

else

{

MessageBox.Show("Выберите файл");

return;

}

//создаем файл для вывода ошибки

FileStream fo = new FileStream(file_osibka, FileMode.Create, FileAccess.Write, FileShare.Write);

fo.Close();

StreamWriter sw1 = new StreamWriter(file_osibka, true, Encoding.Unicode);

nr.Obuchenie(file,sw1);

///////////////////////////////////////////////

//выводим результат

textBox3.Clear();

for (int i = 0; i < nr.neyr2; i++)

{

textBox3.AppendText(Convert.ToString(Math.Round(nr.rez[i],3)) + " ");

}

sw1.Close();

grafic();

}

// ////////////////////////////////////////////////

//кнопка результат

private void button4_Click(object sender, EventArgs e)

{

double err = 0;

string file;

bool[] znach = new bool[nr.neyr2];

int kl=0;

if (flag == false)

{

MessageBox.Show("Создайте сеть");

return;

}

for (int i = 0; i < nr.neyr2; i++)

{

znach[i] = false;

}

if (comboBox3.Text != "")

{

file = comboBox3.Text;

}

else

{

MessageBox.Show("Выберите файл тестовой выборки");

return;

}

Рисунок А.1 – Продолжение.

Продолжение приложения А

string[] text = File.ReadAllLines(file); //читаем содержимое файла в переменную text

for (int i = 0; i < 10; i++)

{

nr.vvod[i] = Convert.ToDouble(text[i])/10;

}

//пересчитываем результат

nr.Rez();

for (int i = 0; i < nr.neyr2; i++)

{

if (nr.rez[i] < 0.5)

znach[i] = false;

if (nr.rez[i] > 0.5)

znach[i] = true;

}

for (int i = 0; i < nr.neyr2; i++)

{

if (znach[i] == nr.ogid1[i])

{}

else goto m;

}

kl = 1;

m:

for (int i = 0; i < nr.neyr2; i++)

{

if (znach[i] == nr.ogid2[i])

{}

else goto m1;

}

kl = 2;

m1:

textBox3.Clear();

for (int i = 0; i < nr.neyr2; i++)

{

textBox3.AppendText(Convert.ToString(Math.Round(nr.rez[i],3)) + " ");

}

for (int i = 0; i < nr.neyr2; i++)

{

err = err + (nr.rez[i] - nr.ogid[i]) * (nr.rez[i] - nr.ogid[i]);

}

err = err / 2;

textBox7.Clear();

textBox7.AppendText(Convert.ToString(Math.Round(err,3)));

if (kl == 0)

{

MessageBox.Show("Класс не определен");

}

if (kl == 1)

{

MessageBox.Show("Выборка относится к первому классу");

}

Рисунок А.1 – Продолжение.

Продолжение приложения А

if (kl == 2)

{

MessageBox.Show("Выборка относится ко второму классу");

}

}

// ////////////////////////////////////////////////////////

// Кнопка Старт для экзамена

private void button7_Click(object sender, EventArgs e)

{

string file;

bool[] znach = new bool[nr.neyr2];

int kl = 0;

int kl_opr = 0;

double procent = 0;

double kol = 0;

if (flag == false)

{

MessageBox.Show("Создайте сеть");

return;

}

for (int i = 0; i < nr.neyr2; i++)

{

znach[i] = false;

}

if (comboBox4.Text != "")

{

file = comboBox4.Text;

}

else

{

MessageBox.Show("Выберите файл экзаменационной выборки");

return;

}

if (file[0] == '1' || file[0] == '4')

{

kl = 1;

}

if (file[0] == '2' || file[0] == '3')

{

kl = 2;

}

string[] text = File.ReadAllLines(file); //читаем содержимое файла в переменную text

double[,] chisla = new double[text.Length / 10, 10];

//вносим в матрицу chisla данные из файла

for (int i = 0; i < text.Length / 10; i++)

for (int j = 0; j < 10; j++)

{

chisla[i, j] = Convert.ToDouble(text[10 * i + j]);

}

for (int qq = 0; qq < (text.Length / 10); qq++)

{

Рисунок А.1 – Продолжение.

Продолжение приложения А

//вносим в массив vvod данные из файла

for (int i = 0; i < 10; i++)

{

nr.vvod[i] = chisla[qq, i]/10;

}

//пересчитываем результат

nr.Rez();

for (int i = 0; i < nr.neyr2; i++)

{

if (nr.rez[i] < 0.5)

znach[i] = false;

if (nr.rez[i] > 0.5)

znach[i] = true;

}

for (int i = 0; i < nr.neyr2; i++)

{

if (znach[i] == nr.ogid1[i])

{ }

else goto m;

}

kl_opr = 1;

m:

for (int i = 0; i < nr.neyr2; i++)

{

if (znach[i] == nr.ogid2[i])

{ }

else goto m1;

}

kl_opr = 2;

m1: ;

if (kl == kl_opr)

{

kol++;

}

procent = kol / 20;

procent = procent * 100;

textBox4.Clear();

textBox4.AppendText(Convert.ToString(procent));

}

}

////////////////////////////////////////

//кнопка выход

private void button8_Click(object sender, EventArgs e)

{

if (fl_pot)

{

pp1.Abort();

pp.Abort();

}

if (sp.IsOpen)

{

flag_connect = false;

Рисунок А.1 – Продолжение.

Продолжение приложения А

readThread.Join();

sp.Close();

}

Application.Exit();

}

/////////////////////////////////////////////////////

//кнопка для вывода ошибок

// ///////////////////////////////////////////////////

private void button9_Click(object sender, EventArgs e)

{

System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;

pp = new Thread(pot);

pp1=new Thread(pot1);

fl_pot = true;

pp.Start();

pp1.Start();

}

// ///////////////////////////////

public void pot()

{

int neyr1 = 15, neyr2 = 4;

string[] file_osibka = new string[2000];

double k, skor=0.7;

for (int i = 0; i < 2000; i++)

{

file_osibka[i] = "err/err" + Convert.ToString(i) + ".txt";

}

//создаем файл для вывода ошибки

int ii = 0;

FileStream fo = new FileStream(file_osibka[ii], FileMode.Create, FileAccess.Write, FileShare.Write);

fo.Close();

StreamWriter sw1 = new StreamWriter(file_osibka[ii], true, Encoding.Unicode);

//for (skor = 0.1; skor < 3; skor+=0.1)

//{

for (k = 0.1; k < 5; k+=0.1)

{

nr = new Neyro(neyr1, neyr2, k,skor);

textBox5.Clear();

textBox5.AppendText("k=" + Convert.ToString(k) + ";skor=" + Convert.ToString(skor));

//создаем сеть

nr.CreateNS();

//обучение

Рисунок А.1 – Продолжение.

Продолжение приложения А

nr.Obuchenie("1-100.txt", sw1);

//sw1.Close();

//ii++;

grafic();

}

//}

sw1.Close();

//sw1.WriteLine();

//sw1.WriteLine("Время - " + dd.ToLongTimeString());

//sw1.Close();

fl_pot = false;

textBox5.Text = "Все";

MessageBox.Show("Поток завершен", "Все", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);

}

public void pot1()

{

dd = new DateTime(1, 1, 1, 0, 0, 0);

//time = 0;

while (fl_pot)

{

textBox8.Clear();

textBox8.AppendText(dd.ToLongTimeString());

Thread.Sleep(1000);

dd = dd.AddSeconds(1);

}

}

// /////////////////////////////////////////////////

// Функция рисующая график

// ///////////////////////////////

private void grafic()

{

int i = 0;

graphicsObj = this.CreateGraphics();

graphicsObj.Clear(System.Drawing.SystemColors.Control);

textBox10.Clear();

graphicsObj.DrawLine(myPen2, 480, 250, 1000, 250);

graphicsObj.DrawLine(myPen2, 500, 30, 500, 270);

for (int xx = 1; xx < 20; xx++)

{

delenie(xx, xx, 0.2, -0.2, (mx*5));

}

for (double yy = -2; yy <= 0; yy++)

{

delenie(0.05, -0.05, yy, yy, my);

}

for (i = 0; i < 99; i++)

{

graphicsObj.DrawLine(myPen1, m_x(i), m_y(nr.err_m[i]), m_x((i) + 1), m_y(nr.err_m[i + 1]));

textBox10.AppendText(Convert.ToString(i) + " " + Convert.ToString(Math.Round(nr.err_m[i],5)));

textBox10.AppendText("\r\n");

Рисунок А.1 – Продолжение.

Продолжение приложения А

}

textBox10.AppendText(Convert.ToString(99) + " " + Convert.ToString(Math.Round(nr.err_m[99], 5)));

}

private float m_x(double a)

{

float b;

b = Convert.ToInt32(a * mx + 500);

return b;

}

private float m_y(double a)

{

float b;

b = Convert.ToInt32(a * (-1) * my + 250);

return b;

}

private void delenie(double x1, double x2, double y1, double y2, int m)

{

x1 = x1 * m + 500;

x2 = x2 * m + 500;

y1 = y1 * m + 250;

y2 = y2 * m + 250;

graphicsObj.DrawLine(myPen2, Convert.ToInt32(x1), Convert.ToInt32(y1), Convert.ToInt32(x2), Convert.ToInt32(y2));

}

//////////////////////////////////////////////////////////////////

// Кнопка соединения через ком порт Connect/Disconnect

//////////////////////////////////////////////////////////////////

private void button10_Click(object sender, EventArgs e)

{

if (!flag_connect)

{

sp.PortName = comboBox2.Text;

sp.BaudRate = 9600;

sp.Parity = Parity.None;

sp.DataBits = 8;

sp.StopBits = StopBits.One;

// Set the read/write timeouts

sp.ReadTimeout = 500;

sp.WriteTimeout = 500;

sp.Open();

label19.Text = sp.PortName;

textBox12.Clear();

button10.Text = "Disconnect";

flag_connect = true;

readThread = new Thread(Read);

readThread.Start();

return;

}

if (flag_connect)

{

flag_connect = false;

Рисунок А.1 – Продолжение.

Продолжение приложения А

readThread.Join();

sp.Close();

label19.Text = "—";

button10.Text = "Connect";

return;

}

}

//////////////////////////////////////////////////////////////////

// Поток для чтения

//////////////////////////////////////////////////////////////////

public void Read()

{

while (flag_connect)

{

try

{

string message = sp.ReadLine();

textBox12.AppendText(message);

}

catch (TimeoutException) { }

}

}

//////////////////////////////////////////////////////////////////

// Кнопка Refresh

//////////////////////////////////////////////////////////////////

private void button11_Click(object sender, EventArgs e)

{

comboBox2.Items.Clear();

comboBox2.Items.AddRange(SerialPort.GetPortNames());

}

//////////////////////////////////////////////////////////////////

// Кнопка Передать коэффициенты

//////////////////////////////////////////////////////////////////

private void button6_Click(object sender, EventArgs e)

{

int count_ves_k = 0; //кол-во весовых коэффициентов

if (flag == false)

{

MessageBox.Show("Создайте сеть");

return;

}

count_ves_k = 10 * nr.neyr1 + nr.neyr1 * nr.neyr2;

string[] mas = new string[count_ves_k];

int i = 0;

//Заполнение массива из матрицы w1

for (int q = 0; q < 10; q++)

{

for (int p = 0; p < nr.neyr1; p++)

{

mas[i] = Convert.ToString(Math.Round(nr.w1[q, p],10));

i++;

Рисунок А.1 – Продолжение.

Продолжение приложения А

}

}

//Заполнение массива из матрицы w2

for (int q = 0; q < nr.neyr1; q++)

{

for (int p = 0; p < nr.neyr2; p++)

{

mas[i] = Convert.ToString(Math.Round(nr.w2[q, p], 10));

i++;

}

}

if (sp.IsOpen)

{

sp.WriteLine("w"); //для передачи коэффициентов

for (i = 0; i < count_ves_k; i++)

{

sp.WriteLine(mas[i]);

Thread.Sleep(100);

}

}

else

{

textBox12.Text = "Порт не подключен";

}

}

//////////////////////////////////////////////////////////////////

// Событие при закрытии формы

//////////////////////////////////////////////////////////////////

private void Form1_FormClosing(object sender, FormClosingEventArgs e)

{

if (flag_connect)

{

flag_connect = false;

readThread.Join();

sp.Close();

}

}

//////////////////////////////////////////////////////////////////

// Кнопка Sendto MC

//////////////////////////////////////////////////////////////////

private void button12_Click(object sender, EventArgs e)

{

string file;

if (flag == false)

{

MessageBox.Show("Создайте сеть");

return;

}

if (comboBox3.Text != "")

{

file = comboBox3.Text;

}

else

{

Рисунок А.1 – Продолжение.

Продолжение приложения А

MessageBox.Show("Выберите файл тестовой выборки");

return;

}

string[] text = File.ReadAllLines(file); //читаем содержимое файла в переменную text

if (sp.IsOpen)

{

sp.WriteLine("c"); //для передачи чисел

for (int i = 0; i < 10; i++)

{

sp.WriteLine(text[i]);

Thread.Sleep(100);

}

}

else

{

textBox12.Text = "Порт не подключен";

}

}

}

//////////////////////////////////////////////////////////////////

// Класс, который работает с нейросетью

//////////////////////////////////////////////////////////////////

public class Neyro : Form1

{

public double[] prom, vvod;

public double[,] w1, w2;

public double[] rez;

public int count1=0, count2=0;

public int neyr1, neyr2;

public int[] ogid;

public bool[] ogid1, ogid2;

public double k, skor;

public double[] err_m = new double[100];

//конструктор. при создании объекта класса задаем параметры матриц

public Neyro(int neyr1, int neyr2, double k, double skor)

{

this.neyr1 = neyr1;

this.neyr2 = neyr2;

this.k = k;

this.skor = skor;

this.ogid = new int[neyr2];

this.ogid1 = new bool[neyr2];

this.ogid2 = new bool[neyr2];

this.w1 = new double[10, neyr1];

this.w2 = new double[neyr1, neyr2];

this.prom = new double[neyr1];

this.vvod = new double[10];

this.rez = new double[neyr2];

Random number = new Random();

Рисунок А.1 – Продолжение.

Продолжение приложения А

//Заполнение матрицы весовых коэффицентов w1

for (int q = 0; q < 10; q++)

{

for (int p = 0; p < neyr1; p++)

{

w1[q, p] = number.NextDouble()-0.5;

}

}

//Заполнение матрицы весовых коэффицентов w2

for (int q = 0; q < neyr1; q++)

{

for (int p = 0; p < neyr2; p++)

{

w2[q, p] = number.NextDouble()-0.5;

}

}

ogid1[0] = false;

for (int i = 1; i < neyr2; i++)

{

if (ogid1[i - 1] == false)

ogid1[i] = true;

else ogid1[i] = false;

}

ogid2[0] = true;

for (int i = 1; i < neyr2; i++)

{

if (ogid2[i - 1] == false)

ogid2[i] = true;

else ogid2[i] = false;

}

}

//код, который будет выполняться в потоке

public void Potok1(object _Data)

{

double sum1 = 0;

for (int n = 0; n < (neyr1 / 2); n++)

{

for (int i = 0; i < 10; i++)

{

sum1 = sum1 + (vvod[i] * w1[i, n]);

}

prom[n] = Math.Round(1 / (1 + Math.Exp((-sum1)*k)), 3);

sum1 = 0;

}

count1++;

}

public void Potok2(object _Data)

{

double sum2 = 0;

for (int n = (neyr1 / 2); n < neyr1; n++)

{

Рисунок А.1 – Продолжение.

Продолжение приложения А

for (int i = 0; i < 10; i++)

{

sum2 = sum2 + (vvod[i] * w1[i, n]);

}

prom[n] = 1 / (1 + Math.Exp((-sum2)*k));

sum2 = 0;

}

count1++;

}

public void Potok3(object _Data)

{

double sum1 = 0;

for (int n = 0; n < (neyr2 / 2); n++)

{

for (int i = 0; i < neyr1; i++)

{

sum1 = sum1 + (prom[i] * w2[i, n]);

}

rez[n] = 1 / (1 + Math.Exp((-sum1)*k));

sum1 = 0;

}

count2++;

}

public void Potok4(object _Data)

{

double sum2 = 0;

for (int n = (neyr2 / 2); n < neyr2; n++)

{

for (int i = 0; i < neyr1; i++)

{

sum2 = sum2 + (prom[i] * w2[i, n]);

}

rez[n] = 1 / (1 + Math.Exp((-sum2)*k));

sum2 = 0;

}

count2++;

}

public int[] Vihod(int kol, int kl) //функция формирует ожидаемые значения

{

int a=0;

if (kl == 2 || kl==3)

a = 1;

int[]mas=new int[kol];

for (int i = 0; i < kol; i++)

{

mas[i] = a;

if (a == 0)

a = 1;

else a = 0;

}

return mas;

Рисунок А.1 – Продолжение.

Продолжение приложения А

public void Korekt() //коректировка весов матриц

{

double[] beta2 = new double[neyr2];

double[] beta1 = new double[neyr1];

//double skor = 0.5;

double summa = 0;

//ощибка выходного слоя

for (int q = 0; q < neyr2; q++)

{

beta2[q] = (ogid[q] - rez[q]) * (1 - rez[q]) * rez[q];

}

//коректировка весов матрицы w2

for (int p = 0; p < neyr1; p++)

{

for (int q = 0; q < neyr2; q++)

{

w2[p, q] = (w2[p, q] + skor * beta2[q] * prom[p]);

if (w2[p, q] == 0)

{

w2[p, q] = 0.1;

}

}

}

//ошибка промежуточного слоя

summa = 0;

for (int q = 0; q < neyr1; q++)

{

for (int k = 0; k < neyr2; k++)

{

summa = summa + beta2[k] * w2[q, k];

}

beta1[q] = (1 - prom[q]) * prom[q] * summa;

summa = 0;

}

//коректировка весов матрицы w1

for (int p = 0; p < 10; p++)

{

for (int q = 0; q < neyr1; q++)

{

w1[p, q] = (w1[p, q] + skor * beta1[q] * vvod[p]);

if (w1[p, q] == 0)

{

w1[p, q] = 0.1;

}

}

}

}

public void Rez()

{

//пересчитываем результат

Thread th_11 = new Thread(Potok1);

Thread th_22 = new Thread(Potok2);

th_11.Start("11");

th_22.Start("22");

Рисунок А.1 – Продолжение.

Продолжение приложения А

while (count1 != 2) { }

count1 = 0;

Thread th_33 = new Thread(Potok3);

Thread th_44 = new Thread(Potok4);

th_33.Start("33");

th_44.Start("44");

while (count2 != 2) { }

count2 = 0;

}

public void CreateNS()

{

string[] text = File.ReadAllLines("1-1.txt"); //читаем содержимое файла в переменную text

for (int i = 0; i < 10; i++)

{

vvod[i] = Convert.ToDouble(text[i])/10; //создаем массив входных значений

}

//считаем результат

Rez();

}

public void Obuchenie(string file, StreamWriter sw1)

{

double err = 0;

int klass = 0;

int ee = 0;

string[] text = File.ReadAllLines(file); //читаем содержимое файла в переменную text

for (int qq = 0; qq < 1100; )

{

klass = Convert.ToInt32(text[qq]);

qq++;

ogid = Vihod(neyr2, klass); //создаем функцию которая должна получится

for (int i = 0; i < 10; i++)

{

vvod[i] = Convert.ToDouble(text[qq])/10;

qq++;

}

Rez(); //пересчитываем результат

Korekt(); //коректируем веса

Rez(); //еще раз пересчитываем результат

//считаем ошибку

err = 0;

for (int i = 0; i < neyr2; i++)

{

err = err + (rez[i] - ogid[i]) * (rez[i] - ogid[i]);

}

Рисунок А.1 – Продолжение.

Продолжение приложения А

err = err / 2;

err_m[ee] = err; //записываем все ошибки в массив

ee++;

//выводим ошибку

textBox7.Clear();

textBox7.AppendText(Convert.ToString(Math.Round(err, 5)));

//выводим ошибку в файл

sw1.Write(Convert.ToString(Math.Round(err, 5)) + " ");

}

sw1.WriteLine();

}

}

}

Рисунок А.1 – Продолжение.