Интегрировать массив SymPy - PullRequest
1 голос
/ 09 мая 2020

Не знаю, где лучше всего задать этот вопрос. Я пытаюсь интегрировать массив SymPy, но если

sympy.integrate(x, (x, 0, 1))

возвращает

1/2

, как ожидалось,

sympy.integrate(sympy.Array([x]), (x, 0, 1))

возвращает

1

, что вызывает беспокойство. Намек? Большое спасибо!

1 Ответ

1 голос
/ 04 июня 2020

Я бы предположил, что Array немного привередлив с операциями исчисления, поскольку кажется, что он наследуется от тензоров. Вам нужно будет немного покопаться, чтобы узнать почему. Однако класс Matrix имеет тенденцию работать немного лучше. Когда я немного занимался векторным исчислением, я обнаружил, что использование Matrix очень помогает.

Для вашего вопроса у нас есть:

from sympy import *

x = symbols('x')
print(integrate(Matrix([[x]]), (x, 0, 1)))

Что дает ожидаемые результаты:

Matrix([[1/2]])

Это также работает для больших матриц:

from sympy import *

x = symbols('x')
A = Matrix([[x],
            [x+1],
            [x**2]])  # column vector
print(integrate(A, x))

B = Matrix([[1, x, x**2],
            [-x, 2, 0],
            [sin(x), cos(x), tan(x)]])
print(integrate(B, x))

Производство:

Matrix([[x**2/2], [x**2/2 + x], [x**3/3]])
Matrix([[x, x**2/2, x**3/3], [-x**2/2, 2*x, 0], [-cos(x), sin(x), -log(cos(x))]])

Если вам действительно нужно интегрировать тензоры, тогда эта математика выходит за рамки моего диапазона, но кажется, вы можете по крайней мере различать их .

...