С.И.Хашин
Даны значения функции в 9-ти точках:
// (-1,-1) ( 0,-1) ( 1,-1) f[0] f[1] f[2] // (-1, 0) ( 0, 0) ( 1, 0) -> f[3] f[4] f[5] // (-1, 1) ( 0, 1) ( 1, 1) f[6] f[7] f[8]
Методом наименьших квадратов находим квадратичную функцию вида
f(x,y) = a[0] + a[1]*x + a[2]*y + a[3]*x*x + a[4]*x*y + a[5]*y*y
наилучшим образом приближающую исходную функцию. Это реализуется процедурой:
double findSqForm(double *f, double *a);
Далее, для квадратичной функции с коэффициентами a[i] находим точку экстремума (x0,y0), значение в нём (z0) и возвращаем тип экстремума.
int extremSqForm(double *a, double &x0, double &y0, double &z0);
Возвращаемое значение, описывающее тип экстремума будет одним из следующих:
// 1 (++) // 2 (+-) // 3 (--) // 4 (+0) // 5 (-0) // 6 (00)
Даны значения функции f в 9-ти точках. (x,y):=точка минимума соответстующей квадратичной формы:
bool minSq(double *f, double &x, double &y, double maxOffset);Если |x|> maxOffset или |y|> maxOffset, то вектор (x,y) уменьшается.
И последняя функция (служебная)
double vSQ(double *a, double x, double y);
по данным шести коэффициентам квадратичной формы a[i] найти значение в точке (x,y)