https://forum.mql4.com/ru/10855
Если 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 соответственно.
к сожалению это не совсем то, меня интересуют формулы для расчёта коэффициентов из уравнения y=b0*x^2+b1*x+b2
Может это - 'ang PR (Din)-v1'
Выкладываю результаты моих трудов
void quadr_regr(double &data[], double ®r[], 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;
}
}
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования