找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
首页论坛EAHub 外汇论坛
查看: 19|回复: 0

拉格朗日Lagrange多项式计算源代码

[复制链接]

4万

主题

54

回帖

4万

积分

管理员

积分
45954
发表于 2026-8-22 00:48:00 | 显示全部楼层 |阅读模式
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 SkyBlue
#property indicator_color2 Crimson
#property indicator_color3 Crimson
//----
extern int Pow=3;
extern int Depth=12;точками
extern int Mode=MODE_HIGH;//MODE_HIGH, MODE_LOW, MODE_CLOSE
extern int TimeFrame=0;
extern int Shift=10;
//----
double Lx[];
double Lx0[];
double Pnt[];

int X[];
double Y[];
double C[];
//----------------------------------------------------------- Lagrange
int init()
{
//---- indicator line
SetIndexBuffer(0,Lx); SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(1,Lx0); SetIndexStyle(1,DRAW_LINE); SetIndexShift(1, Shift);
SetIndexBuffer(2,Pnt); SetIndexStyle(2,DRAW_ARROW); SetIndexArrow(2, 159);

ArrayResize(X, Pow); ArrayResize(Y, Pow); ArrayResize(C, Pow);

return(0);
}
//----------------------------------------------------------- Lagrange
int start()
{
if (Pow<=1) Pow = 2;
if (Pow>=21) Pow = 20;
FindPoint();
Lagrange();
return(0);
}
//----------------------------------------------------------- FindPoint
void FindPoint()
{
int pos, pos2, pos_prev = -1;
if (Depth<=0) Depth=2;
int i=Depth;
int n=0;
while((i<Bars-Depth) && (n<ow))
{
if (Mode==MODE_HIGH)
{
pos = iHighest(NULL,0,MODE_HIGH,2*Depth+1,i-Depth); pos2 = iHighest(NULL,0,MODE_HIGH,2*Depth+1,pos-Depth);
if ((pos==pos2)&&(pos!=pos_prev))
{
X[n] = pos; Y[n]=High[pos]; n++;
pos_prev = pos;
}
}
if (Mode==MODE_LOW)
{
pos = iLowest(NULL,0,MODE_LOW,2*Depth+1,i-Depth); pos2 = iLowest(NULL,0,MODE_LOW,2*Depth+1,pos-Depth);
if ((pos==pos2)&&(pos!=pos_prev))
{
X[n] = pos; Y[n]=Low[pos]; n++;
pos_prev = pos;
}
}
i++;
}
}
void Lagrange()
{
int i, j, b;
for (i = 0; i<ow; i++)
{
C = 1.0;
for (j = 0; j<ow; j++)
if (j != i)  C = C*(X-X[j]);
C = Y/C;
}
int bars = X[ArrayMaximum(X)];
double sx;
for (b = 0; b<=bars; b++)
{
Lx = 0.0; Pnt = 0;
for (i = 0; i<ow; i++)
{
sx = 1;
for (j = 0; j<ow; j++)
if (j != i) sx = sx*(b-X[j]);
Lx = Lx+C*sx;
}
}
for (i = 0; i<ow; i++) Pnt[X] = Y;
ArrayInitialize(Lx0, EMPTY_VALUE);
for (b = -Shift; b<=0; b++)
{
Lx0[b+Shift] = 0.0;
for (i = 0; i<ow; i++)
{
sx = 1;
for (j = 0; j<ow; j++)
if (j != i) sx = sx*(b-X[j]);
Lx0[b+Shift] = Lx0[b+Shift]+C*sx;
}
}
}复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|EAHub外汇论坛

GMT+8, 2026-10-11 18:32 , Processed in 0.107010 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表