如何实现仅含偶次项的多项式拟合及系数有效性验证
问题解答
1. 仅含偶次项的4阶多项式拟合与系数获取
普通的np.polyfit会生成包含0到4次所有项的多项式,要只保留偶次项(常数项、x²、x⁴),需要手动构造特征矩阵,将输入的振幅值转换为对应偶次幂的特征,再通过最小二乘法求解系数。
具体实现代码:
import numpy as np import matplotlib.pyplot as plt # 修正数据提取(假设name是pandas DataFrame) amp = name['amplitude'].values energy1 = name['solar'].values # 构造偶次项特征矩阵:每一行对应 [1, x², x⁴] X = np.column_stack([np.ones_like(amp), amp**2, amp**4]) # 最小二乘拟合求解系数 coeffs, _, _, _ = np.linalg.lstsq(X, energy1, rcond=None) a0, a2, a4 = coeffs # 分别对应常数项、x²项、x⁴项的系数 # 定义仅含偶次项的拟合函数 def even_degree_fit(x): return a0 + a2 * x**2 + a4 * x**4 # 可视化拟合结果 x1 = np.linspace(-1.6, 1.6, 100) plt.plot(amp, energy1, 'b^', label="solar", markersize=12) plt.plot(x1, even_degree_fit(x1), 'b', linewidth=2.0, label='Even-degree fit') plt.legend() plt.show() # 输出拟合系数 print(f"偶次项拟合系数:") print(f"常数项a0 = {a0:.4f}") print(f"x²项系数a2 = {a2:.4f}") print(f"x⁴项系数a4 = {a4:.4f}")
2. 验证特定amplitude下的拟合值与原始数据匹配
选取目标振幅值,从原始数据中提取对应的energy1,再用拟合函数计算该振幅的预测值,通过对比两者的误差来验证匹配程度(注意浮点精度问题,用np.isclose匹配数值)。
具体实现代码:
# 指定要验证的amplitude值 target_amp = 1.2 # 可替换为你需要验证的数值 # 从原始数据中找到对应amplitude的energy1(处理浮点精度) match_indices = np.isclose(amp, target_amp) if np.any(match_indices): original_energy = energy1[match_indices][0] predicted_energy = even_degree_fit(target_amp) # 输出对比结果 print(f"=== 验证amplitude={target_amp} ===") print(f"原始energy1: {original_energy:.4f}") print(f"拟合预测值: {predicted_energy:.4f}") print(f"绝对误差: {abs(original_energy - predicted_energy):.6f}") print(f"相对误差: {abs(original_energy - predicted_energy)/original_energy:.6%}") else: print(f"原始数据中没有找到接近{target_amp}的amplitude值")
内容的提问来源于stack exchange,提问作者Bip
相关产品推荐
相关产品推荐

