scipy 在python中使用curve_fit拟合数据

mtb9vblg  于 2022-11-10  发布在  Python
关注(0)|答案(1)|浏览(276)

我 尝试 在 python 中 拟合 数据 , 以 获得 最 佳 拟合 的 系数 。
我 需要 拟合 的 方程 是 :
Vs = a * ( qt ^ b ) * ( fs ^ c ) * ( ov ^ d )
这里 我 有 qt , fs 和 ov 的 数据 , 需要 得到 a , b , c , d 的 值 。
我 使用 的 代码 是 :

import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

qt = [10867.073,    8074.986,   2208.366,   3066.566,   2945.326,   4795.766,   2249.813,   2018.3]
fs = [229.6,    17.4,   5.3,    0.1,    0.1,    0.1,    0.1,    0.1]     
ov = [19.159,   29.054, 37.620, 44.854, 51.721, 58.755, 65.622, 72.492]  
Vs = [149.787,  125.3962,   133.927,    110.047,    149.787,    137.809,    201.506,    154.925] 
d = [1.018, 1.518,  2.0179, 2.517,  3.017,  3.517,  4.018,  4.52]

def func(a, b, c, d):   
return a*qt**b*fs**c*ov**d

popt, pcov = curve_fit(func, Vs, d) 
print(popt[0], popt[1], popt[2])
plt.plot(Vs, d, 'ro',label="Original Data") 
plt.plot(Vs, func(Vs,*popt), label="Fitted Curve") 
plt.gca().invert_yaxis() 
plt.show()

中 的 每 一 个
它 会 产生 以下 输出 ( 有效 数字 由 我 剪切 ) :
-0.1413381 -0.3553966 之间 的 关系

我 希望 得到 一些 更 像 下面 的 数据 , 它 适合 , 但 它 还 没有 做 得 很 完美 ( 注意 下面 的 一 个 只是 一 个 例子 , 是 不 正确 的 ) 。


语言

kx7yvsdv

kx7yvsdv1#

主要的问题是结果的图形表示。所绘制的内容没有意义:即使有完美的数据和完美的拟合,这些点也会显得非常分散。这是误导。
最好画出(计算得出的Vs)除以(数据得出的Vs),并与1进行比较,如果拟合完美,则1应为准确值。
请注意,您的问题是对数标度的简单线性回归。
ln(Vs)= A + B * ln(qt)+ c * ln(fs)+ d * ln(ov)
线性回归直接给出A,B,c,d和a = exp(A)。

相关问题