2022年 11月 5日

Python非线性拟合笔记

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

# 自定义的拟合函数
def func2(x, p, q,m):
    return m*(1-np.exp(-x*(p+q)))/(1+q/p*np.exp(-(p+q)*x))

# 要拟合的数据点
x2 = np.array([1,2,3,4,5,6,7,8,9,10])
y2 = np.array([0.16,0.63,1.60,3.00,8.00,33.0,73.0,125.0,211.0,310.0])

# 开始拟合
popt, pcov = curve_fit(func2, x2, y2)

# 提取拟合结果
p = popt[0] 
q = popt[1]
m = popt[2]

# 测试
yvals2 = func2(x2,p,q,m) #拟合y值
print('popt:', popt)
print('系数p:', p)
print('系数q:', q)
print('系数m:', m)
print('系数pcov:', pcov)
print('系数yvals2:', yvals2)

xx2 = np.arange(1,21)
yy2 = func2(xx2,p,q,m)

#绘图
plot1 = plt.plot(x2, y2, 's',label='original values')
plot2 = plt.plot(xx2, yy2, 'r',label='polyfit values')
plt.xlabel('x2')
plt.ylabel('y2')
plt.legend(loc=4) #指定legend的位置右下角
plt.title('curve_fit')
plt.show()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

————————————————
版权声明:本文为CSDN博主**「BkbK-」**的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/BlacKingZ/article/details/119985295