Оценка двойного сжатия тензоров ранга 2 в Sympy с использованием массива

#python #sympy

Вопрос:

Я пытаюсь вычислить двойное сжатие 2 (ранг 2) тензоров, используя Sympy. Двойное сжатие двух тензоров (ранг 2) приводит к скаляру.

Двойное сжатие является расширением скалярного произведения/внутреннего произведения в том смысле, что теперь повторяются два индекса, и поэтому суммирование выполняется по 2 индексам.

Это может быть определено двумя способами:

  1. S = A_{ij}B_{ji}
  2. 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))
 

Может ли эксперт в области симпатии, пожалуйста, подтвердить вышеуказанный подход? Я имею в виду, что мне это кажется правильным, но ведь я и раньше ошибался в своей жизни !