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

如何使用scipy的newton方法对多组(z,tau)参数对批量求解方程根

完全可以实现,核心操作是将原目标函数改造为可接收动态z、tau参数的形式,再配合scipy.optimize.newton的args参数传入每组对应参数,遍历所有参数对即可完成批量求解,具体操作如下:

步骤1:改造目标函数

把原本硬编码的z[0]、tau[0]改为函数的入参:

def fun(x, Z, y):
    return - np.log((1 - 0.5**x)) + np.log(x*Z) + np.log(0.5**x) + y

步骤2:批量求解

方法1:循环遍历(可读性更高,方便添加异常处理)

solutions = []
for Z_i, tau_i in zip(z, tau):
    # args里按顺序传入fun除x之外的参数
    root = newton(fun, x0=2, args=(Z_i, tau_i))
    solutions.append(root)

执行完成后solutions列表就按顺序存储了10组(z,tau)对应的方程根。

方法2:列表推导(更简洁)

solutions = [newton(fun, 2, args=(Z_i, tau_i)) for Z_i, tau_i in zip(z, tau)]

可选:异常捕获处理收敛问题

如果部分参数组合下牛顿法可能不收敛,可添加异常捕获避免程序中断:

solutions = []
for idx, (Z_i, tau_i) in enumerate(zip(z, tau)):
    try:
        root = newton(fun, x0=2, args=(Z_i, tau_i))
        solutions.append(root)
    except RuntimeError:
        print(f"第{idx}组参数求解不收敛,对应z={Z_i:.4f},tau={tau_i:.4f},可尝试调整初始值x0")
        solutions.append(np.nan) # 不收敛的位置填充空值方便后续处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:27:00