Я нашел это обсуждение в своем предыдущем поиске, который показывает, как использовать 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-мерных треугольников.Кто-нибудь может предложить лучший более общий способ для выполнения численного интегрирования функции по мозаичной сетке?
Спасибо.