- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
自从我参加了 Python 讲座后,我想用它来拟合我的数据。虽然我现在已经尝试了一段时间,但我仍然不知道为什么这不起作用。
从子文件夹(此处称为“测试”)中取出一个又一个数据文件,稍微转换数据并用洛伦兹函数对其进行拟合。
当我运行下面发布的代码时,它不适合任何东西,在 4 次函数调用后只返回我的初始参数。在一遍又一遍地检查 python 文档后,我尝试缩放数据,尝试使用 ftol
和 maxfev
,但没有任何改进。我还尝试将列表显式更改为 numpy.arrays
,以及对问题 scipy.optimize.leastsq returns best guess parameters not new best fit 的解决方案, x = x.astype(np.float64)
。没提升。奇怪的是,对于少数选定的数据文件,同样的代码在某些时候起作用,但对于大多数人来说它从来没有起作用。它绝对可以拟合,因为 Levenberg-Marquard 拟合例程在 Origin 中给出了相当好的结果。
有人能告诉我哪里出了问题或指出替代方案...?
import numpy,math,scipy,pylab
from scipy.optimize import leastsq
import glob,os
for files in glob.glob("*.txt"):
x=[]
y=[]
z=[]
f = open(files, 'r')
raw=f.readlines()
f.close()
del raw[0:8] #delete Header
for columns in ( raw2.strip().split() for raw2 in raw ): #data columns
x.append(float(columns[0]))
y.append(float(columns[1]))
z.append(10**(float(columns[1])*0.1)) #transform data for the fit
def lorentz(p,x):
return (1/(1+(x/p[0] - 1)**4*p[1]**2))*p[2]
def errorfunc(p,x,z):
return lorentz(p,x)-z
p0=[3.,10000.,0.001]
Params,cov_x,infodict,mesg,ier = leastsq(errorfunc,p0,args=(x,z),full_output=True)
print Params
print ier
最佳答案
如果不查看您的数据,就很难判断哪里出了问题。我生成了一些随机噪声并使用您的代码对其进行拟合。一切正常。此算法不允许参数边界,因此如果您的 p0
接近于零,您可能会遇到问题。我做了以下操作:
import numpy as np
from scipy.optimize import leastsq
import matplotlib.pyplot as plt
def lorentz(p,x):
return p[2] / (1.0 + (x / p[0] - 1.0)**4 * p[1]**2)
def errorfunc(p,x,z):
return lorentz(p,x)-z
p = np.array([0.5, 0.25, 1.0], dtype=np.double)
x = np.linspace(-1.5, 2.5, num=30, endpoint=True)
noise = np.random.randn(30) * 0.05
z = lorentz(p,x)
noisyz = z + noise
p0 = np.array([-2.0, -4.0, 6.8], dtype=np.double) #Initial guess
solp, ier = leastsq(errorfunc,
p0,
args=(x,noisyz),
Dfun=None,
full_output=False,
ftol=1e-9,
xtol=1e-9,
maxfev=100000,
epsfcn=1e-10,
factor=0.1)
plt.plot(x, z, 'k-', linewidth=1.5, alpha=0.6, label='Theoretical')
plt.scatter(x, noisyz, c='r', marker='+', color='r', label='Measured Data')
plt.plot(x, lorentz(solp,x), 'g--', linewidth=2, label='leastsq fit')
plt.xlim((-1.5, 2.5))
plt.ylim((0.0, 1.2))
plt.grid(which='major')
plt.legend(loc=8)
plt.show()
这产生了一个解决方案:solp = array([ 0.51779002, 0.26727697, 1.02946179])
哪个接近理论值:np.array([0.5, 0.25, 1.0])
关于python - Lorentzian scipy.optimize.leastsq 适合数据失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14933569/
我正在使用 SciPy 的 LeastSq 将实验谱拟合到理论期望。当然存在与实验值相关的误差。我如何将这些输入到 LeastSq 或者我是否需要不同的例程?我在文档中找不到任何内容。 最佳答案 sc
我正在研究一个图像分析程序,我已经缩小了我的瓶颈,尝试多次将 2D 高斯拟合到一个小窗口 (20x20) 像素。 90% 的执行时间花在这段代码上。 我正在使用 scipy cookbook 中给出的
我想弄清楚我在这里不明白的是什么。 我正在关注 http://www.scipy.org/Cookbook/FittingData并试图拟合正弦波。真正的问题是卫星磁力计数据,它在旋转的航天器上产生了
我有一个数据表面,我正在使用 SciPy 的 leastsq 函数进行拟合。 我想在 leastsq 返回后对拟合质量进行一些估计。我原以为这会作为函数的返回值包含在内,但如果是这样,似乎没有明确记录
我正在尝试使函数适合我的数据。我有两个不同的轴,x 轴:高度,y 轴:体重。通过目视检查,我可以看到它或多或少给出了在权重 = 10 附近饱和的平方根函数的形状。这是我正在做的: from scipy
我想了解如何设置 python scipy 最小化问题。这是我从 Excel Solver 问题中获取的示例。解释该问题的最简单方法是尝试求解一个非常简单的电网: R1: 100 R2: 1000 R
有谁知道scipy.optimize.leastsq中具体实现了哪种优化算法? 最佳答案 根据 the documentation : “leastsq” is a wrapper around MI
我想用参数 (mu=1, sig=2, height=1) 和传递初始参数 x0 = (0.8, 0.8, 0.9)。 我想知道优化器如何知道参数的顺序。我本可以采用 (mu,height,sig)
基于 https://stackoverflow.com/a/10552563/8235309 ,我正在尝试并行执行 scipy.optimize.leastsq。 xx,yy,zz 是 3D 云点的
除了最后一行,一切正常。我的目标是通过卡方检验计算最佳拟合。 leastsq函数的应用有问题。z,d 和 d_err 是相同长度的数组,给定(实验数据)。 def df(z,omega_m,omega
SciPy 关于 LeastSq 的文档是 here .它指出 ier 是 An integer flag. If it is equal to 1, 2, 3 or 4, the solution
我正在尝试让我的雅可比行列式与 SciPy 的优化库的 leastsq 函数一起工作。 我有以下代码: #!/usr/bin/python import scipy import numpy from
我想将洛伦兹峰拟合到一组数据 x 和 y,数据很好。 OriginLab 等其他程序非常适合它,但我想使用 python 自动进行拟合,所以我有以下基于 http://mesa.ac.nz/?page
如何在 python 中计算最小二乘拟合 (scipy.optimize.leastsq) 的置信区间? 最佳答案 我会使用自举方法。 看这里:http://phe.rockefeller.edu/L
我正在 scipy/numpy 中寻找一个优化例程,它可以解决非线性最小二乘类型问题(例如,将参数函数拟合到大型数据集),但包括边界和约束(例如,最小值和最大值)待优化参数)。目前我正在使用 mpfi
我有两个函数和一组数据。这两个函数具有相同的 x 数据和相同的参数。我想通过最适合我的数据的最小二乘法获得参数。 参数为:ex,ey,ez。 X数据为:RA,DE(比如3000点) Y数据为:dRA,
我正在使用 optimize.leastsq 来拟合数据。我想将拟合参数限制在一定范围内。使用 optimize.leastsq 时是否可以定义边界?边界在 optimize.fmin_slsqp 中
自从我参加了 Python 讲座后,我想用它来拟合我的数据。虽然我现在已经尝试了一段时间,但我仍然不知道为什么这不起作用。 我想做什么 从子文件夹(此处称为“测试”)中取出一个又一个数据文件,稍微转换
我可以从 scipy.optimize.leastsq 模块获取 RMSE 的值吗? 最佳答案 这是一个使用 leastsq 的小例子: import numpy as np import scipy
我试图解决一个小玩具问题 import numpy as np import scipy.optimize as opt def f(a): return np.array([a+.2,a-.
我是一名优秀的程序员,十分优秀!