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

半对数X轴下指数函数曲线拟合问题求助

半对数X轴指数拟合问题的解决方案

核心问题与修正点

  • 数组创建语法错误:np.array[] 需改为 np.array(),方括号是数组索引语法,圆括号才是创建NumPy数组的正确方式,该错误会导致数据读取异常或代码运行失败。
  • 初始猜测严重偏离数据趋势:
    你使用的a*np.exp(-c*x)+d函数形式是合理的(y随x增大呈指数衰减后趋近于常数d),但原初始值init_v = (1,1e-6,0)存在致命问题:c=1e-6过小,导致exp(-c*x)几乎恒等于1,拟合曲线会趋近于a+d,完全无法贴合数据的衰减趋势。
    应基于数据估算初始值:观察数据可知,x趋近1时y趋近~0.15(即d≈0.15);x趋近0时y≈0.73(即a≈0.73-0.15=0.58);通过中间点计算得c≈15,修正后初始猜测为(0.6,15,0.15)。
  • 绘图逻辑顺序错误:原代码先调用plt.grid()再创建画布,会导致网格仅应用在默认画布,实际绘图的画布无网格;需先创建画布和轴对象,再设置网格、刻度等属性。
  • 未正确调用显示函数:plt.show是函数引用,必须加括号plt.show()才能显示图像。

修正后的完整代码

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit

# 修正数组创建语法
kd = np.array([0.735420099, 0.700823723, 0.647775947,0.613179572,0.573970346,0.54398682,0.454036244,0.371004942,0.292586491,0.271828666,0.21878089,0.165733114,0.157660626,0.151894563])
ADAR = np.array([0.001012268,0.002028379,0.004015198,0.005931555,0.007948127,0.010143277,0.019594977,0.039746044,0.076782168,0.101639121,0.193968714,0.574178304,0.778822803,0.9878803])

def func(x,a,c,d):
    return a*np.exp(-c*x)+d

# 基于数据趋势修正初始猜测
init_v = (0.6, 15, 0.15)

opt, pcov = curve_fit(func, ADAR, kd, init_v)
a, c, d = opt

x2 = np.linspace(0.001, 1, 100)  # 增加点数让拟合曲线更平滑
y2 = func(x2, a, c, d)

# 调整绘图顺序,统一使用轴对象控制属性
fig, ax = plt.subplots()
ax.grid(True, which="both")

ax.scatter(ADAR, kd, c='blue', label='原始数据')
ax.set_xscale('log')
ax.set_xlim([0.001, 1])
ax.set_ylim([0, 0.8])

# 在图例中显示拟合参数
ax.plot(x2, y2, '-', label=f'拟合曲线: a={a:.2f}, c={c:.2f}, d={d:.2f}')
ax.legend()
ax.set_title('Area pressure coefficient')
ax.set_xlabel('AD/AR')
ax.set_ylabel('kd')

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:55:18