【发布时间】:2019-12-29 15:28:09
【问题描述】:
我正在尝试在 python 中进行曲线拟合,其中包括无限求和。
我总是出错。
from mpmath import nsum, exp, inf
import numpy as np
import pylab
from scipy.optimize import curve_fit
# get the data
y=[]
x=[]
for t in range(0,100,10):
x += [t]
y += [round(float((nsum(lambda n: exp(-(0.0002)*(n)*t),[0, inf]))),3)]
print(y)
# curve fitting
def test(t,D):
return [round(float((nsum(lambda n: exp(-(D)*(n)*t),[0, inf]))),3)]
parameters, params_covariance=curve_fit(test, x, y)
print(parameters)
我希望我可以从曲线拟合函数中得到估计的 D 但我总是得到错误:
TypeError: cannot create mpf from array([mpf('0.0'), mpf('0.0'), mpf('0.0'), mpf('0.0'), mpf('0.0'),
mpf('0.0'), mpf('0.0'), mpf('0.0'), mpf('0.0'), mpf('0.0')],
dtype=object)
谢谢!
【问题讨论】:
-
请将所有导入语句添加到您发布的代码中,以便我可以运行与您正在运行的完全相同的代码。
-
包含 complete 回溯也会有所帮助,因此我们可以看到错误发生的位置。
-
另外,请仔细查看错误消息。该代码试图在某处创建
mpf对象。所以(查看mpmath的文档)它需要单个float或str或int或其他mpf。但它得到一个numpy数组mpf。因此出现错误。 -
@RolandSmith 我同意,因为错误标记为“TypeError”,数据类型(dtype)显示为“dtype=object”。我认为如果从非常紧凑的 lambda 表达式中取出 nsum 并尽可能将其单独放置在一行上以进行隔离,那么这将更容易排除故障。一旦故障排除并解决了类型错误,就可以轻松地重构 lambda。
标签: python python-3.x curve-fitting