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
相关产品推荐
相关产品推荐

