2D интегрирование разрозненных данных (python) - PullRequest
1 голос
/ 07 августа 2020

У меня есть некоторые данные, разбросанные по X и Y со значением A. Я хочу интегрировать A по X и Y. Однако мои данные не находятся в декартовой сетке (интервалы X, Y между точками данных сильно меняются) и Область X, Y, занятая точками данных, имеет сложную форму (точная область неизвестна)

Есть ли простой способ интегрировать такие данные?

1 Ответ

2 голосов
/ 07 августа 2020

Я сделал следующее:

  • триангулировать область
  • вычислить интеграл по каждому треугольнику
  • суммировать интегралы по треугольникам (это можно сделать к интегральному свойству аддитивности)

Допустим, у нас есть следующие данные:

import numpy as np
X = np.array([0, 0, 1, 1, 1.5])
Y = np.array([0, 1.1, 0, 1, 1.3])
A = np.array([2, 1.1, 0.5, 2, 0.3])

Мы выполняем триангуляцию, используя scipy:

from scipy.spatial import Delaunay
domain_points = np.array(list(zip(X,Y)))
tri = Delaunay(domain_points)

введите описание изображения здесь

Вычисляем интеграл:

def area_from_3_points(x, y, z):
    return np.sqrt(np.sum(np.cross(x-y, x-z), axis=-1)**2)/2
integral = 0
for vertices in tri.simplices:
    mean_value = (A[vertices[0]] + A[vertices[1]] + A[vertices[2]]) / 3
    area = area_from_3_points(domain_points[vertices[0]], domain_points[vertices[1]], domain_points[vertices[2]])
    integral += mean_value*area
print(integral)

Out: 2.1166666666666667
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...