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

scipy.optimize.root_scalar多数组参数传参报错,求正确传参方式

问题分析与解决

错误原因

  1. 参数传递冲突:scipy.optimize.root_scalar的位置参数中,第二个参数是args,你直接把初始猜测值guess作为位置参数放在f后面,又显式传递了args=(m_l,m_B),导致args被重复赋值,触发multiple values错误。
  2. 函数参数顺序错误:root_scalar会将待求解的变量(即你的y)作为第一个参数传递给目标函数f和导函数df,但你定义的函数把y放在了最后一位,导致参数匹配失败。

修正方案

步骤1:调整函数参数顺序

把待求解的y放在函数的第一个参数位置:

import numpy as np
from scipy import optimize

def f(y, m_l, m_B):
    value = -1.0 + np.sum(m_l * np.exp(-m_B * y))
    return value

def df(y, m_l, m_B):
    value = -np.sum(m_B * m_l * np.exp(-m_B * y))
    return value

步骤2:正确调用root_scalar

用关键字参数x0传递初始猜测值,避免和args的位置参数冲突:

m_l = np.array([0.0036132256153053369, 0.95110068028445593])
m_B = np.array([0.48884897299905006, 0.95605658765269563])
guess = -0.048557088449677460

root = optimize.root_scalar(
    f,
    x0=guess,
    fprime=df,
    args=(m_l, m_B),
    method='newton',
    rtol=1e-9,
    maxiter=1000
)

# 查看求解结果
print(root)

关键说明

  • x0是root_scalar中指定初始猜测值的关键字参数,必须显式指定,不能用位置参数传递,否则会和args的位置冲突。
  • 目标函数和导函数的第一个参数必须是待求解的变量,后续参数通过args传递,root_scalar会自动将args中的参数依次传递给函数的后续位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:57:32