尝试将数据拟合到曲线并获得“OptimizeWarning:Covariance of the parameters could not be estimated“scipy

s6fujrry  于 5个月前  发布在  其他
关注(0)|答案(1)|浏览(102)

我有一些来自风洞的实验数据,我试图用这些数据拟合一条曲线,并从中确定x轴截距,但似乎无法正确拟合。
我的实验数据图:


的数据
理想的情节:



我的x和y的数组如下:

x = [0.05068111 0.04818916 0.04882654 0.05214874 0.05944521 0.07145887 0.0815519  0.09417571 0.11834393]

y = [0.0963202  0.22971568 0.36601308 0.50110841 0.63746987 0.77172614 0.85511004 0.90326404 0.94890827]

x = CD[3:12]
y = CL[3:12]

print(x)
print(y)

def fit_func(x, Cdmin, k1, Clmind):
    return ((x-Cdmin)/k1)**0.5 + Clmind

params = curve_fit(fit_func, x, y)

[Cdmin, k1, Clmind] = params[0]

print([Cdmin, k1, Clmind])

字符串

u7up0aaq

u7up0aaq1#

主要问题是你试图拟合一个非函数,因为这里的一个x值有两个y值。但是如果你颠倒关系并将Cd计算为Cl的函数,它就可以工作。
此外,当包含所有数据点时,拟合不是很好。我怀疑最后的一些非理想条件。当省略最后两个点时,你会得到更好的拟合。

from matplotlib import pylab
from scipy.optimize import curve_fit

x = [0.05068111, 0.04818916, 0.04882654, 0.05214874, 0.05944521, 0.07145887, 0.0815519,  0.09417571, 0.11834393]
y = [0.0963202,  0.22971568, 0.36601308, 0.50110841, 0.63746987, 0.77172614, 0.85511004, 0.90326404, 0.94890827]

x2 = x[:-2]  # removing last two data points
y2 = y[:-2]

def cd_calc(cl, Cdmin, k1, Clmind):
    return k1 * (cl - Clmind) ** 2 + Cdmin

params, cov_param = curve_fit(cd_calc, y2, x2)
print(params)

x_hat = [cd_calc(y_i, *params) for y_i in y]
print(x_hat)

pylab.plot(x, y, "b.")
pylab.plot(x_hat, y, "k-")
pylab.xlabel("Cd")
pylab.xlabel("Cl")
pylab.grid()
pylab.show()

字符串
结果图:


的数据
但是我得到的是k1=0.1,而不是你想要的0.70.85,那么曲率就会比你的数据点强得多。

相关问题