Haos писал(а):Вот здесь посмотрите - в библиотеке есть функции корреляции. Умеете пользоваться готовыми функциями?
double p(double cov, double DX, double DY) // коэффициент выборочной корреляции
{
return(cov/MathSqrt(DX)/MathSqrt(DY));
}
double Dp(double p, int size) // дисперсия выборочной корреляции
{
return(MathPow(1.0-MathPow(p,2),2)/(size-1));
}
double AutoKorel(double arr[], double MX, int por) // автокорреляция порядка por
{
int size=ArraySize(arr)-por;
double Sum1=0.0,
Sum2=0.0,
Sum3=0.0;
for(int i=0; i<size; i++) {
Sum1+=(arr[i]-MX)*(arr[i+por]-MX);
Sum2+=MathPow(arr[i]-MX,2);
Sum3+=MathPow(arr[i+por]-MX,2);
}
return(Sum1/MathSqrt(Sum2)/MathSqrt(Sum3));
}
void AutoKorelFunc(double arr[], double MX, int count, double& res[]) // автокорреляционная функция (АКФ)
{
int size=ArraySize(arr);
double Sum1=0.0,
Sum2=0.0;
count++;
ArrayResize(res,count);
res[0]=1.0;
for(int i=1; i<count; i++)
res[i]=AutoKorel(arr,MX,i);
}
ВЯЧЕСЛАВПЕТРОВ писал(а):Haos писал(а):Вот здесь посмотрите - в библиотеке есть функции корреляции. Умеете пользоваться готовыми функциями?
С этим делом пока туговато. Нужно разобрать какая из формул нам нужна и как работает.
Haos писал(а):Я посмотрю, но зачем Вы пытаетесь использовать то, что не понимаете? Я вот прекрасно знаю что такое корреляция уже лет 25, но не использую на рынке, т.к. не вижу оснований для её применения.
double p(double cov, double DX, double DY) // коэффициент выборочной корреляции
{
return(cov/MathSqrt(DX)/MathSqrt(DY));
}
double DX(double arr[], double MX) // дисперсия
{
int size=ArraySize(arr);
double Sum=0.0;
for(int i=0; i<size; i++)
Sum+=MathPow(arr[i]-MX,2);
return(Sum/(size-1));
}
Haos писал(а):Можете брать уже рассчитанные значения корреляции с какого-нибудь сайта. Только всё это я не знаю как может помочь.
double DX(double arr[], double MX) // дисперсия
{
int size=ArraySize(arr);
double Sum=0.0;
for(int i=0; i<size; i++)
Sum+=MathPow(arr[i]-MX,2);
return(Sum/(size-1));
}
double m3(double arr[], double MX) // 3-ий центральный момент
{
int size=ArraySize(arr);
double Sum=0.0;
for(int i=0; i<size; i++)
Sum+=MathPow(arr[i]-MX,3);
return(size/(size-1)/(size-2)*Sum);
}
double m4(double arr[], double MX) // 4-ый центральный момент
{
double Sum2=0.0,
Sum4=0.0;
int size=ArraySize(arr);
for(int i=0; i<size; i++) {
Sum2+=MathPow(arr[i]-MX,2);
Sum4+=MathPow(arr[i]-MX,4);
}
return(((MathPow(size,2)-2*size+3)*Sum4-
(6*size-9)/size*MathPow(Sum2,2))/
(size-1)*(size-2)*(size-3));
}
double A(double arr[], double MX, double DX) // выборочная асиметрия
{
double Sum=0.0,
size=ArraySize(arr);
for(int i=0; i<size; i++)
Sum+=MathPow(arr[i]-MX,3);
return(size/(size-1)/(size-2)/MathPow(DX,1.5)*Sum);
}
double E2(double arr[], double MX, double DX) // Эксцесс (другой способ вычисления)
{
double Sum2=0.0,
Sum4=0.0,
size=ArraySize(arr);
for(int i=0; i<size; i++) {
Sum2+=MathPow(arr[i]-MX,2);
Sum4+=MathPow(arr[i]-MX,4);
}
return((size*(size+1)*Sum4-3*Sum2*Sum2*(size-1))/(size-1)/(size-2)/(size-3)/DX/DX);
}
double E(double arr[], double MX, double DX) // Эксцесс
{
double Sum=0.0,
size=ArraySize(arr);
for(int i=0; i<size; i++)
Sum+=MathPow(arr[i]-MX,4);
return(((MathPow(size,2)-2*size+3)/(size-1)/DX*DX*Sum-
(6*size-9)*(size-1)/size)/(size-2)/(size-3));
}
double Gamma(double x) // гамма-функция Эйлера для x>0
{
double p = 0.0,
pp = 0.0,
qq = 0.0,
z = 1.0,
sgngam = 1.0;
int i = 0;
if( x>33.0 )
return(sgngam*gammastirf(x));
while( x>=3 ) {
x--;
z = z*x;
}
while( x<2 ) {
if( x<0.000000001 )
return(z/((1+0.5772156649015329*x)*x));
z/=x;
x++;
}
if( x==2 )
return(z);
x-=2.0;
pp = 0.000160119522476751861407;
pp = 0.00119135147006586384913+x*pp;
pp = 0.0104213797561761569935+x*pp;
pp = 0.0476367800457137231464+x*pp;
pp = 0.207448227648435975150+x*pp;
pp = 0.494214826801497100753+x*pp;
pp = 0.999999999999999996796+x*pp;
qq = -0.0000231581873324120129819;
qq = 0.000539605580493303397842+x*qq;
qq = -0.00445641913851797240494+x*qq;
qq = 0.0118139785222060435552+x*qq;
qq = 0.0358236398605498653373+x*qq;
qq = -0.234591795718243348568+x*qq;
qq = 0.0714304917030273074085+x*qq;
qq = 1.00000000000000000320+x*qq;
return(z*pp/qq);
}
double gammastirf(double x) // формула Стирлинга, используется для вычисления гамма-функции Эйлера для x>33
{
double y = 0.0,
w = 0.0,
v = 0.0,
stir = 0.0;
//--------
w = 1.0/x;
stir = 0.000787311395793093628397;
stir = -0.000229549961613378126380+w*stir;
stir = -0.00268132617805781232825+w*stir;
stir = 0.00347222221605458667310+w*stir;
stir = 0.0833333333333482257126+w*stir;
w = 1+w*stir;
y = MathExp(x);
if(x>143.01608) {
v = MathPow(x, 0.5*x-0.25);
y = v*(v/y);
}
else y = MathPow(x, x-0.5)/y;
return(2.50662827463100050242*y*w);
}
double DDX(double arr[], double m4, double DX) // дисперсия выборочной дисперсии
{
return((m4-MathPow(DX,2))/ArraySize(arr));
}
double Dsig(double arr[], double m4, double DX) // дисперсия выборочного среднего квадратического отклонения
{
return(DDX(arr,m4,DX)/DX/4);
}
double DA(double size) // дисперсия выборочной асиметрии
{
return((6*size-6)/(size+1)/(size+3));
}
double DE(double size) // дисперсия воборочного эксцеса
{
return(24*size*(size-2)*(size-3)/
MathPow(size-1,2)/(size+3)/(size+5));
}
double DMX(double DX, int size) // дисперсия выборочного матиматического ожыдания
{
return(DX/size);
}
double Log(double x, double a) // логарифм х по основанию а
{
return(MathLog(x)/MathLog(a));
}
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 24
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения