Взятие тройного интеграла для функции с более чем 3 параметрами с помощью tplquad - PullRequest
0 голосов
/ 14 сентября 2018

Я хочу взять этот тройной интеграл по func(eps,e,p,M):

enter image description here

Интеграл по eps, e и p и код здесь:

def Probability(eps,e,p,M):
    prob=eps*e*(e**2-p**2)*function(M)
    return prob

a=0
b=np.inf

def gfun():
    return 0.25

def hfun():
    return 0.5

def qfun(e):
    return -e

def rfun(e):
    return 3*e-1

def n(M):
    n=integrate.tplquad(Probability, 0, np.inf,gfun,hfun,qfun,rfun,args=(M))
    return n

но я получаю эту ошибку:

integrate() argument after * must be an iterable, not float

Я не знаю, в чем проблема, и другой вопрос: это порядок параметровв функции вероятность верно?

1 Ответ

0 голосов
/ 14 сентября 2018

Как уже упоминалось, дополнительные аргументы должны быть в кортеже. Обратите внимание, что (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])

Здесь запятая не нужна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...