Двойной трапециевидный интеграл в numpy - PullRequest
1 голос
/ 27 марта 2020

У меня есть двумерная функция $ f (x, y) = \ exp (yx) $. Я хотел бы вычислить двойной интеграл $ \ int_ {0} ^ {10} \ int_ {0} ^ {10} f (x, y) dx dy $, используя NumPy trapz. После некоторого чтения они говорят, что я должен просто повторить trapz дважды, но это не работает. Я пробовал следующее

import numpy as np

def distFunc(x,y):
    f = np.exp(-x+y)
    return f

# Values in x to evaluate the integral.
x = np.linspace(.1, 10, 100)
y = np.linspace(.1, 10, 100)

list1=distFunc(x,y)
int_exp2d = np.trapz(np.trapz(list1, y, axis=0), x, axis=0)

Код всегда выдает ошибку

IndexError: list assignment index out of range

Я не знаю, как это исправить, чтобы код мог работать. Я думал, что внутренняя ловушка должна была сначала объединиться вдоль y, затем мы заканчиваем вторым вдоль x. Спасибо.

1 Ответ

1 голос
/ 27 марта 2020

Вам необходимо преобразовать x и y в двумерные массивы, что удобно сделать в numpy с помощью np.meshgrid. Таким образом, когда вы вызываете distfunc, он возвращает двумерный массив, который можно интегрировать сначала по одной оси, а затем по другой. Поскольку ваш код стоит прямо сейчас, вы передаете одномерный список первому интегралу (что нормально), а затем второй интеграл получает скалярное значение.

import numpy as np

def distFunc(x,y):
    f = np.exp(-x+y)
    return f

# Values in x to evaluate the integral.
x = np.linspace(.1, 10, 100)
y = np.linspace(.1, 10, 100)
X, Y = np.meshgrid(x, y)

list1=distFunc(X, Y)
int_exp2d = np.trapz(np.trapz(list1, y, axis=0), x, axis=0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...