基于Matplotlib实现分段函数绘图及逆插值求对应x值
递减函数的逆插值与数据修正方案
1. 逆插值求对应x值t1
已知原函数是0到t2区间的严格递减函数,interp()函数不仅能由x求y,完全可以通过逆用插值逻辑,根据给定的y值m求出对应的x值t1。
因为numpy.interp()要求输入的插值基准序列必须单调递增,而原函数递减时y_axis是单调递减序列,我们只需将y_axis和x_axis同时反转(得到单调递增的y序列与对应的x序列),就能直接调用interp()完成逆插值:
import numpy as np # 示例数据生成 frequency = 10 # 对应区间终点t2 x_axis = np.arange(0, frequency, 0.1) def function(x): return 10 - x # 示例递减函数,可替换为实际业务函数 y_axis = function(x_axis) # 已知目标y值m m = 6 # 逆插值求t1:反转y和x序列,满足interp对单调递增基准的要求 t1 = np.interp(m, y_axis[::-1], x_axis[::-1])
2. 修正0到t1区间的y值为常数m
得到t1后,通过布尔掩码筛选出x_axis中小于等于t1的位置,将这些位置的y值批量替换为m即可实现目标效果:
# 创建布尔掩码,定位x <= t1的区域 mask = x_axis <= t1 # 复制原y数组并修改目标区域 y_axis_modified = y_axis.copy() y_axis_modified[mask] = m # 可选:用matplotlib可视化验证结果 import matplotlib.pyplot as plt plt.plot(x_axis, y_axis, label='原函数') plt.plot(x_axis, y_axis_modified, label='修正后函数') plt.hlines(m, 0, t1, linestyles='--', color='r') plt.vlines(t1, 0, m, linestyles='--', color='r') plt.legend() plt.show()
关键注意点
- 原函数必须是单调递减的,这样逆插值的结果唯一且准确;若函数非单调,需要额外处理多解场景。
- 反转数组是为了适配
np.interp()对输入基准序列单调递增的要求,保证插值计算的正确性。
内容的提问来源于stack exchange,提问作者mizzo
相关产品推荐
相关产品推荐

