- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
一段时间以来,我一直在尝试使用 scipy.optimize.curve_fit 将函数拟合到某些数据:
from __future__ import (print_function,
division,
unicode_literals,
absolute_import)
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as mpl
x = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29])
y = np.array([20.8, 20.9, 22.9, 25.2, 26.9, 28.3, 29.5, 30.7, 31.8, 32.9, 34.0, 35.3, 36.4, 37.5, 38.6, 39.6, 40.6, 41.6, 42.5, 43.2, 44.2, 45.0, 45.8, 46.5, 47.3, 48.0, 48.6, 49.2, 49.8, 50.4])
def f(x, a, b, c):
return a/(1+b*x**c)
popt, pcov = curve_fit(f, x, y)
print(popt, np.sqrt(np.diag(pcov)), sep='\n')
但是总是出现错误:
RuntimeWarning: divide by zero encountered in power
return a/(1+b*x**c)
也许有人可以帮我避免它?任何帮助将非常感激。干杯!
最佳答案
好的,两个有用的技巧。
第一,将 x
中的 0
替换为一些非常小的数字,例如 1e-8
(别笑,有R
中的一个核心包实际上就是这样做的,由 his name shall not be speaked
编写,人们一直在使用它。)实际上我根本没有得到你的RuntimeWarning
。我正在运行 scipy
0.12.0
和 numpy
1.7.1
。也许这取决于版本。
但是我们会得到一个非常不合适的:
In [41]: popt, pcov
Out[41]: (array([ 3.90107143e+01, -3.08698757e+07, -1.52971609e+02]), inf)
所以,技巧 2,我们定义一个 g
函数,而不是优化 f
函数:
In [38]: def g(x, a, b, c):
....: return b/a*x**c+1/a
....:
In [39]: curve_fit(g, x, 1/y) #Better fit
Out[39]:
(array([ 19.76748582, -0.14499508, 0.44206688]),
array([[ 0.29043958, 0.00899521, 0.01650935],
[ 0.00899521, 0.00036082, 0.00070345],
[ 0.01650935, 0.00070345, 0.00140253]]))
我们现在可以使用生成的参数向量作为起始向量来优化 f()
。由于 curve_fit
是非线性最小二乘法,参数优化 g()
不是必需的参数优化 f()
,但希望它会是关闭。当然,协方差矩阵非常不同。
In [78]: curve_fit(f, x, y, p0=curve_fit(g, x, 1/y)[0]) #Alternative Fit
Out[78]:
(array([ 18.0480446 , -0.22881647, 0.31200106]),
array([[ 1.14928169, 0.03741604, 0.03897652],
[ 0.03741604, 0.00128511, 0.00136315],
[ 0.03897652, 0.00136315, 0.00145614]]))
结果对比:
现在效果还不错
关于python - scipy curve_fit 错误 : divide by zero encountered,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20161899/
我构建了一个自定义的 EST(指数平滑)模型。首先,我定义了一个函数,其中包含传递给第二个函数的参数定义,该函数执行计算并返回预测错误。然后将这些平方并求和。然后,最小化器应优化参数,以便最小化平方误
无法解析模板“ASClass”错误信息: This template did not produce a Java class or an interface package com.example.
我正在尝试将我的井字游戏结果输出到数据库。但是,每当两个客户端之间的匹配完成时,我都会遇到此错误。这是我的服务器端代码和错误消息的摘录: 数据库类: import java.sql.*;
我想创建一个过程来检查记录是否存在,然后更新,否则插入。但是,有一个问题我试图解决,但无法解决。请帮助。 CREATE TABLE JOB_RUN ( DATE_KEY VARCHAR2(8), JO
这是我第一次在 derby 查询中创建存储过程。我正在尝试创建一个程序。当我尝试运行查询时,出现错误 Encountered "BEGIN" 代码 CREATE PROCEDURE show_name
当我运行 pyOpenTld 时,我得到 RuntimeWarning: overflow encountered in int_scalars从这个模块。为什么会这样? Warning (from
昨晚将一个disucz论坛进行转移后,发现打开的页面上回多一个PHP has encountered a Stack overflow 这个提示错误,进过翻译为“PHP遇到堆栈溢出”。我就感觉奇怪了
我是机器学习和 numpy 的新手,我一直在尝试在来自 sklearn 的波士顿住房数据集上运行梯度下降我的实现适用于小型随机数据集,但在波士顿数据集中它会产生这些警告 :12: RuntimeWar
我正在尝试在 Windows Server 2008 上使用 TortoiseSVN checkout SVN 存储库。我在 checkout 时收到错误消息“遇到不正确的参数”,仅此而已。知道这里可
我正在尝试使用 Parsec 在 Haskell 中编写解析器。目前我有一个可以解析的程序 test x [1,2,3] end 执行此操作的代码如下 testParser = do { rese
这个问题已经有答案了: Android 8: Cleartext HTTP traffic not permitted (37 个回答) 已关闭 3 年前。 我正在 Android Studio 上构
我在 angular.js 中定义了一个空模块: angular.module('todoList', [], function () { }) 然后我想在我的 conf.js 中测试它,我加载这些j
当使用OpenJPA在内存数据库org.apache.derby中执行select语句时,遇到以下错误: javax.ejb.EJBException: The bean encountered a
我需要开始处理外来字符,在这样做的过程中,我想我真的搞砸了文件的编码。 我得到的错误是: Lexical error at line 1, column 8. Encountered: "" (0)
我试图在 Python 中创建一个 sigmoid 函数,但是,我收到以下错误: RuntimeWarning: overflow encountered in exp 这是我的代码: def sig
我有三个耦合的常微分方程,我在 python 中使用 RK4 方法在给定的初始条件下求解它们。当我运行它们时,我收到以下错误: RuntimeWarning: overflow encountered
我是 Hadoop 和 Pig 的初学者。我检查了在cloudera虚拟镜像中证明的例子,并对其进行了修改以计算前5个常用词: Lines = LOAD '/user/hue/pig/examples
我是 Python 的新手,这是我编写脚本的第一件事,我只是想知道我能做些什么来删除这个警告: Warning (from warnings module): File "C:\Users\Lur
我正在编写一个 UNIX paste 克隆。然而,我不断收到“遇到断点”消息,但 VS 不会告诉我发生在哪一行。 #include #include #define INITALLOC 16
无论我是在 Visual Studio 2017 中同步还是只是使用 Git Bash 进行推送,我都会不断收到此错误。看起来 PUSH/PULL 命令有效,但我仍然看到此错误并希望它消失。 我的 W
我是一名优秀的程序员,十分优秀!