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

scipy.optimize.curve_fit拟合二极管测量数据不收敛,初始猜测已接近

二极管Shockley方程(含LambertW项)拟合异常问题
  • 持有大量二极管测量数据集,需从中提取理论参数用于后续建模。
  • 此前使用scipy库的curve_fit函数拟合简单函数时完全正常,但拟合包含LambertW项的Shockley方程时,即便初始参数猜测与测量数据拟合度极高,最终拟合结果仍严重偏离实测值。
  • 已尝试的优化动作:
    • 为拟合参数设置合理边界
    • 切换dogbox和lm两种拟合方法,其中dogbox效果略好,但拟合结果基本仅跟随初始猜测,未实现有效参数优化

相关代码示例

import numpy as np
from scipy.optimize import curve_fit
from scipy.special import lambertw

# 含LambertW项的Shockley方程定义(示例,需根据实际模型调整)
def shockley_lambertw(V, Is, n, Rs):
    vt = 0.02585  # 室温下热电压
    exp_term = np.exp(V / (n * vt))
    lambert_term = lambertw((Rs * Is / (n * vt)) * exp_term)
    return (V - n * vt * lambert_term) / Rs

# 加载测量数据(示例结构)
V_meas = np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7])  # 实测电压序列
I_meas = np.array([1e-11, 5e-10, 2e-8, 7e-7, 2e-5, 5e-4, 1e-2])  # 实测电流序列

# 初始参数猜测
p0 = [1e-12, 1.5, 10]  # 反向饱和电流Is,理想因子n,串联电阻Rs

# 参数边界设置
bounds = (
    [1e-15, 1.0, 1],   # 参数下限
    [1e-10, 2.0, 100]  # 参数上限
)

# 两种方法拟合尝试
popt_lm, pcov_lm = curve_fit(shockley_lambertw, V_meas, I_meas, p0=p0, bounds=bounds, method='lm')
popt_dogbox, pcov_dogbox = curve_fit(shockley_lambertw, V_meas, I_meas, p0=p0, bounds=bounds, method='dogbox')

拟合效果对比图

测量数据与拟合结果对比图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:12:38