捕捉功能中的不连续性

时间:2011-10-28 14:41:13

标签: algorithm function math

我有一个类似

的功能

f(a, b, s) = arctan(cos(a + b) * csc(a - b) * cot(s))

我知道它在某些地方是不连续的,并且可以通过改变功能来“治愈”不连续性。在这种情况下,我知道这些不连续性在哪里,并且它们很容易正确对待它们。基本上它只是

s_discontinuities = [s_0, s_1, s_2]

for i in s_discontinuities:
    jump = round(f(a, b, s_discontinuities(i) + Ds) - f(a, b, s_discontinuities(i) - Ds))
    offset(i) = jump

def new_f(a, b, s):
    exit = 0
    for i in s_discontinuities:
        if s > s_discontinuities(i):
            exit += offset(i)
    return f(a, b, s) + exit

然后与ab相同。第一个问题是:有没有办法让算法更有效率,是否有任何算法可以在我不知道不连续性在哪里的情况下工作?

UPDATE 我忘了指定我允许任何给定函数的epsilon(y中的间距)和delta(x中的间距)(如果f(x + delta)> f(x)+ epsilon,然后是不连续的),加上域是有限的。

1 个答案:

答案 0 :(得分:1)

一旦找到不连续点的位置,就可以创建一个数组cumulativeOffset [i],其中cumulativeOffset [0] = offset [0],cumulativeOffset [1] = offset [0] + offset [1],等等上。然后,一旦找到了您应该在cumulativeOffset中的位置,您只需要进行一次查找和添加。您可以使用http://en.wikipedia.org/wiki/Binary_search找到您应该在cumulativeOffset []中的位置。

找到一般函数的不连续性至少与查找一般函数的零一样困难,因为f(x)的零点变为1 / f(x)中的不连续性。