#python #numpy
#python #numpy
Вопрос:
Рассмотрим общую двумерную гауссову функцию с центром в точке (0.5,0.5),
A*exp(-a*(-0.5 x)**2-b*(-0.5 x)*(-0.5 y)-c*(-0.5 y)**2)
где ковариационная матрица может быть записана в терминах коэффициентов a, b и c как
2a amp; b
b amp; 2c
Поворот на 45 градусов против часовой стрелки дает
(a-b c) amp; (a-c)
(a-c) amp; (a b c)
Однако, учитывая a = 1.25, b = 0 и c = 10000 и используя Python для интеграции по единичному квадрату,
import numpy as np
import matplotlib.pyplot as plt
a=1.25
b=0
c=10000
d=(a-b c)/2
e=a-c
f=(a b c)/2
fig, ax = plt.subplots()
x,y=np.meshgrid(np.linspace(0,1,50),np.linspace(0,1,50))
z=3*np.exp(-a*(-0.5 x)**2-b*(-0.5 x)*(-0.5 y)-c*(-0.5 y)**2)
w=3*np.exp(-d*(-0.5 x)**2-e*(-0.5 x)*(-0.5 y)-f*(-0.5 y)**2) #rotated by 45 degrees counterclockwise
cs=ax.contour(x,y,z,levels=[0.8],colors='k',linestyles='dashed');
cs=ax.contour(x,y,w,levels=[0.8],colors='k',linestyles='dashed');
from scipy import integrate
h = lambda y, x: 3*np.exp(-a*(-0.5 x)**2-b*(-0.5 x)*(-0.5 y)-c*(-0.5 y)**2)
g = lambda y, x: 3*np.exp(-d*(-0.5 x)**2-e*(-0.5 x)*(-0.5 y)-f*(-0.5 y)**2)
print(integrate.dblquad(h, 0, 1, lambda x: 0, lambda x: 1))
print(integrate.dblquad(g, 0, 1, lambda x: 0, lambda x: 1))
И вывод:
(0.061757213121080706, 1.4742783672680448e-08)
(0.048117567144166894, 5.930455188853047e-12)
А также (где кривая с коэффициентами a, b, c является горизонтальной, а кривые уровня для C = z (x, y) = w (x, y) = 0,8):
Комментарии:
1. Возможно, ваше вращение рассчитано неправильно. Он может поворачиваться на 45 градусов, но он также может растягивать пространство, поэтому интеграл изменяется
2. Верно. Матрица вращения равна sqrt(2)/2 [[1, -1], [1, 1]], где первый список — это первая строка, второй — вторая строка, и я думаю, что он должен соответствовать матрице вращения, приведенной в Википедии: en.wikipedia.org/wiki/Rotation_matrix
3. Возможно, сетка, для которой построены кривые уровня, также должна измениться.
4. на самом деле это имеет смысл, вы не интегрируете по единичному кругу, вы интегрируете по прямоугольнику [0;1] ^ 2, поэтому вращение как бы «обрезает» края прямоугольника
5. Как это объясняет несоответствующие кривые уровня?
Ответ №1:
Что я имел в виду в комментарии, интеграл, вероятно, изменяется из-за интегрирования по прямоугольнику, подобному этому
Вы можете видеть, что интегрирование по черному прямоугольнику — это не то же самое, что по повернутому зеленому
Комментарии:
1. Да, хорошая иллюстрация. Однако странно, что кривые уровня не совпадают.