Python如何实现曲线拟合并基于拟合曲线计算新温度数组对应的alpha值
实现方案
方案1:基于scipy.optimize.curve_fit(已知拟合函数形式时使用)
你提到的curve_fit返回的是拟合参数和协方差矩阵,你只需要把参数代入你定义的拟合函数,封装成可调用对象即可,示例如下:
import pandas as pd import numpy as np from scipy.optimize import curve_fit def alpha_fit(temp): # 读取原始数据 csv = pd.read_csv('temp_alpha_file.csv', header=None, names=['temp','alpha']) temp0 = csv['temp'] alpha0 = csv['alpha'] # 第一步:定义你的拟合函数形式,这里用二次多项式举例,可根据实际理论公式修改 def fit_func(x, a, b, c): return a * x**2 + b * x + c # 第二步:用curve_fit获取拟合参数,不需要协方差矩阵就用_接收丢弃 popt, _ = curve_fit(fit_func, temp0, alpha0) # 第三步:封装成你要的可调用计算函数 def make_alpha(x): return fit_func(x, *popt) # 计算返回结果 alpha = make_alpha(temp) return alpha
方案2:直接生成可调用拟合函数(未知理论公式时使用)
如果不需要明确拟合参数,只需要得到温度到alpha的映射关系,可以用多项式拟合或者样条插值,一步得到可调用对象,完全符合你期望的magic_curve_fit效果:
示例:3次多项式拟合
import pandas as pd import numpy as np def alpha_fit(temp): csv = pd.read_csv('temp_alpha_file.csv', header=None, names=['temp','alpha']) temp0 = csv['temp'] alpha0 = csv['alpha'] # 直接得到可调用的拟合函数,3表示3次多项式,可根据拟合精度调整次数 make_alpha = np.poly1d(np.polyfit(temp0, alpha0, 3)) alpha = make_alpha(temp) return alpha
示例:样条插值(更适合非线性、波动大的散点)
import pandas as pd import numpy as np from scipy.interpolate import UnivariateSpline def alpha_fit(temp): csv = pd.read_csv('temp_alpha_file.csv', header=None, names=['temp','alpha']) # 样条插值需要先把原始数据按温度升序排序 csv_sorted = csv.sort_values('temp') temp0 = csv_sorted['temp'] alpha0 = csv_sorted['alpha'] # s参数控制拟合平滑度,s=0时会完全穿过所有原始散点 make_alpha = UnivariateSpline(temp0, alpha0, s=0) alpha = make_alpha(temp) return alpha
优化提示
如果你的alpha_fit函数会被多次调用,建议把读取CSV、生成make_alpha的逻辑放到函数外部,避免每次调用都重复读文件和拟合,提高运行效率。
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

