如何在Python中实现观测数据与预测等时线数据的对齐拟合
天文观测数据与等时线的XY偏移最佳拟合问题
补充信息
- 观测数据、等时线(预测数据)均可从公开文本资源获取
问题描述
我需要将天文观测数据与等时线(一种非函数型的预测模式)进行最佳拟合,核心需求是通过调整预测数据的X、Y轴偏移量,匹配观测数据中2<y<6区间内的平滑曲线段(该曲线段在所有等时线中均存在)。
由于等时线并非函数,无法直接使用scipy.curve_fit工具。
已尝试方案
多项式拟合实现水平偏移
我先对等时线目标区域拟合40次多项式,再结合scipy.curve_fit实现了水平偏移,代码如下:
poly_coeffs = np.polyfit(iso_g, iso_bprp, deg=40) poly = np.poly1d(poly_coeffs) # 可视化 fig = plt.figure(figsize=(10,8)) ax = fig.add_subplot() ax.plot(iso_bprp, iso_g) ax.plot(poly(iso_g), iso_g) ax.set_xlabel(r'Colour Index [$Bp - Rp$]', fontsize=20) ax.set_ylabel('G Mag', fontsize=20) ax.invert_yaxis() ax.tick_params(axis='both', which='major', labelsize=15) plt.show()
该方案成功得到了等时线多项式拟合结果,并实现了预期的水平偏移效果。
XY偏移尝试失败
当我在拟合函数中加入垂直偏移参数后,无法实现有效的垂直偏移,代码如下:
def fit(x, xshift, yshift): return poly(x + xshift) + yshift parameters, covariance = curve_fit(fit, data_g, data_bprp) # 可视化 fig = plt.figure(figsize=(10,8)) ax = fig.add_subplot() ax.plot(poly(iso_g), iso_g, label='Original Curve') ax.scatter(data_bprp, data_g, s=0.5) ax.plot(fit(iso_g, parameters[0], parameters[1]), iso_g, label='XY Shifted Curve') ax.set_xlabel(r'Colour Index [$Bp - Rp$]', fontsize=20) ax.set_ylabel('G Mag', fontsize=20) ax.invert_yaxis() ax.tick_params(axis='both', which='major', labelsize=15) plt.legend() plt.show()
运行后得到的XY偏移效果不符合预期,垂直偏移未生效。
寻求建议
我相信存在更合适的方法实现这一拟合需求,但尚未找到,希望能得到相关思路或解决方案。
内容的提问来源于stack exchange,提问作者sshamsi
相关产品推荐
相关产品推荐

