python由散点拟合曲线及求函数的反函数
2023-05-28 本文已影响0人
丙吉
问题,由散点图去拟合曲线,得出的曲线,再由y值算x值,原始数据如下:
image.png解决方法,先用scipy中的curve_fit函数,得出函数的参数(得先写出函数式)
from scipy.optimize import curve_fit
# 自定义函数
def func(x, a, b):
return a*x+b
#调用曲线拟合
popt, pcov = curve_fit(func, df['x'], df['y'])
yvals = func(df['x'], *popt)
import matplotx
with plt.style.context(matplotx.styles.pitaya_smoothie['light']):
fig = plt.figure(figsize=(9,9))
plot1= plt.plot(df['x'],df['y'], '*',label='original values')
plot3= plt.plot(df['x'], yvals, 'b', label='linear regression fit values')
plt.legend(loc=1)
plt.title('曲线拟合')
plt.show()
image.png
由y 计算x时需要计算反函数
from pynverse import inversefunc
a = popt[0]
b = popt[1]
cube = (lambda x: a*x+b)
# 由y值计算x值
inv_func = inversefunc(cube, y_values=13765)
inv_func
结果为:-39.249527