Не могу интегрироваться с dblquad - PullRequest
0 голосов
/ 12 ноября 2018

Итак, я хочу интегрировать двойной интеграл с константами в нем, например, a, b и т. Д., Где пользователь может присвоить значение этим константам:

Пределы интеграла: x [0,1] и y [-1,2]

import numpy as np
import scipy.integrate as integrate

def g(y,x,a):
    return a*x*y

a = int(input('Insert a value --> '))
result = integrate.dblquad(g, 0, 1, lambda x: -1, lambda x: 2, args=(a))[0]
print(result)

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

TypeError: integrate() argument after * must be an iterable, not int

Я не понимаю этого. Потому что, когда я делаю то же самое, но с quad (), Python делает это правильно:

import numpy as np
import scipy.integrate as integrate

def g(x,a):
    return a*x

a = int(input('Insert a value --> '))
result = integrate.quad(g, 0, 1, args=(a))[0]
print(result)

С результатом:

0.5

1 Ответ

0 голосов
/ 12 ноября 2018

Проблема здесь в том, что значение, которое вы указываете в необязательном аргументе args, является кортежем. В случае quad это то, что ожидает функция, но для dblquad требуется последовательность. Даже если кортежи являются последовательностями (неизменяемыми), похоже, что в данном случае scipy имеет значение, и поэтому возникает ошибка. Однако это вводит в заблуждение, поскольку кортеж определенно является итерацией . В любом случае, это должно работать:

result = integrate.dblquad(g, 0, 1, lambda x: -1, lambda x: 2, args=[a])[0]
...