首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多变量curve_fit

多变量curve_fit
EN

Stack Overflow用户
提问于 2022-05-31 12:23:39
回答 1查看 73关注 0票数 0

我试着做一个曲线拟合的测量数据,从一个拖油箱车厢。由于运输在测试期间移动,有两个输入变量,即时间t和位置x。

python说,popt有5个结果,而不是我预期的4个结果。

我想出了以下脚本:

代码语言:javascript
复制
import scipy.optimize

x = np.zeros( len(data_foil[str(rn)]['src1']['time']))
for j in range(1,len(data_foil[str(rn)]['src1']['time'])):
    x[j] = x[j-1] + data_rough[str(rn)]['src1']['Vm'][j]*0.001

yy = data_rough[str(rn)]['src1']['Whm1']
t = data_rough[str(rn)]['src1']['time']
t = np.array(t)
yy = np.array(yy)
ff = np.fft.fftfreq(len(t), (t[1]-t[0]))   # assume uniform spacing Fast Fourier Transformation
Fyy = abs(np.fft.rfft(yy))
guess_freq = abs(ff[np.argmax(Fyy[1:])+1])   # excluding the zero frequency "peak", which is related to offset
guess_amp = np.std(yy) * 2.**0.5
guess_offset = np.mean(yy)
guess = np.array([guess_amp, 2.*np.pi*guess_freq, 0.1, guess_offset])
g=9.81
def cosfunc(X, t, zeta_a, omega, p, c):
    g=9.81
    x,t = X
    return zeta_a * np.cos((omega**2/g)*x - omega*t + p) + c

popt, pcov = scipy.optimize.curve_fit(cosfunc, (x, t), yy, p0=guess)
zeta_a, k, omega, p, c = popt
EN

回答 1

Stack Overflow用户

发布于 2022-05-31 13:26:06

scipy.optimize.curve_fit中使用的函数“将自变量作为第一个参数,参数作为单独的其余参数”(源:文档)。

您的函数cosfunc有自变量作为前两个参数。因此,curve_fit假设第二个参数(t)是要优化的参数,因此它输出5个参数。

cosfunc定义更改为将元组作为第一个参数应该可以解决您的问题。我认为这就是您想要做的,正如您的x,t = X行所建议的那样。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72447746

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档