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

变量系数t变化时求解非线性方程组遇空列表问题求助

问题分析与解决

你的代码得到空列表的核心原因是缩进错误:fsolve调用以及向列表追加元素的代码被放在了equations函数内部,且位于return语句之后——函数执行到return就会直接退出,后续代码根本不会运行。循环每次只定义了函数却没有执行求解逻辑,自然列表b和n始终为空。

修正后的代码

from scipy.optimize import fsolve
import numpy as np
import math as m

q0 = 0.0011
thetas, thetai, thetar = 0.43, 0.1, 0.05
ks = 0.0022  # m/hr
psib = -0.15  # m
lamda = 1
eta = 2 + 3 * lamda
ki = 8.676 * 10**(-8)
si = 0.13157
t = np.array([3, 18, 24])

S = 0.02 / 24
delta = -0.1001
b = []
n = []

for i in range(3):
    def equations(p):
        s, L = p
        f1 = ks * s**(3 + (2/lamda)) - (psib/(1-eta)) * ((ki * si**(-1/lamda) - ks * s**(3 + (1/lamda)))/L) - q0
        f2 = L * (s * (thetas - thetar)) + S * t[i] * 0.5 * m.exp(-delta * psib * (-1 + s**(-1/lamda))) - (q0 - ki) * t[i]
        return (f1, f2)

    # 将求解和追加代码移到函数外部,与函数定义同缩进
    s, L = fsolve(equations, [0.19, 0.001])
    b.append(s)
    n.append(L)
    # 可选:打印每次求解结果,验证收敛情况
    print(f"t={t[i]}时,s={s}, L={L}")

print("s的结果列表:", b)
print("L的结果列表:", n)

额外注意事项

  • 初始值[0.19, 0.001]的选择会影响fsolve的收敛性,如果某些t值下求解失败,可以尝试调整初始值范围。
  • 可以添加收敛性检查,比如查看求解后的残差(即equations([s, L])的输出是否接近0),确保解的合理性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:31:00