Задание по работе:
- Изучить теоретическую часть работы.
- Реализовать метод градиентного спуска
- Для функций двух видов: вогнутой и с вторичными минимумами применить реализованный метод, оценить скорость сходимости и возможность нахождения глобального минимума.
Содержание
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