标签: curve-fitting

ValueError:使用optimize.curve时,操作数无法与形状(0)(26)一起广播

我正在尝试为我的脚本生成的一些数据找到最适合的线。这就是我所拥有的:

import numpy as np
import scipy as sp
.
.
.
def func(x, a, b, c):
    return a*np.exp(-b*x) + c
popt, pcov = sp.optimize.curve_fit(func, numgelt, turnsG)
Run Code Online (Sandbox Code Playgroud)

我不断收到此错误:

ValueError: operands could not be broadcast together with shapes (0) (26)
Run Code Online (Sandbox Code Playgroud)

我已经检查过,两个数组(numgelt 和turnsG)的大小绝对相同。我还确保条目是浮动的。谢谢你!

curve-fitting

3
推荐指数
1
解决办法
7152
查看次数

在直方图python中拟合非标准化高斯

我有一个深色图像(原始格式),并绘制了图像和图像的分布。正如您所看到的,16 处有一个峰值,请忽略它。我想通过这个直方图拟合高斯曲线。我使用这种方法来拟合: Un-normalized Gaussian curve on histogram。然而; 我的高斯拟合从来没有接近它应该的样子。我在将图像转换为正确的绘图格式时是否做错了什么,或者还有其他问题吗? 在此输入图像描述 图像的高斯分布

这是我用来生成此数据的当前代码:

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

def fitGaussian(x,a,mean,sigma):
    return (a*np.exp(-((x-mean)**2/(2*sigma))))

fname = 'filepath.raw'
im = np.fromfile(fname,np.int16)
im.resize([3056,4064])

plt.figure()
plt.set_cmap(viridis)
plt.imshow(im, interpolation='none', vmin=16, vmax=np.percentile(im.ravel(),99))
plt.colorbar()
print 'Saving: ' + fname[:-4] + '.pdf'
plt.savefig(fname[:-4]+'.pdf')

plt.figure()
data = plt.hist(im.ravel(), bins=4096, range=(0,4095))

x = [0.5 * (data[1][i] + data[1][i+1]) for i in xrange(len(data[1])-1)]
y = data[0]

popt, pcov = curve_fit(fitGaussian, x, y, [500000,80,10])
x_fit = py.linspace(x[0], x[-1], 1000) …
Run Code Online (Sandbox Code Playgroud)

python matplotlib curve-fitting data-fitting

3
推荐指数
1
解决办法
6907
查看次数

如何在 python 中使用 pcov 来获取每个参数的错误?

我有一个代码并使用 curve_fit 将洛伦兹曲线和高斯曲线拟合到数据。我需要获得输出的每个参数的错误估计,因此打印了 popt 和 pcov 我知道 scipy 参考指南说明了如何使用 pcov 矩阵来查找错误,但这对我来说不清楚,因为我是编程新手。谢谢

python curve-fitting

3
推荐指数
1
解决办法
2万
查看次数

curve_fit拟合高度相关数据的问题

对于我的学士论文,我正在研究一个项目,我想对一些数据进行拟合。问题有点复杂,但我试图在这里最小化问题:

我们有三个数据点(可用的理论数据很少),但这些点高度相关。

使用 curve_fit 来拟合这些点,我们得到了一个可怕的拟合结果,正如您在这张图中看到的那样。(通过手动更改拟合参数可以轻松改善拟合)。

我们的拟合结果具有相关性(蓝色)和被忽略的相关性(橙色):

在此输入图像描述

当我们使用更多参数时,结果会更好(因为那时拟合的行为本质上就像求解一样)。

我的问题:为什么会出现这种行为?(我们使用自己的最小二乘算法来解决我们的特定问题,但它也遇到了同样的问题)。这是一个数值问题,还是有什么充分的理由让 curve_fit 显示这个解决方案?

我很高兴能有一个很好的解释来说明为什么我们不能使用“仅 2 个”参数来拟合这三个高度相关的数据点。

import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
plt.rcParams['lines.linewidth'] = 1

y = np.array([1.1994, 1.0941, 1.0047])
w = np.array([1, 1.08, 1.16])
cor = np.array([[1, 0.9674, 0.8812],[0.9674, 1, 0.9523], [0.8812, 0.9523, 1]])
s = np.array([0.0095, 0.0104, 0.0072])

def f(x, a, b):
    return a + b*x

cov = np.zeros((3,3))
for i in range(3):
    for j in range(3):
        cov[i,j] = cor[i,j] * s[i] * s[j]

A1, …
Run Code Online (Sandbox Code Playgroud)

python physics curve-fitting scipy data-science

3
推荐指数
1
解决办法
1696
查看次数

在 python 中使用 scipy 的 curvefit 拟合 boxcar 函数时出现问题

我无法让这个棚车适合工作......我得到“ OptimizeWarning:无法估计参数的协方差类别= OptimizeWarning)”,并且输出系数没有改善超出起始猜测。

import numpy as np
from scipy.optimize import curve_fit
def box(x, *p):
    height, center, width = p
    return height*(center-width/2 < x)*(x < center+width/2)

x = np.linspace(-5,5)
y = (-2.5<x)*(x<2.5) + np.random.random(len(x))*.1

coeff, var_matrix = curve_fit(box, x, y, p0=[1,0,2])
Run Code Online (Sandbox Code Playgroud)

输出系数是[ 1.04499699, 0., 2.],并不是说第三个系数没有改变。

