代码之家  ›  专栏  ›  技术社区  ›  user1612986

scipy optimity.root_scalar(),其中多个参数各为一个列表

  •  0
  • user1612986  · 技术社区  · 1 年前
    def  f(m_l, m_B, y):
        value = -1.0 + np.sum(m_l*np.exp(-m_B*y))
        return value
    def  df(m_l, m_B, y):
        value = -np.sum(m_B*m_l*np.exp(-m_B*y))
        return value
    

    其中m_l和m_b是numpy数组。我使用给出以下输入

       m_l = np.array([0.0036132256153053369,0.95110068028445593])
       m_B = np.array([0.48884897299905006,0.95605658765269563])
       guess=-0.048557088449677460
       root = optimize.root_scalar(f, guess, fprime=df, args=(m_l,m_B),method='newton',rtol=1e-9,maxiter=1000)
    

    我得到以下错误:

       TypeError                                 Traceback (most recent call last)
       ~\AppData\Local\Temp/ipykernel_15644/3699083294.py in <module>
      4 print(f(m_l, m_B, y))
      5 guess=-0.048557088449677460
      ----> 6 root = optimize.root_scalar(f, guess, fprime=df, args= 
      (m_l,m_B),method='newton',rtol=1e-9,maxiter=1000)
    
       TypeError: root_scalar() got multiple values for argument 'args'
    

    我想发生这个错误是因为输入参数没有正确传递。有人能帮忙找出通过争论的正确方法吗。提前谢谢。

    1 回复  |  直到 1 年前
        1
  •  2
  •   Ayalew Mohammed    1 年前
    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
    
    m_l = np.array([0.0036132256153053369, 0.95110068028445593])
    m_B = np.array([0.48884897299905006, 0.95605658765269563])
    guess = -0.048557088449677460
    
    root = optimize.root_scalar(f, args=(m_l, m_B), x0=guess, fprime=df, method='newton', rtol=1e-9, maxiter=1000)
    
    print("Root found:", root.root)
    
    推荐文章