Свертка дискретизированных функцийPython

Программы на Python
Ответить
Anonymous
 Свертка дискретизированных функций

Сообщение Anonymous »

Я хотел бы выполнить свертку функций (математическим способом), используя функции свертки scipy, но, похоже, это дает результаты, отличные от тех, которые я ожидаю.
Сначала я определяю сетку точек:

Код: Выделить всё

def generate_square_mesh(num_points=50):

x = np.linspace(-0.5, 0.5, num_points)
y = np.linspace(-0.5, 0.5, num_points)
x_grid, y_grid = np.meshgrid(x, y)

return x_grid, y_grid
Затем я вычисляю парную матрицу моего ядра, так что, если я умножу ее на другую функцию, я получу свертку функции с ядром
< pre class="lang-py Prettyprint-override">

Код: Выделить всё

def heat_kernel(x, y, t):
return np.exp(-(x**2 + y**2) / (4 * t))

def compute_convolution_matrix(x_grid, y_grid, t):

x = x_grid.flatten()
y = y_grid.flatten()
dx = x_grid[0, 1] - x_grid[0, 0]
dy = y_grid[1, 0] - y_grid[0, 0]
X = x[:, np.newaxis] - x[np.newaxis, :]
Y = y[:, np.newaxis] - y[np.newaxis, :]

H = heat_kernel(X, Y, t)*dx*dy

return H
Однако

Код: Выделить всё

from scipy.signal import convolve2d
import numpy as np

x_grid, y_grid = generate_square_mesh(10)
dx = x_grid[0, 1] - x_grid[0, 0]
dy = y_grid[1, 0] - y_grid[0, 0]
t = 0.01
heat_matrix = compute_convolution_matrix(x_grid, y_grid, t)
kernel = heat_kernel(x_grid, y_grid, t)
u0 = np.zeros((10,10))
u0[5,5]=1
A = heat_matrix@u0.flatten()
B = convolve2d(u0, kernel, mode='same')*dx*dy
Я получаю разные результаты для A и B. Я ожидал, что они будут одинаковыми.
Похоже, что результаты имеют одинаковую форму в одной и той же области сетки, но значения разные.

Подробнее здесь: https://stackoverflow.com/questions/791 ... -functions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»