Численное интегрирование по сетке в Python с существующей сеткой - PullRequest
0 голосов
/ 06 июня 2018

Я нашел это обсуждение в своем предыдущем поиске, который показывает, как использовать Python для численного интегрирования функции в точках пространства.

Ищете пакет Python для числовой интеграции в тесселированной области

Мой первый вопрос: будет ли работать код, приведенный в приведенной выше ссылке, для существующей сетки STL?У меня есть все точки и нормали поверхности для сетки.Я попытался запустить этот код, и он не работает для меня, передавая вершины и индексы треугольников.

Я также нашел эту ссылку в своих поисках Google для числовой интеграции для FEM и нашел небольшой фрагмент кодадля интеграции функции по треугольнику в пространстве, как показано ниже:

def dJ( u, v, p1, p2, p3 ):
    x1, y1 = p1
    x2, y2 = p2
    x3, y3 = p3
    dxdu = ( (1-v)*x2 + v*x3 - x1 )
    dxdv = ( u*x3 - u*x2 )
    dydu = ( (1-v)*y2 + v*y3 - y1 )
    dydv = ( u*y3 - u*y2 )
    return np.abs( dxdu*dydv - dxdv*dydu )

def tridblquad( integrand, p1, p2, p3 ):
#http://connor-johnson.com/2014/03/09/integrals-over-arbitrary-triangular-regions-for-fem/

'''
Perform double quadtrature integration on triangular domain.
Input: function to integrate, points of triangle as tuples.
Output: integral and estimated absolute error as a tuple.
'''
    x1, y1 = p1 ; x2, y2 = p2 ; x3, y3 = p3
# transformation to the unit square
    g = lambda u, v, c1, c2, c3: (1-u)*c1 + u*( (1-v)*c2 + v*c3 )
# transformation for the integrand, 
# including the Jacobian scaling factor
    def h( u, v ):
        x = g( u, v, x1, x2, x3 )
        y = g( u, v, y1, y2, y3 )
        I = integrand( x, y )
        I *= dJ( u, v, p1, p2, p3 )
        return I
# perfrom the double integration using quadrature in the transformed space
    integral, error = scipy.integrate.dblquad( h, 0, 1, lambda x: 0, lambda x: 1, epsrel=1e-6, epsabs=0 )
    return integral, error

Однако этот код работает только для 2-мерных треугольников.Кто-нибудь может предложить лучший более общий способ для выполнения численного интегрирования функции по мозаичной сетке?

Спасибо.

...