6

是否有一种算法来检查给定的(可能是非线性的)函数 f 是否总是正的?

我目前的想法是找到函数的根(使用 newton-raphson 算法或类似技术,请参阅http://en.wikipedia.org/wiki/Root-finding_algorithm)并检查导数,或找到最小值f,但它们似乎不是这个问题的最佳解决方案,而且求根算法也存在很多收敛问题。

比如在 Maple 中,function verify可以做到这一点,但是我需要在自己的程序中实现。Maple 验证帮助:http ://www.maplesoft.com/support/help/Maple/view.aspx?path=verify/function_shells Maple 示例:assume(x,'real'); 验证(x^2+1,0,'大于');--> 返回真,因为对于每个 x 我们都有 x^2+1 > 0

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

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

4

1 回答 1

3

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

如果您的函数是多项式,我认为Sturm 定理可能适用。Wikipedia 文章声称其他两个程序是首选的,因此您可能也想查看这些程序。我不确定笛卡尔的符号规则是否适用于区间,但布丹定理似乎确实有效。

于 2012-05-17T00:51:49.743 回答