Я хочу интегрировать некоторую функцию в устройство dis c. Чтобы сделать это, я вместо этого хочу выполнить интегрирование по большему квадрату и определить подынтегральное выражение, возвращающее ноль, когда точка находится за пределами единицы dis c.
В любом случае, поэтому я хочу определить такого рода функции:
import numpy as np
# f(x, y) = x**2 + y**2 inside the disc
def f(x, y):
r2 = x**2 + y**2
if r2 > 1:
return 0
else:
return r2
fv = np.vectorize(f)
Теперь давайте немного интегрируем меня sh:
xv, yv = np.meshgrid(np.linspace(-1,1,1001), np.linspace(-1,1,1001))
Возьмем некоторую произвольную точку внутри устройства dis c. Прежде чем получить vectorize
'd, мой f(x,y)
работает как задумано:
f2(xv[330,577], yv[330,577])
> 0.13931599999999994
xv[330,577]**2 + yv[330,577]**2 == f2(xv[330,577], yv[330,577])
> True
Но векторизованная версия fv
не дает того же значения.
fv(xv,yv)[330,577]
> 0
Фактически , если вы посмотрите на массив, который он возвращает, все полностью запутано. Все записи, кроме 14, равны нулю, внутри или снаружи устройства dis c. Эти 14 ненулевых записей равны единице.
Небольшая помощь, пожалуйста?