Как уже упоминалось, дополнительные аргументы должны быть в кортеже. Обратите внимание, что (1)
на самом деле является целым числом 1
, одн кортеж пишется с запятой (1,)
. И этот кортеж также передается граничным функциям. Это причина ошибки "gfun() takes 0 positional arguments but 1 was given"
. Код ниже работает:
import numpy as np
from scipy.integrate import tplquad
def probability(eps, e, p, M):
prob = eps * e * (e**2 - p**2) * M
return prob
def gfun(M):
return 0.25
def hfun(M):
return 0.5
def qfun(e, M):
return -e
def rfun(e, M):
return 3*e - 1
M = .1
n = tplquad(probability, 0, 12, gfun, hfun, qfun, rfun, args=(M,))
Кортеж почти похож на список (более подробно см. python: список против кортежа, когда использовать каждый из них? ). Вы также можете написать:
n = tplquad(probability, 0, 12, gfun, hfun, qfun, rfun, args=[M])
Здесь запятая не нужна.