algorithm - 一种检查非线性函数 f 是否始终为正的算法

标签 algorithm maple nonlinear-functions nonlinear-optimization

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

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

比如在Maple中,函数verify可以做到这一点,但是我需要在自己的程序中实现。 Maple 帮助验证:http://www.maplesoft.com/support/help/Maple/view.aspx?path=verify/function_shells 枫木示例: 假设(x,“真实”); 验证(x^2+1,0,'greater_than'); --> 返回真,因为对于每个 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,但除非万不得已,否则我不想这么做。

最佳答案

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

如果你的函数是一个多项式,我认为 Sturm's theorem可能适用。维基百科文章声称另外两个程序是首选,因此您可能也想检查一下。我不确定 Descartes' rule of signs在一个时间间隔内工作,但是 Budan's theorem确实如此。

关于algorithm - 一种检查非线性函数 f 是否始终为正的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10625585/

相关文章:

python - Scipy 的 fsolve 替代品?

c# - 一组超过 2 个整数的最大公约数

algorithm - n 个不同整数的数组中 k 个最小整数的就地排序算法

algorithm - 负载均衡算法——特例

matlab - Matlab 输入函数的 Maple 等效项

matlab - 查找绘图可能与 Octave/Matlab 交叉的位置

algorithm - Go 程序不显示分配给变量的 Sliced Int 的期望结果

matlab - Maple 搞砸了我的 MuPAD Matlab 集成

maple - 在 Maple 中绘制点

r - ggplot2 中的非线性回归线和 R²