Автор работы: Пользователь скрыл имя, 20 Мая 2013 в 20:04, курсовая работа
В рамках бакалаврской работы был рассмотрен метод распознавания графических образов с шумами, основанный на применении нейронной сети Хемминга. Было рассмотрено влияние шумов в данных на результат работы сети.
Также в рамках работы был построен программный комплекс, реализующий данный метод и позволяющий анализировать сгенерированные последовательности данных с внесённым в них шумом. Шум является случайной величиной и имеет заданный закон распределения. Были проведены исследования и на основе их результатов были сформулированы выводы.
{
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(
}
//возвращает дисперсию