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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:50:26