如果我得到了多项式曲线,我想通过编程找到所有单调曲线段和相应的区间
什么是最好的方法...
我想避免像f'(x)= 0那样求解方程;
使用一些很好的数字方法,比如双截面,是首选
f'(x)表达式可用。
感谢。
添加其他详细信息。例如,我在2d空间得到一条曲线,其多项式是
x:f(t) y:g(t)
t是[0,1]
所以,如果我想得到它的单调曲线段,我必须知道它的切线向量为(1,0)的位置。
解决此问题的一种直接方法是设置方程“f'(x)= 0”。
但我想用最有效的方法来做到这一点。
例如,我尝试使用递归方式来查找它。 将范围[0,1]除以四个部分,并检查矢量(1,0)上的四个切线投影是否在同一方向,两个点是否足够接近。如果没有,继续将范围分成4个部分,直到它们在(1,0)和(0,1)中的方向相同,并且足够接近。
答案 0 :(得分:6)
我认为你必须使用数值方法找到f'(x)的根源(随意实现你想要的任何root-seeking algorithm,维基百科有一个列表)。根将是梯度达到零的那些点;比如x1,x2,x3。
然后你有一组区间(-inf,x1)(x1,x2)等,多项式的连续性确保梯度在一对特定点之间总是正的或总是负的。
因此,在每个区间内的某个点评估渐变符号将告诉您该区间是否单调增加。如果你不关心“严格”增加的部分,你可以将具有正梯度的相邻间隔拼接在一起(因为拐点将显示为f'(x)= 0根之一)。
答案 1 :(得分:1)
作为计算f'根的替代方法,您还可以使用Sturm Sequences。
它们允许计算间隔中的根数(这里是f'的根)。
答案 2 :(得分:0)
单色曲线段由f'(x)的根分隔。您可以使用Newton's method等迭代算法找到根。