Кривые уровня не совпадают после поворота функции

#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. Да, хорошая иллюстрация. Однако странно, что кривые уровня не совпадают.