计算-ve,zero和+ ve域中的斜率

时间:2009-05-21 06:29:24

标签: algorithm math geometry

Imagina正弦波在零线附近振荡。我的任务是使用相当粗糙的x轴刻度计算沿波的几个随机点的斜率。 (是的,这有一个真正的应用)

当波在+ ve terrirtory(零线以上)时,斜率可以通过以下公式计算:

Slope = (y(n) / y(n-1)) - 1

这个正在向前倾斜并向前倾斜的斜坡上升了。

问题是当我们处于-ve领域时必须切换它,当其中一个值为零时,需要另外两个表达式,总共四个表达式必须以条件语句以编程方式选择。

我想找到一个涵盖所有四种条件的表达式,因为这是一个经常运行的算法和clks计数的中心!

我相信这对于数学天才来说是一个微不足道的解决方案,但是对于这些疲惫的眼睛来说,这让我望而却步......

添加了:

“正弦波”实际上是一个MACD指标,它源自金融市场的(随机)价格行为。一个例子就在这里:

http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:moving_average_conve

斜率(例如下图中粗黑线的斜率)是我需要计算的,只需将其定义为向上或向下(向上标记为+ ve)

问题是+ ve和-ve斜率都可以出现在零度之上和之下。使用越过零线和零线的增量也可以进行斜率计算。

找到一个不涉及大量IF语句的解决方案会很高兴...例如,将所有y值按固定量移动,使它们变为+ ve,然后计算+ ve区域的斜率。我需要选择一个历史上的数字,y从未低于,例如几个数量级(99)然后我可以执行offest和一个斜率计算?

4 个答案:

答案 0 :(得分:3)

你的'正弦波'是什么意思?你的意思是数学生成的y = a sin(bx)曲线或通过样条适合某些实验点的平滑曲线恰好类似于正弦波,因为它围绕x轴振荡?如果是前者,您可以在数学上区分它并在任何点获得精确的斜率。如果是后者,你正在寻找的公式是

slope(x) = (y(x-delta) - y(x+delta))/(2 * delta)

尝试不同的delta值。没有条件涉及;分子和分母的符号将自动确保您获得斜坡的正确符号。

答案 1 :(得分:2)

斜率只是

slope = y(n)-y(n-1)

或者,如果x轴上有单位,则将其除以一个x轴步长(即x(n)-x(n-1))。

此公式是定义的排序,并且您所在的x轴的哪一侧无关紧要。 (我在这里说“排序”,因为斜率是这个等式的极限,因为你的样本箱非常接近,所以这个等式是近似值,可以使用其他近似值。)

请记住,噪声数据的斜率看起来会更加嘈杂。

我怀疑slope page on wikipedia的前几段会帮助你解决这个问题。

答案 2 :(得分:0)

如果您正在寻找正弦波的斜率,可以通过标准微积分函数完成。

f(x)=sin(x)行的斜率为f'(x)=cos(x)

然而,根据你的公式,我并不完全确定你所追求的是什么。也许你需要弄清楚它。

但是如果你想要问题所示的方法,我认为你对性能的关注是错误的。为了将此计算作为单个算术表达式进行,您将不得不乘以-1,具体取决于您是在x轴之上还是之下(以及是否从f(n)过渡到该轴-1)到f(n))。

一旦将它编译成机器语言,这可能比简单的if语句序列更慢(或者至少没有更快)。

与所有优化一样,您应首先选择最容易开发的方法然后查看它是否存在性能问题。否则你可能会在前面浪费很多精力来获得不必要的提升。

答案 3 :(得分:0)

你不需要斜坡;你可以这样做:

(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0) ) < 
iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,2)

意味着减少。否则增加图表,只要:

(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0) ) >0