usando o SciPy para integrar uma função que retorna uma matriz ou matriz

Eu tenho uma matriz simbólica que pode ser expressa como:

from sympy import lambdify, Matrix

g_sympy = Matrix([[   x,  2*x,  3*x,  4*x,  5*x,  6*x,  7*x,  8*x,   9*x,  10*x],
                  [x**2, x**3, x**4, x**5, x**6, x**7, x**8, x**9, x**10, x**11]])

g = lambdify( (x), g_sympy )

Então, para cadax Eu obtenho uma matriz diferente:

g(1.) # matrix([[  1.,   2.,   3.,   4.,   5.,   6.,   7.,   8.,   9.,  10.],
      #         [  1.,   1.,   1.,   1.,   1.,   1.,   1.,   1.,   1.,   1.]])
g(2.) # matrix([[  2.00e+00,   4.00e+00,   6.00e+00,   8.00e+00,   1.00e+01, 1.20e+01,   1.40e+01,   1.60e+01,   1.80e+01,   2.00e+01],
      #         [  4.00e+00,   8.00e+00,   1.60e+01,   3.20e+01,   6.40e+01, 1.28e+02,   2.56e+02,   5.12e+02,   1.02e+03,   2.05e+03]])

e assim por diante...


Eu preciso integrar numericamenteg sobrexdigamosfrom 0. to 100. (no caso real a integral não tem uma solução exata) e na minha abordagem atual eu tenho quelambdify cada elemento emg e integrá-lo individualmente. estou usandoquad para fazer uma integração baseada em elementos como:

ans = np.zeros( g_sympy.shape )
for (i,j), func_sympy in ndenumerate(g_sympy):
    func = lambdify( (x), func_sympy)
    ans[i,j] = quad( func, 0., 100. )

Existem dois problemas aqui:1) lambdify usado muitas vezes e2) por loop; e acredito que o primeiro é o gargalo, porque og_sympy matriz tem no máximo 10000 termos (o que não é grande coisa para um loop for).

Como mostrado acimalambdify permite a avaliação de toda a matriz, então pensei: "Existe uma maneira de integrar toda a matriz?"

scipy.integrate.quadrature tem um parâmetrovec_func o que me deu esperança. Eu estava esperando algo como:

g_int = quadrature( g, x1, x2 )

para obter a matriz totalmente integrada, mas dá aValueError: matriz deve ser bidimensional

EDIT: O que estou tentando fazeraparentemente pode ser feito em Matlab usandoquadv ejá foi discutido para SciPy

O caso realfoi disponibilizado aqui.

Para executá-lo, você precisará de:

numpycigarrinhomatplotlibsympy

Apenas corra:"python curved_beam_mrs.py".

Você verá que o procedimento já é lento, principalmente por causa da integração, indicada peloTODO no arquivocurved_beam.py.

Irá muito mais devagar se você remover o comentário indicado após oTODO no arquivocurved_beam_mrs.py.

A matriz de funções que é integrada é mostrada noprint.txt Arquivo.

Obrigado!

questionAnswers(5)

yourAnswerToTheQuestion