我怀疑这个函数形式不适合 curve_fit 使用的 levenberg-marquardt 算法,这有点烦人,因为我喜欢这个函数。相反,在 mathematica 中指定蒙特卡罗优化是微不足道的。

python curve-fitting scipy

3
推荐指数
1
解决办法
1375
查看次数

指数曲线拟合将不拟合

当尝试绘制一组数据的指数曲线时:

import matplotlib
import matplotlib.pyplot as plt
from matplotlib import style
from matplotlib import pylab
import numpy as np
from scipy.optimize import curve_fit

x = np.array([30,40,50,60])
y = np.array([0.027679854,0.055639098,0.114814815,0.240740741])

def exponenial_func(x, a, b, c):
    return a*np.exp(-b*x)+c

popt, pcov = curve_fit(exponenial_func, x, y, p0=(1, 1e-6, 1))

xx = np.linspace(10,60,1000)
yy = exponenial_func(xx, *popt)

plt.plot(x,y,'o', xx, yy)
pylab.title('Exponential Fit')
ax = plt.gca()
fig = plt.gcf()

plt.xlabel(r'Temperature, C')
plt.ylabel(r'1/Time, $s^-$$^1$')

plt.show()
Run Code Online (Sandbox Code Playgroud)

上述代码的图表:

拟合数据点的指数曲线。 点击放大。

但是,当我添加数据点20(x) 和0.015162344(y) 时:

import matplotlib
import matplotlib.pyplot …
Run Code Online (Sandbox Code Playgroud)

python curve-fitting scipy

3
推荐指数
1
解决办法
3333
查看次数

具有不等长向量的多变量非线性回归

我试图将一些数据拟合到具有两个自变量的非线性模型中,但是两个自变量的向量长度xdat小于ydat.

这是密切相关的这样一个问题:Python的curve_fit具有多个独立变量,但要求是xdatydat不同的尺寸似乎打破东西。

让我们以 xnx 的示例解决方案为例,但更改其中一个数组的长度:

import numpy as np
from scipy.optimize import curve_fit

def func(X, a, b, c):
    x,y = X
    return np.log(a) + b*np.log(x) + c*np.log(y)

# some artificially noisy data to fit
x = np.linspace(0.1,1.1,101)
y = np.linspace(1.,2., 90) #I have changed the length of one of these arrays
a, b, c = 10., 4., 6.
z = func((x,y), a, b, c) * 1 + np.random.random(101) / 100 …
Run Code Online (Sandbox Code Playgroud)

python curve-fitting

3
推荐指数
1
解决办法
1936
查看次数

将对数曲线拟合到数据点并在 numpy 中推断

我有一组数据点(代码中的 x 和 y)。我想绘制这些点,并为它们拟合一条曲线,显示使 y = 100.0 所需的 x 值(y 值是百分比)。这是我尝试过的,但我的曲线是 3 次多项式(我知道这是错误的)。对我来说,数据看起来是对数的,但我现在知道如何将对数曲线与我的数据进行多重拟合。

import numpy as np
import matplotlib.pyplot as plt

x = np.array([4,8,15,29,58,116,231,462,924,1848])
y = np.array([1.05,2.11,3.95,7.37,13.88,25.46,43.03,64.28,81.97,87.43])

for x1, y1 in zip(x,y):
    plt.plot(x1, y1, 'ro')

z = np.polyfit(x, y, 3)
f = np.poly1d(z)

for x1 in np.linspace(0, 1848, 110):
    plt.plot(x1, f(x1), 'b+')

plt.show()
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止得到的

python numpy matplotlib curve-fitting

3
推荐指数
1
解决办法
6778
查看次数

使用可变长度多项式拟合曲线

我是 Python 新手(以及一般编程),想使用 进行多项式拟合curve_fit,其中多项式的顺序(或拟合参数的数量)是可变的。

我制作了这段代码,它适用于固定数量的 3 个参数 a,b,c

# fit function
def fit_func(x, a,b,c):
    p = np.polyval([a,b,c], x)
    return p

# do the fitting
popt, pcov = curve_fit(fit_func, x_data, y_data)
Run Code Online (Sandbox Code Playgroud)

但是现在我想让我的 fit 函数只依赖于一些N参数而不是a,b,c,....

我猜这不是一件很难的事情,但由于我的知识有限,我无法让它发挥作用。

我已经看过这个问题,但我无法将它应用于我的问题。

curve-fitting scipy python-3.x

3
推荐指数
1
解决办法
1176
查看次数

尝试使用 scipy 将三角函数拟合到数据

我正在尝试使用scipy.optimize.curve_fit. 我已经阅读了文档这篇 StackOverflow 帖子,但似乎都没有回答我的问题。

我有一些简单的 2D 数据,它们看起来近似于一个三角函数。我想使用scipy.

我的方法如下:

from __future__ import division
import numpy as np
from scipy.optimize import curve_fit



#Load the data
data = np.loadtxt('example_data.txt')
t = data[:,0]
y = data[:,1]


#define the function to fit
def func_cos(t,A,omega,dphi,C):
    # A is the amplitude, omega the frequency, dphi and C the horizontal/vertical shifts
    return A*np.cos(omega*t + dphi) + C

#do a scipy fit
popt, pcov = curve_fit(func_cos, t,y)

#Plot fit …
Run Code Online (Sandbox Code Playgroud)

python curve-fitting scipy scipy-optimize

3
推荐指数
1
解决办法
79
查看次数