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

基于Re值区间的幂曲线批量拟合优化方法问询

分段幂曲线拟合的高效实现方法

问题背景

现有Re与Y的实验数据,需要拟合成幂曲线形式 Y = c1*Re^c2,并且要按Re的数值区间进行分段拟合(比如分成3个区间得到3组系数)。当前手动编写切片代码的方式,在区间数量增加(如10个以上)时效率极低,需要更简洁的实现方式。

原手动实现代码存在的问题:

  • 手动切片数据,区间越多代码越冗余
  • 存在变量命名错误(如dict_Coeff_Nu未定义、C_Nu应为C),导致代码无法正常运行

高效实现代码

from scipy.optimize import curve_fit
import pandas as pd

# 定义幂曲线拟合函数
def power_curve(X, c1, c2):
    return c1 * (X ** c2)

# 实验数据
Re = [8,39,65,117,196,299,331,480,504,554,771,831,957,1180,1181,1472,1515,1558,1571,1709,1863,1931,2010,2127,2222]
Y = [435263,85974,52075,28727,18407,13949,13090,10285,9963,9365,8368,8243,8007,7684,7683,7352,7300,7269,7257,7136,7014,6955,6903,6831,6766]

# 转换成DataFrame统一处理
df = pd.DataFrame({"Re": Re, "Y": Y})

# 定义区间分界点(示例分成3个区间:<=150, 150<Re<=1200, >1200)
# 如需更多区间,只需在列表中添加分界值即可
interval_bins = [-float("inf"), 150, 1200, float("inf")]
# 给每个数据点标记所属区间
df["interval"] = pd.cut(df["Re"], bins=interval_bins, labels=["<=150", "150<Re<=1200", ">1200"])

# 存储拟合结果
fit_results = []

# 遍历每个区间分组进行拟合
for interval_name, group in df.groupby("interval"):
    X_data = group["Re"]
    Y_data = group["Y"]
    # 执行曲线拟合
    coeffs, _ = curve_fit(power_curve, X_data, Y_data)
    # 保存当前区间的拟合系数
    fit_results.append({
        "区间": interval_name,
        "c1": round(coeffs[0], 2),
        "c2": round(coeffs[1], 4)
    })

# 转换成DataFrame展示结构化结果
results_df = pd.DataFrame(fit_results)
print("分段拟合系数:")
print(results_df)

关键改进点

  • 自动区间划分:使用pd.cut函数,只需定义分界点列表,即可自动给所有数据标记所属区间,区间数量再多也无需编写大量切片代码
  • 分组批量处理:通过groupby按区间分组,循环处理每个分组,逻辑简洁可扩展
  • 结果结构化:用列表字典存储结果,最终转换成DataFrame,比原字典形式更直观易读
  • 修复原代码错误:修正了变量名不一致的问题,确保代码可正常运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 01:51:04