【发布时间】:2020-07-31 12:27:31
【问题描述】:
我正在使用斜率方法计算函数的导数。我需要放大图表以查看实际发生的情况,但数据点太低而无法给出平滑曲线。因此,当我增加循环中的迭代次数时,程序会给出 RuntimeWarning 的错误:在 true_divide 中遇到除以零。该函数是红色的,它的绿色导数图如下所示:
从这里可以看出,曲线并不平滑,即缺少数据点。我正在使用 for 循环来迭代我的程序,当我增加范围时它会给出错误。计算是通过使用数值方法完成的,我只使用 0.0001 的步长值。之后,该程序不提供正确的值。在这里可以做什么?
【问题讨论】:
-
那么不要除以零。在功能评估期间会发生这种情况吗?数值导数公式没有除以可能为零的项。评估点不应该太接近发生灾难性取消。
-
它是 arctan 的函数(见上文 RED),我计算了该图的斜率。问题是 x 轴上的行为在非常低的值处发生变化(如您在此处看到的 0.0005),这实际上是我系统中的波长,所以物理学没有错。所以图表的行为是正确的,但不幸的是,当我深入计算时,浮点数会变为 idk 小数位,因此无法完成计算。对不起,我是物理学家而不是程序员,所以我无法清楚地看到问题。我已经更新了问题请看
-
这看起来对于某些值,您得到了错误的弧切线分支。我将从纠正这种行为开始,以使红色曲线没有奇点。
-
你能尝试用一个简化的例子来获得类似的行为吗?在充分增加样本点的数量后,我在 gnuplot 中得到了一个与
pl [-1:1] atan(1/(x-0.01))+atan(1/(x+0.01))+((x<0)?2*pi:0)相似的图形。 -
对不起,我之前不清楚,这种接近零的行为就是我们所说的系统共振,我们只对系统的那一部分感兴趣,即共振发生了什么.我添加了红色曲线的放大照片。是的,我已经尝试绘制更简单的版本,在该版本中,它制作了一个可以理解的 S 形曲线,并且在接近零值时它不会表现出奇怪的行为,但是当我们将不同的参数添加到系统中时,它开始表现得很奇怪。而且我只运行了 10k 次迭代,我相信我应该能够做更多的事情。
标签: python matplotlib scipy data-science numerical-methods