我有一个函数,有点像
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) + exita和b也是如此。第一个问题是:是否有办法提高算法的效率?在我不知道不连续的情况下,是否有任何算法可以工作?
UPDATE我忘记为任何给定的函数(如果f(x + delta) > f(x) + epsilon,那么是不连续的)允许一个epsilon (y中的间隔)和一个增量(x中的间隔),加上域是有限的。
发布于 2011-10-28 17:54:07
一旦您找到了不连续性的位置,就可以创建一个数组cumulativeOffseti,其中cumulativeOffset =偏移,cumulativeOffset1 =偏移+ offset1,等等。然后,一旦您找到了应该在cumulativeOffset中的位置,就只需进行一次查找和添加即可。您可以通过cumulativeOffset[]和http://en.wikipedia.org/wiki/Binary_search找到您应该在哪里。
求一般函数的不连续性与求一般函数的零点一样困难,因为f(x)的零点在1/f(x)中是不连续的。
https://stackoverflow.com/questions/7930755
复制相似问题