Задание по работе:
- Изучить теоретическую часть работы.
- Реализовать метод градиентного спуска
- Для функций двух видов: вогнутой и с вторичными минимумами применить реализованный метод, оценить скорость сходимости и возможность нахождения глобального минимума.
Содержание
class Metods
{
const int u = 100000;
// функция 1
public static double Func(double x)
{
return Math.Sin(x) + Math.Sin(x * x);
}
// функция 2
public static double Func1(double x)
{
return Math.Sqrt(3 + x * x) + 3 * Math.Cos(x);
}
// функция 3
public static double Func2(double x, double y)
{
return Math.Abs(x * x) + Math.Abs(y * y * y);
}
// функция 4
public static double Func3(double x, double y)
{
return Math.Pow(y - x * x, 2) + Math.Pow(1 + x, 2);
}
// производная функции 1
public static double Proizv1(double x)
{
return Math.Cos(x) + 2 * x * Math.Cos(x * x);
}
// производная функции 2
public static double Proizv2(double x)
{
return x / Math.Sqrt(3 + x * x) - 3 * Math.Sin(x);
}
// производная функции 3
public static double[] Proizv3(double x, double y)
{
double t = 2 * x;
double o = 3 * y * y;
double[] z = { t, o };
return z;
}
// производная функции 4
public static double[] Proizv4(double x, double y)
{
double t = -400 * x *(-( x * x ) + y ) + 2 * x + 2;
double o = -200 * x * x + 200 * y;
double[] z = { t, o };
return z;
}
// Х1 для функции 1
public static double x1(double x, double a)
{
return x - a * Proizv1(x)/Math.Abs(Proizv1(x));
}
// X1 для функции 2
public static double x2(double x, double a)
{
return x - a * Proizv2(x) / Math.Abs(Proizv2(x));
}
// Х1 для функции 3
public static double[] x3(double x, double y, double a)
{
double[] s = { x, y };
for (int i = 0; i <= 1; i++)
{
s[i] = s[i] - a * Proizv3(x, y)[i];
}
return s;
}
// Х1 для функции 4
public static double[] x4(double x, double y, double a)
{
double[] s = { x, y };
for (int i = 0; i <= 1; i++)
{
s[i] = s[i] - a * Proizv4(x, y)[i];
}
return s;
}![]()
Содержание архива
- Исходный код на C# Windows Forms для Visual Studio
anna220699