#python #sympy
Вопрос:
Я пытаюсь вычислить двойное сжатие 2 (ранг 2) тензоров, используя Sympy. Двойное сжатие двух тензоров (ранг 2) приводит к скаляру.
Двойное сжатие является расширением скалярного произведения/внутреннего произведения в том смысле, что теперь повторяются два индекса, и поэтому суммирование выполняется по 2 индексам.
Это может быть определено двумя способами:
- S = A_{ij}B_{ji}
- S =A_{ij}B_{ij}
В механике сплошных сред большинство тензоров второго ранга (деформация, напряжение, скорости деформации, но не градиент скорости) симметричны, так что оба определения совпадают. Однако в общем случае асимметричных тензоров важно проверить, какое соглашение принято автором.
Давайте рассчитаем двойное сжатие, используя первый принцип.
Здесь:
S= A_{ij}B_{ji}
можно разбить на две части:
Шаг 1: Суммирование только по самым внутренним индексам
T_{mn} = A_{mk}B_{kn}
Этот шаг может быть реализован с использованием подхода tensorproduct и tensorcontraction, как и раньше:
import sympy as sy
from sympy import Array, tensorproduct,tensorcontraction
from sympy.abc import x,y,z,t
A = Array([[x,y,x*z], [x*x,y**2,z],[z**3,x**2,y*x*z]])
B = Array([[x**2,y**2,z**2],[x,y*z*x,y x],[x*y,y*x,y**3]])
T =tensorcontraction(tensorproduct(A,B),(1,2))
На шаге 2 мы выполняем сжатие по T_{mn}, чтобы в конечном итоге найти двойное сжатие A и B.
S = T_{kk}
который реализуется как тензорное сжатие T.
Здесь S — требуемое внутреннее произведение A и B.
S =tensorcontraction(T,(0,1))
Может ли эксперт в области симпатии, пожалуйста, подтвердить вышеуказанный подход? Я имею в виду, что мне это кажется правильным, но ведь я и раньше ошибался в своей жизни !