TypeError: fun () отсутствует 1 обязательный позиционный аргумент: 'a' - PullRequest
0 голосов
/ 25 апреля 2020

Я знаю, что есть много вопросов об этой ошибке, и я был на многих из них, пытаясь понять, что происходит с su sh простой системой. Вот мой код, решающий очень простое уравнение, чтобы проверить эффективность решения execute_ivp и odeint.

import numpy as np 
import numpy as np 
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp


def fun(t,x,a) : 
    return -x/a


t = np.linspace(0,10,1000)
tspan = [t[0], t[-1]]


x0 = [10]

sol = solve_ivp(fun, tspan, x0, t_eval = t, args = 1)

plt.plot(t,sol.y.T)
plt.show()

И это полный отчет об ошибке:

/home/anthony/.local/lib/python3.8/site-packages/scipy/integrate/_ivp/common.py:40:         
/home/anthony/.local/lib/python3.8/site-packages/scipy/integrate/_ivp/common.py:40:     
UserWarning: The following arguments have no effect for a chosen solver: `args`.
warn("The following arguments have no effect for a chosen solver: {}."
Traceback (most recent call last):
File "test.py", line 25, in <module>
sol = solve_ivp(fun, tspan, x0, t_eval = t, args = 1)
File "/home/anthony/.local/lib/python3.8/site-packages/scipy/integrate/_ivp/ivp.py", line 
477, in solve_ivp
solver = method(fun, t0, y0, tf, vectorized=vectorized, **options)
File "/home/anthony/.local/lib/python3.8/site-packages/scipy/integrate/_ivp/rk.py", line 
100, in __init__
self.f = self.fun(self.t, self.y)
File "/home/anthony/.local/lib/python3.8/site-packages/scipy/integrate/_ivp/base.py", line 
139, in fun
return self.fun_single(t, y)
File "/home/anthony/.local/lib/python3.8/site-packages/scipy/integrate/_ivp/base.py", line 
21, in fun_wrapped
return np.asarray(fun(t, y), dtype=dtype)
TypeError: fun() missing 1 required positional argument: 'a'

Для меня ошибка довольно очевидна, но также совершенно очевидно, что я поставил правильный аргумент в нужном месте к документации этого решателя do c scipy.integrate.solve_ivp Я также обновил свою последнюю версию scipy, любые советы будут очень полезны.

1 Ответ

0 голосов
/ 25 апреля 2020

args должен быть кортежем

In [281]: sol = solve_ivp(fun, tspan, x0, t_eval = t, args = (1,))                                     
In [282]: sol                                                                                          
Out[282]: 
  message: 'The solver successfully reached the end of the integration interval.'
     nfev: 80
     njev: 0
      nlu: 0
      sol: None
   status: 0
  success: True
   ....

Ошибка args является одной из наиболее распространенных scipy.integrateoptimize) ошибок SO.

...