Python 使用 curve_fit 拟合数据并计算拟合优度
import pandas as pd
import numpy as np
from scipy.optimize import curve_fit
# 定义拟合函数
def func(b, a):
return 1 - a/b
# 已知的n和b的值
data=pd.read_excel('data3平均.xlsx')
data
n = data[ '孔隙率']
b = data['厚度']
# 将数据转换为NumPy数组
n_values = np.array(n)
b_values = np.array(b)
# 使用curve_fit拟合函数
popt, pcov = curve_fit(func, b_values, n_values)
# 输出拟合参数a的值
a = popt[0]
print('拟合参数a的值:', a)
# 计算拟合优度
def fit_func(b, a):
return 1 - a/b
n_values_fit = fit_func(b_values, a)
ss_res = np.sum((n_values - n_values_fit) ** 2) # 残差平方和
ss_tot = np.sum((n_values - np.mean(n_values)) ** 2) # 总平方和
r_squared = 1 - (ss_res / ss_tot) # 拟合优度
print('拟合优度:', r_squared)
该代码使用 Python 的 scipy.optimize.curve_fit 函数对数据进行非线性拟合,并计算拟合优度 R-squared。
首先,定义了拟合函数 func,该函数接受参数 b 和 a,并返回根据公式 1 - a/b 计算的值。
然后,使用 pandas 读取数据,并获取 孔隙率 和 厚度 两列数据。
接着,将数据转换为 NumPy 数组,并使用 curve_fit 函数进行拟合。curve_fit 函数返回拟合参数 popt 和协方差矩阵 pcov。
最后,输出拟合参数 a 的值,并使用 fit_func 函数计算拟合优度 R-squared。R-squared 的计算公式为 1 - (ss_res / ss_tot),其中 ss_res 是残差平方和,ss_tot 是总平方和。
该代码可以帮助用户使用 Python 进行非线性拟合,并评估拟合结果的优度。
原文地址: https://www.cveoy.top/t/topic/fOpx 著作权归作者所有。请勿转载和采集!