y"> Запуск пошуку мінімуму завдання на умовний мінімум квадратичної функції. Реалізується метод зовнішніх штрафів з застосування методу багатовимірного пошуку мінімуму Девідона-Флетчера-Пауелла.
По завершенню програма видає точку мінімуму та значення функції в цій точки. Всі проміжні висновки обчислень, які допомагають відстежити правильність виконання програми, вилучені, тому що не є обов'язковими.
Програма написана в середовищі Microsoft Visual Studio 2010.
Лістинг:
# include ;
# include ;
using namespace std;
// розмірність Евклидова пространстваint n = 2;
// створення нестандартних найменувань типів
typedef int counters; int number_of_iteration; double step; double fine; double accuracy; double norm_gradient; double point [n]; double difference_of_points [n]; double gradient [n]; double difference_of_grad [n] ; double direction [n]; double matrix [n] [n]; double Hessian_matrix [n] [n]; double Determ_Hess_matr; phi (fine p, point x)
{g1 = 0, g2 = 0; = 2 * x [0] +3 * x [1] -6; = 2 * x [0] + x [1] -4; ( p * 0.125) * ((abs (g1) + g1) * (abs (g1) + g1) + (abs (g2) + g2) * (abs (g2) + g2));
} f (char var, fine p, point & x)
{(var == '1 ') return x [0] * x [0] -3 * x [0] * x [1] +10 * x [1] * x [1 ] +5 * x [0] -3 * x [1]; (var == '2 ') return sqrt (1 +2 * x [0] + x [1] * x [1]) + exp (x [0] * x [0] +2 * x [1] * x [1])-x [0]-x [1]; (var == '3 ') return x [0] * x [0] -2 * x [0]-x [1] + phi (p, x),
} psy (char var, fine p, step s, point & x, direction & d)
{sum1 = 0, sum2 = 0, sum3 = 0; g1 = 0, g2 = 0; (var == '1 ')
} (var == '2 ')
{= sqrt ((1 +2 * x [0] + x [1] * x [1]) + 2 * s * (d [0] + x [1] * d [ 1]) + s * s * (d [1] * d [1])); = exp ((x [0] * x [0] +2 * x [1] * x [1]) +2 * s * (x [0] * d [0] +2 * x [1] * d [1]) + s * s * (d [0] * d [0] +2 * d [1] * d [ 1])); = x [0] + x [1] + s * (d [0] + d [1]); sum1 + sum2-sum3;
} (var == '3 ')
}
} diff (char & var, fine p, counters i, counters j, point & x)
{h = 0.000000001; dx; (j = 0; j
} d_diff (char & var, fine p, counters i, point & x)