我有一个功能是
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也一样。第一个问题是:有没有办法提高算法的效率,有没有什么算法可以在我不知道不连续点在哪里的情况下工作?
更新我忘记指定我允许给定函数的epsilon(y中的间距)和delta(x中的间距)(如果f(x+delta)>f(x)+epsilon,则是不连续的),加上域是有限的。

最佳答案

一旦找到不连续的位置,就可以创建一个数组cumulativeOffset[i],其中cumulativeOffset[0]=偏移量[0],cumulativeOffset[1]=偏移量[0]+偏移量[1],依此类推然后,一旦你发现你应该在累积偏移中的位置,你只需要做一个查找和添加。您可以使用http://en.wikipedia.org/wiki/Binary_search找到累积偏移量[]中的位置。
找到一般函数的不连续性看起来至少和找到一般函数的零点一样困难,因为f(x)的零点在1/f(x)中变成不连续性。

10-08 04:06