我有一组数据(位移与时间),我已经使用optimize.leastsq方法拟合了几个方程.我现在希望得到拟合参数的误差值.通过文档查看输出的矩阵是雅可比矩阵,我必须将其乘以残差矩阵以得到我的值.不幸的是,我不是统计学家所以我在术语中有点溺水.
根据我的理解,我需要的是与我的拟合参数一致的协方差矩阵,因此我可以对角元素的平方根来得到拟合参数的标准误差.我有一个模糊的阅读记忆,协方差矩阵无论如何都是来自optimize.leastsq方法的输出.它是否正确?如果不是,您将如何获得残差矩阵乘以输出的雅可比矩阵乘以得到我的协方差矩阵?
任何帮助将不胜感激.我是python的新手,因此如果问题变成一个基本问题就道歉.
拟合代码如下:
fitfunc = lambda p, t: p[0]+p[1]*np.log(t-p[2])+ p[3]*t # Target function'
errfunc = lambda p, t, y: (fitfunc(p, t) - y)# Distance to the target function
p0 = [ 1,1,1,1] # Initial guess for the parameters
out = optimize.leastsq(errfunc, p0[:], args=(t, disp,), full_output=1)
Run Code Online (Sandbox Code Playgroud)
args t和disp是time和displcement值的数组(基本上只有2列数据).我已经导入了代码顶部所需的所有内容.输出提供的拟合值和矩阵如下:
[ 7.53847074e-07 1.84931494e-08 3.25102795e+01 -3.28882437e-11]
[[ 3.29326356e-01 -7.43957919e-02 8.02246944e+07 2.64522183e-04]
[ -7.43957919e-02 1.70872763e-02 -1.76477289e+07 -6.35825520e-05]
[ 8.02246944e+07 -1.76477289e+07 2.51023348e+16 5.87705672e+04]
[ 2.64522183e-04 -6.35825520e-05 5.87705672e+04 2.70249488e-07]]
Run Code Online (Sandbox Code Playgroud)
我怀疑此刻适合有点怀疑.当我可以解决错误时,这将得到确认.
我试图用自定义概率密度函数拟合一些实验值的分布.显然,所得到的函数的积分应该总是等于1,但简单scipy.optimize.curve_fit(功能,dataBincenters,dataCounts)的结果从未满足该条件.解决这个问题的最佳方法是什么?
我正在研究在scipy中拟合3d分布函数.我有一个numpy数组,其中有x和y-bin的计数,我试图将其与一个相当复杂的三维分布函数相匹配.数据适合26(!)参数,这些参数描述了其两个成分群体的形状.
我在这里学到了当我调用leastsq时,我必须将我的x和y坐标作为'args'传递.unutbu提供的代码是为我编写的,但当我尝试将其应用于我的特定情况时,我收到错误"TypeError:leastsq()得到关键字参数'args'的多个值"
这是我的代码(抱歉长度):
import numpy as np
import matplotlib.pyplot as plt
import scipy.optimize as spopt
from textwrap import wrap
import collections
cl = 0.5
ch = 3.5
rl = -23.5
rh = -18.5
mbins = 10
cbins = 10
def hist_data(mixed_data, mbins, cbins):
import numpy as np
H, xedges, yedges = np.histogram2d(mixed_data[:,1], mixed_data[:,2], bins = (mbins, cbins), weights = mixed_data[:,3])
x, y = 0.5 * (xedges[:-1] + xedges[1:]), 0.5 * (yedges[:-1] + yedges[1:])
return H.T, x, y
def gauss(x, s, …Run Code Online (Sandbox Code Playgroud)