【发布时间】:2015-02-03 18:02:27
【问题描述】:
我正在从事一个分析数据的项目,并尝试使用最小二乘法(内置)来做到这一点。我找到了一个提供代码作为示例的教程,并且效果很好:
x = arange(0, 6e-2, 6e-2/30)
A, k, theta = 10, 1.0/3e-2, pi/6
y_true = A*sin(2*pi*k*x+theta)
y_meas = y_true+2*random.randn(len(x))
def residuals(p, y, x):
A, k, theta = p
print "A type" + str(type(A))
print "k type" + str(type(k))
print "theta type" + str(type(theta))
print "x type" + str(type(x))
err = y - A*sin(2*pi*k*x+theta)
return err
def peval(x, p):
return p[0]*sin(2*pi*p[1]*x+p[2])
p0 = [8,1/2.3e-2,pi/3]
plsq = leastsq(residuals, p0, args=(y_meas, x))
print(plsq[0])
但是,当我尝试将其转移到我自己的代码时,它会不断抛出错误。我已经为此工作了一段时间,并设法消除了所有早期困扰我的类型不匹配问题。据我所知,目前这两段代码几乎相同,但我收到了错误 “不支持的操作数类型”,无法弄清楚下一步该做什么。这是我的代码中与我的代码有关的这个问题的部分:
if (ls is not None):
from scipy.optimize import leastsq
p0 = [8, 1/2.3e-2,pi/3]
def residuals(p, y, x):
A,k,theta = p
if (type(x) is list):
x = asarray(x)
err = y - A*sin(2*pi*k*x+theta) #Point of error
return err
def peval(x, p):
return p[0]*sin(2*pi*p[1]*x+p[2])
plsq = leastsq(residuals, p0, args=(listRelativeCount, listTime))
plsq_0 = peval(listTime, plsq[0])
其中 listTime 是在 listRelativeCount 中找到的数据的 x 值。我已经标记了代码当前失败的行。任何帮助都将不胜感激,因为我已经在这个问题上停留了一个多月。
【问题讨论】:
-
listRelativeCount是一个列表吗? -
能否请您包含完整的回溯?
-
你能给出
residuals、listRelativeCount和listTime的样本数据吗?
标签: python numpy least-squares