LibreOCL/Lesson01/Part02/Prog01_02B/Kernels/Prog01_02B.cl

62 lines
3.7 KiB
Common Lisp
Raw Permalink Normal View History

2025-05-30 15:03:43 +02:00
<EFBFBD><EFBFBD>//============================================================================================= MQL5 ===
// LibreFEI v1.006 (MQL5)
// >4C;L :5@=5;-DC=:F89 4;O OpenCL
// Librecoin(c)2014-2017
//------------------------------------------------------------------------------------------------------
// =8<0=85! OpenCL =5 CG8BK205B AsSeries(), <0AA82K 2A5340 =C<5@CNBAO A?@020-=0;52>!
//------------------------------------------------------------------------------------------------------
kernel void TrigFit_OCL(
global double *x,
global double *ipc,
int n,
double w,
global double *m,
global double *c,
global double *s
)
{
double Sc =0.0;
double Ss =0.0;
double Scc=0.0;
double Sss=0.0;
double Scs=0.0;
double Sx =0.0;
double Sxc=0.0;
double Sxs=0.0;
{for(int i=0;i<n;i++)
{
double cos_w_i=cos(w*i);
double sin_w_i=sin(w*i);
double dx=x[i]-ipc[i];
Sc +=cos_w_i;
Ss +=sin_w_i;
Scc+=cos_w_i*cos_w_i;
Sss+=sin_w_i*sin_w_i;
Scs+=cos_w_i*sin_w_i;
Sx +=dx;
Sxc+=dx*cos_w_i;
Sxs+=dx*sin_w_i;
}}//for(int i=0;i<n;i++)
Sc /=n;
Ss /=n;
Scc/=n;
Sss/=n;
Scs/=n;
Sx /=n;
Sxc/=n;
Sxs/=n;
{if(w==0.0)
{
m[0]=Sx;
c[0]=0.0;
s[0]=0.0;
}else{
// calculating a, b, and m
double den=pow(Scs-Sc*Ss,2)-(Scc-Sc*Sc)*(Sss-Ss*Ss);
c[0]=((Sxs-Sx*Ss)*(Scs-Sc*Ss)-(Sxc-Sx*Sc)*(Sss-Ss*Ss))/den;
s[0]=((Sxc-Sx*Sc)*(Scs-Sc*Ss)-(Sxs-Sx*Ss)*(Scc-Sc*Sc))/den;
m[0]=Sx-c[0]*Sc-s[0]*Ss;
}}//if(w==0.0)
}//TrigFit_OCL()
//