You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中计算不同点数曲线间的最大相对误差?

Python计算不同点数曲线的最大相对误差

核心逻辑

要对比两条数据点数量不同的曲线,首先得把它们对齐到相同的x坐标集合上。完全可以基于数据点较少的曲线A来处理:对曲线B做插值,得到B在A的每个x点上的对应值,之后就能逐点计算相对误差,再找出最大值。

实现步骤

1. 准备数据

假设你的数据是类似这样的结构(替换成你自己的真实数据即可):

import numpy as np

# 曲线A:20个数据点
x_a = np.linspace(0, 10, 20)  # A的x轴数据
y_a = np.sin(x_a) + np.random.normal(0, 0.1, 20)  # A的y轴数据

# 曲线B:30个数据点
x_b = np.linspace(0, 10, 30)  # B的x轴数据
y_b = np.sin(x_b) + np.random.normal(0, 0.05, 30)  # B的y轴数据

2. 对曲线B插值,匹配A的x点

用scipy的插值工具,把B的曲线映射到A的所有x坐标上:

from scipy.interpolate import interp1d

# 创建B的插值函数,默认用线性插值(可根据曲线平滑度选立方插值等)
b_interpolator = interp1d(x_b, y_b, kind='linear', fill_value="extrapolate")

# 得到B在A的每个x点上的对应值
y_b_matched = b_interpolator(x_a)

3. 计算相对误差并找最大值

注意避开B值为0的情况,防止除以0报错:

# 计算每个点的相对误差:|A_y - B_y| / |B_y|
relative_errors = np.abs(y_a - y_b_matched) / np.abs(y_b_matched)

# 过滤掉B值接近0的点(阈值可根据需求调整)
valid_errors = relative_errors[np.abs(y_b_matched) > 1e-10]

# 提取最大相对误差
max_rel_error = np.max(valid_errors)

print(f"最大相对误差:{max_rel_error:.4f}")

额外说明

  • 如果你的x数据不是单调递增/递减的,先对x和对应的y做排序,插值函数要求输入的x序列是单调的。
  • 插值方式可以调整:kind='linear'适合一般情况,kind='cubic'适合平滑曲线,但端点处可能有偏差。
  • 要是想基于B的x点处理,反过来对A做插值就行,计算逻辑完全一致。

内容的提问来源于stack exchange,提问作者Marcos Stevenson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 18:35:02