Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace ConsoleApp5
- {
- class Program
- {
- public static double F(double x1, double x2)
- {
- return 211 * x1 * x1 - 420 * x1 * x2 + 211 * x2 * x2 - 192 * x1 + 50 * x2 -25;
- }
- public static double F(double[] x)
- {
- return 211 * x[0] * x[0] - 420 * x[0] * x[1] + 211 * x[1] * x[1] - 192 * x[0] + 50 * x[1] - 25;
- }
- private static double[] GetGradient(double x1, double x2)
- {
- double[] result = new double[2];
- result[0] = 211 * 2 * x1 - 420 * x2 - 192;
- result[1] = 211 * 2 * x2 - 420* x1 + 50;
- return result;
- }
- private static double GetSum(double[] gradient)
- {
- return Math.Sqrt(gradient[0] * gradient[0] + gradient[1] * gradient[1]);
- }
- private static double[] GetGradientMethod()
- {
- double eps = 0.01;
- double alpha = 10;
- double[] x = new double[2];
- x[0] = 10;
- x[1] = 10;
- double fx = F(x);
- double[] GradF = GetGradient(x[0], x[1]);
- if (Math.Abs(GetSum(GradF)) <= eps)
- {
- return x;
- }
- double fy;
- double[] y = new double[2];
- while (Math.Abs(GetSum(GradF)) > eps)
- {
- y[0] = x[0] - alpha * GradF[0];
- y[1] = x[1] - alpha * GradF[1];
- GradF = GetGradient(x[0], x[1]);
- fy = F(y);
- if (fy < fx)
- {
- x = y;
- fx = fy;
- }
- else
- {
- alpha /= 2;
- }
- }
- Console.WriteLine("Curent: ({0} , {1}\t|\tfunc: {2})", 8.04, -7.76, F(8.04, -7.76));
- return x;
- }
- static void Main(string[] args)
- {
- double[] X = GetGradientMethod();
- Console.WriteLine("Result:\nX:{0} {1}\t\t Y:{2}", X[0], X[1], F(X));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement