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

Scipy curve_fit拟合时出现sqrt无效值警告问题求助

警告产生的原因

你猜的没错——问题就是拟合过程中参数a被尝试取了负值。

Scipy的curve_fit默认使用Levenberg-Marquardt优化算法,它在搜索最优参数时会遍历参数空间的各种可能值,包括不符合物理意义的负值。你的输入x(也就是omega)全是正数,当a为负时,x*a+1就会变成负数,传给np.sqrt自然会触发invalid value encountered in sqrt的警告。

虽然你的实验数据都是正的,但拟合是迭代寻优的过程,算法不会提前知道a必须为正,所以会尝试这些无效的参数值。

正确的解决方法

不要用abs()修改函数逻辑(这会扭曲你的拟合模型),直接给参数a设置非负边界,让curve_fit只在合理的参数空间内搜索:

修改curve_fit的调用代码:

popt, pcov = curve_fit(func_1T, w_omega, transmisivity, bounds=(0, np.inf))

这里bounds=(0, np.inf)强制参数a必须大于等于0,完全匹配你的物理模型(从函数形式看,这应该是低通滤波器的传递函数,a对应的是正数参数)。

替换后运行代码,警告会彻底消失,拟合结果也会更符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 06:05:19