квалратичная регрессия

 
подскажите пожалуйста формулы для расчёта квадратичной регрессии
 

https://forum.mql4.com/ru/10855

 
mamma >>:

https://forum.mql4.com/ru/10855


к сожалению это не совсем то, меня интересуют формулы для расчёта коэффициентов из уравнения y=b0*x^2+b1*x+b2

 
space_cowboy >>:

к сожалению это не совсем то, меня интересуют формулы для расчёта коэффициентов из уравнения y=b0*x^2+b1*x+b2

методом наименьших квадратов вычисляются

 
space_cowboy >>:
подскажите пожалуйста формулы для расчёта квадратичной регрессии

Если y - вектор nx1, x - матрица nxm, n - число отсчетов данных, m - размерность входного вектора


yr - вектор значений регрессии nrx1, полученный для значений xr (матрица nrxm)


yr = X * inv(B' * B) * B' * y,


где

' - операция матричного транспонирования,

inv - операция матричной инверсии,

B - матрица nx(m+1) полученная дополнением вектора [1 1 ... 1]' матрицей x справа,

X - матрица nrx(m+1) полученная дополнением вектора [1 1 ... 1]' и матрицей xr справа.



P.S. забыл сказать, что это для линейной регрессии. Для других порядков нужно слегка модифицировать: в матрицы B и X нужно добавить x^2 и xr^2 соответственно.

 
space_cowboy писал(а) >>

к сожалению это не совсем то, меня интересуют формулы для расчёта коэффициентов из уравнения y=b0*x^2+b1*x+b2

Может это - 'ang PR (Din)-v1'

 
space_cowboy писал(а) >>

к сожалению это не совсем то, меня интересуют формулы для расчёта коэффициентов из уравнения y=b0*x^2+b1*x+b2

Вот не матричный алгоритм для нахождения коэффициентов параболы:

 
Господи, как страшно!!!
 
Neutron >>:

Вот не матричный алгоритм для нахождения коэффициентов параболы:

примного благодарствую, но похоже что умножать на коэфициент k в последнем цикле не надо

 

Выкладываю результаты моих трудов

void quadr_regr(double &data[], double &regr[], int cnt)
{
//функция построения квадратичной регрессии
//data-массив с данными
//regr-массив, в который помещаются найденные точки квадратичной регрессии
//cnt-число используемых данных
double a[5],y[5];
double b0, b1, b2, k;
int j,i;
for(j=0;j<=4;j++)
    {
    double sum=0;
    for(i=0;i<cnt;i++)
      {
      sum+=MathPow(i, j);
      }
    a[j]=sum;
    sum=0;
    for(i=0;i<cnt;i++)
      {
      sum+=MathPow(i, j)*data[i];
      } 
    y[j]=sum;  
    }
k=1/(-a[0]*a[2]*a[4]+a[0]*a[3]*a[3]-2*a[1]*a[2]*a[3]+a[4]*a[1]*a[1]+a[2]*a[2]*a[2]);
b0=k*((a[3]*a[3]-a[2]*a[4])*y[0]+(a[4]*a[1]-a[3]*a[2])*y[1]+(a[2]*a[2]-a[3]*a[1])*y[2]); 
b1=k*((a[1]*a[4]-a[3]*a[2])*y[0]+(a[2]*a[2]-a[4]*a[0])*y[1]+(a[3]*a[0]-a[1]*a[2])*y[2]);
b2=k*((a[2]*a[2]-a[1]*a[3])*y[0]+(a[0]*a[3]-a[1]*a[2])*y[1]+(a[1]*a[1]-a[0]*a[2])*y[2]);

for(j=0;j<cnt;j++)
    {
    regr[j]=b0+b1*j+b2*j*j;
    }
}
 
space_cowboy писал(а) >>

примного благодарствую, но похоже что умножать на коэфициент k в последнем цикле не надо

Да-да! Это я от усердия таво...

Причина обращения: