К оглавлению

Квадратичная функция на плоскости по 9-ти точкам

С.И.Хашин


sq_form.h - заголовочный файл
sq_form.cpp - реализация.

Даны значения функции в 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)

К оглавлению


free counters