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

Sympy nsolve使用变量作为非线性方程组初始猜值报错如何解决

问题原因

该报错是因为传入nsolve的初始猜值变量多为numpy数值类型,sympy底层调用mpmath求解时无法正确解析这类类型,导致雅可比矩阵计算异常,最终触发类型错误。

解决方法

将初始猜值列表中的所有变量强制转换为Python原生浮点类型即可,转换可以用float()函数实现。
修改后的调用代码如下:

print(nsolve(
    [eq1, eq2, eq3, eq4, eq5, eq6, eq7], 
    [J_PV_1, J_PV_2, J_m1, J_m2, Tm1, Tm2, Tpv],
    [
        float(PV_flux), float(PV_flux), float(PV_flux), float(PV_flux), 
        float(Ta_kelvin), float(Ta_kelvin), float(Ta_kelvin + 15)
    ], 
    domain=S.Reals
))

也可以使用Sympy自带的S()函数将数值转换为Sympy兼容的数值类型,效果一致:

print(nsolve(
    [eq1, eq2, eq3, eq4, eq5, eq6, eq7], 
    [J_PV_1, J_PV_2, J_m1, J_m2, Tm1, Tm2, Tpv],
    [
        S(PV_flux), S(PV_flux), S(PV_flux), S(PV_flux), 
        S(Ta_kelvin), S(Ta_kelvin), S(Ta_kelvin + 15)
    ], 
    domain=S.Reals
))

补充说明

你可以先执行print(type(PV_flux))确认变量类型,如果输出为<class 'numpy.float64'>,即可确认是类型兼容问题,按上述方法转换后就能正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:54:11