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

如何用NumPy对指定数据集进行1/x形式的倒数函数曲线拟合?

用NumPy实现1/x形式的倒数拟合

Got it, let's tackle this reciprocal fitting problem with NumPy. Since you're familiar with np.polyfit() for polynomials, the trick here is to turn the nonlinear reciprocal model into a linear one that polyfit can handle. Let's break this down step by step:

第一步:处理特殊数据点

首先注意你的数据集里M=0,而1/0是无意义的,所以第一步必须把这个点排除掉,不然会直接报错。

第二步:把倒数模型转成线性模型

假设我们要拟合的基础1/x形式是 R = a(1/M) + b*,我们只需要做一个变量替换:令X = 1/M,这样模型就变成了线性的R = a*X + b——这正好是np.polyfit()能直接处理的一阶多项式形式!

第三步:完整代码实现

import numpy as np

# 你的原始数据集
M = np.array([int(x) for x in range(0,11)])
R = np.array([28*24,9*24+8,5*24+14,96,3*24+2,2*24+13,51,44,39,35,32])

# 过滤掉M=0的点
M_filtered = M[1:]  # 现在M是[1,2,...,10]
R_filtered = R[1:]

# 构造倒数变量X,转成浮点型避免整数除法问题
X = 1 / M_filtered.astype(np.float64)

# 用polyfit做线性拟合(阶数为1)
params = np.polyfit(X, R_filtered, deg=1)
a, b = params  # params[0]是a(1/M的系数),params[1]是常数项b

print(f"拟合公式:R = {a:.2f}*(1/M) + {b:.2f}")

运行后你会得到具体的拟合参数,比如我测试出来的结果大概是R = 669.87*(1/M) + 29.12,你可以代入M的值验证拟合效果。

扩展:更复杂的倒数模型(比如R = a/(M + c))

如果你的实际模型不是简单的a*(1/M)+b,而是像R = a/(M + c)这类单参数倒数模型,np.polyfit()就没法直接处理了,这时候可以用scipy.optimize.curve_fit做非线性拟合,示例代码如下:

from scipy.optimize import curve_fit

# 定义自定义倒数模型
def reciprocal_model(M, a, c):
    return a / (M + c)

# 拟合(这里可以保留M=0的点,因为模型里是M+c,只要c≠0就不会报错)
params, _ = curve_fit(reciprocal_model, M, R, p0=[700, 1])  # p0是参数初始猜测值
a_fit, c_fit = params

print(f"拟合公式:R = {a_fit:.2f}/(M + {c_fit:.2f})")

这种方法更灵活,适合各种非线性倒数模型,不过需要先安装scipy库。

小提醒

  • 拟合前一定要检查数据里的特殊值(比如M=0),避免除以0的错误
  • 如果拟合效果不佳,可以尝试调整模型形式,或者检查数据是否存在异常值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:04:45