用于检查非线性函数f是否总是正的算法

时间:2012-05-16 19:44:11

标签: algorithm maple nonlinear-functions nonlinear-optimization

是否有算法检查给定(可能是非线性)函数f是否始终为正?

我目前的想法是找到函数的根源(使用newton-raphson算法或类似技术,参见http://en.wikipedia.org/wiki/Root-finding_algorithm)并检查衍生物,或找到f的最小值,但是他们没有似乎是这个问题的最佳解决方案,根寻找算法也有很多收敛问题。

例如,在Maple中,函数验证可以执行此操作,但我需要在自己的程序中实现它。 Maple帮助验证:http://www.maplesoft.com/support/help/Maple/view.aspx?path=verify/function_shells 枫树示例: 假设(X, '真实的'); 验证(x ^ 2 + 1,0,'greater_than'); - >返回true,因为对于每个x,我们有x ^ 2 + 1> 0

[编辑]问题的一些背景: 函数$ f $是电路的右侧微分非线性模型。非线性电路可以通过应用修改的节点分析(MNA)建模为一组常微分方程,为简单起见,我们只考虑具有1维的系统,因此$ x'= f(x)$其中$ f $描述电路,例如$ f $可以是$ f(x)= 10x - 100x ^ 2 + 200x ^ 3 - 300x ^ 4 + 100x ^ 5 $(非线性隧道二极管的模型)或$ f = 10 - 2sin (4x)+ 3x $(约瑟夫森交界处的模型)。

$ x $有界,$ f $仅在R $的区间$ [a,b] \中定义。 $ f $是连续的。 我也可以假设$ f $是Lipschitz,Lipschitz常数L> 0,但我不想,除非我必须。

1 个答案:

答案 0 :(得分:3)

如果我正确地理解了你的问题,那么归结为计算一个区间中(真实)根的数量而不必识别它们。事实上,你甚至不需要得到确切的数字,只要它是否等于零。

如果您的函数是多项式,我认为Sturm's theorem可能适用。维基百科的文章声称其他两个程序是首选,所以你可能也想检查这些程序。我不确定Descartes' rule of signs是否适用于某个时间间隔,但Budan's theorem似乎确实存在。