Автор: Пользователь скрыл имя, 17 Апреля 2013 в 18:30, курсовая работа
Искусственные нейронные сети (НС) – набор математических и алгоритмических методов для решения широкого круга задач. Они превосходят последовательные машины в решении тех же задач, в которых машину превосходит человек. К задачам, успешно решаемым НС на данном этапе их развития, относятся [1]:
Распознавание зрительных и слуховых образов: от распознавания текста до систем голосового управления.
Ассоциативный поиск информации и создание ассоциативных моделей: синтез речи, формирование естественного языка.
Формирование моделей различных нелинейных и трудно описываемых математически систем, а также прогнозирование развития этих систем во времени: прогнозирование развития различных природных процессов, изменений курсов валют, курсов акций и других финансовых показателей.
Введение 7
Постановка задачи 9
1. Системный анализ методов распознавания образов и построения генераторов псевдослучайных величин. 10
1.1. Анализ методов распознавания графических образов 10
1.1.1 Статистические методы распознавания 10
1.1.2 Структурные (лингвистические) методы распознавания 12
1.1.3 Нейросетевые методы распознавания 15
1.1.4 Вывод по результатам анализа рассмотренных методов 18
1.2. Процедура искажения изображений 20
1.3.1 Преобразование Бокса – Мюллера. 20
1.3. Выводы 22
2. Реализация эмулятора нейронной сети Хемминга, решающей задачи распознавания зашумлённых образов. 23
2.1. Выбор структуры ИНС 25
2.2. Программная реализация ИНС 27
2.2.1. Интерфейс пользователя программы-эмулятора ИНС 31
2.3. Выводы 33
3. Исследование результатов работы программы-эмулятора ИНС 34
3.1 Выводы 36
Заключение 37
Библиографический список 38
{
func = new
return func;//возвращаем
}
//конструктор
private
{
func = this;//сохраняем в
Values = values;//сохраняем
double control = 0;//
for (int i = 0; i < Values.
{
control += ((Point)Values[i]).
}
int tochnost = 10000;//
if ((Math.Round(control *
{
//Проверка на то, что
throw new Exception("
}
}
//приватный конструктор
private
{
func = this;//запрещает
}
//возвращает значение "
public double
{
//Возвращает значение
if (x <= Values[0].GetX)
{
return 0;//если меньше
}
if (x >= Values[Values.Count -
{
return 1;//если больше
}
double val = Values[0].GetX;//
double probability = 0;//
double y = 0;
for (int i = 1; i < Values.
{
if (x < val)//если х <
{
y = probability;
if (y < 0)//округление y
{
return 0;
}
else
{
if (y > 1)
{
return 1;
}
else
{
return y;
}
}
}
val = Values[i].GetX;//
probability += Values[i - 1].
}
return probability;
}
//возвращает значение
public double
{
//Возвращает значение
if (y < 0 || y > 1)
{
throw new Exception("Обратная
}
double probability = 0;
for (int i = 0; i < Values.
{
probability += Values[i].GetP;
if (y <= probability)//если y
{
return Values[i].GetX;//
}
}
return Values[Values.Count -
}
//возвращает i-ю точку
public Point GetPoint(int
{
return Values[number];
}
//возвращает количество точек
public int GetNumberOfPoints()
{
return Values.Count;
}
//возвращает значение
public double
{
if (x < Values[0].GetX)//если
{
return 0;
}
if (x > Values[Values.Count -
{
return 0;
}
double y = 0;
for (int i = 1; i < Values.
{
double val = Values[i].GetX;
if (x <= val)// находим между
{
double x1 = Values[i - 1].
double x2 = Values[i].GetX;
double y1 = Values[i - 1].
double y2 = Values[i].GetP;
y = y1 + ((x - x1) * (y2 - y1)
break;//прерываем цикл
}
}
return y;
}
//возвращает мат ожидание СВ
public double GetExpectation()
{
double M = 0;//мат.ожидание
for (int i = 0; i < this.
{
//прибавляем к М произведение
M += this.GetPoint(i).GetP *
}
return M;
}
//возвращает СКО СВ
public double
{
return Math.Sqrt(
}
//возвращает дисперсию
public double GetDispersion()
{
double M = this.
double D = 0;
for (int i = 0; i < this.
{
//прибавляем к дисперсии
D += this.GetPoint(i).GetP *
}
return D;
}
//возвращает минимальное
public double Xmin()
{
return this.
}
//возвращает масимальное
public double Xmax()
{
return this.
public class
{
private
Random BaseGenerator = new
//конструктор
public
{
Function =
}
//сгенерировать очередное
public double GenerateValue()
{
double x1 = BaseGenerator.
double result = Function.
return result;
}
}
//алгоритм для генерации случайной величины универсальным методом
class
{
private static
private List<Inflection>
private List<double> square =
double control = 0;
//метод создания
public static
{
return func;
}
public static
{
func = new
return func;
}
//конструктор
private
{
func = this;
}
//конструктор
private
{
func = this;
Values = values;
for (int i = 1; i < Values.
{
square.Add((Values[i].GetX -
control += square[i - 1];
}
//int tochnost = 10;//
//if ((Math.Round(control *
//{
// //Проверка на то, что
// throw new Exception("
//}
}
//возвращает значение функции
public double
{
if (x < Values[0].GetX)
{
return 0;
}
if (x > Values[Values.Count -
{
return 1;
}
double y = 0;
for (int i = 1; i < Values.
{
if(x<=Values[i].GetX)
{
y += (x - Values[i - 1].GetX)
if (y < 0)
{
return 0;
}
else
{
if (y > 1)
{
return 1;
}
else
{
return y;
}
}
}
y += square[i - 1];
}
return y;
}
//возвращает значение
public double
{
//todo: InverseFunctionValue
if (y < 0 || y > 1)
{
throw new Exception("Обратная
}
if(y==0)
{
return Values[0].GetX;
}
if(y==1)
{
return Values[Values.Count -
}
double Prevx = 0;
double x = -1;
double FirstBorder = Values[0]
double SecondBorder = Values[
do
{
Prevx = x;
x = this.GetFunctionValue(
if (y > x)
{
FirstBorder += (SecondBorder -
}
else
{
SecondBorder = FirstBorder + (
}
}
while (Math.Abs(Prevx - x) >
return x;}
//Возвращает значение функции
public double
{
if (x < Values[0].GetX)
{
return 0;
}
if (x > Values[Values.Count -
{
return 0;
}
double y = 0;
for (int i = 1; i < Values.
{
double val = Values[i].GetX;
if (x <= val)
{
double x1 = Values[i - 1].
double x2 = Values[i].GetX;
double y1 = Values[i - 1].
double y2 = Values[i].GetY;
y = y1 + ((x - x1) * (y2 - y1)
break;
}
}
return y;
}
//возвращает математическое
public double GetExpectation()
{
double step = (Xmax() - Xmin()
double prevM = 0;
double M = 1;
while (Math.Abs(M - prevM) >
{
prevM = M;
double current = 0;
for (double x = Xmin(); x <
{
current += step*((x + step)*
}
M = current;
step /= 2;
}
return M;
}
//возвращает СКО
public double
{
return Math.Sqrt(
}
//возвращает дисперсию
Информация о работе Исследование результатов работы программы-эмулятора ИНС