Tensor-Komponenten
Beispiel-Aufgaben
Passive Transformation: 2.2.C
Aktive Transformation: 2.2.E
Videos
Passive Transformation
Es gibt: das \(\left(x, y\right)\)-System, das \(\left(\bar x, \bar y\right)\)-System den Winkel \(\varphi\), um den das \(\left(\bar x, \bar y\right)\)-System relativ zum \((x, y)\)-System gedreht ist \(\begin{bmatrix} T_{xx} & T_{xy} \\ \mathsf{sym} & T_{yy} \end{bmatrix}\): Die \(\left(x, y\right)\)-Komponenten des Tensors \(\begin{bmatrix} T_{\bar x \bar x} & T_{\bar x\bar y} \\ \mathsf{sym} & T_{\bar y\bar y} \end{bmatrix}\): Die \((\bar x, \bar y)\)-Komponenten des Tensors Die Umrechnungs-Formel = Transformationsformel = die „Passive Transformation“: mit \(R_\varphi = \begin{bmatrix}c_\varphi & s_\varphi \\-s_\varphi & c_\varphi\end{bmatrix}\) und \(R_\varphi^{\mathsf T}\) als Transponierte von \(R_\varphi\). Seien folgende Abkürzungen definiert: Nach Ausrechnen des Matrix-Produkts und mit diesen Abkürzungen lautet Gleichung (1): \(T_{\bar x \bar x}\) und \(T_{\bar x \bar y}\) aus dieser Gleichung anders notiert - nämlich zusammengefasst in einer Spaltenmatrix: \(T_{\bar y \bar y}\) und \(- T_{\bar x \bar y}\) zusammengefasst in einer Spaltenmatrix: Mit Gleichung (1) lassen sich alle drei transformierten Komponenten berechnen. Hierzu benötigt man Matrix-Multiplikation: Man berechnet das Produkt dreier Matrizen. Mit Gleichung (1‘) lassen sich alle drei transformierten Komponenten mit einem Taschenrechner berechnen - ohne Matrix-Multiplikation. Wegen Gleichung (P) und (P‘) kann man die Komponenten als Punktkoordinaten auf dem Mohrschen Kreis ablesen. Gegeben: Die \((x,y)\)-Komponenten: Gesucht: Die \((\bar x, \bar y)\)-Komponenten bei Passiver Transformation mit \(\varphi=30^\circ.\) Aus den gegebenen Komponenten berechnen: Gleichung (2) liefert damit:
Nachfolgend ein Programm, dass Sie ausführen können: Auf dem PC z.B. mit Anaconda. Im Browser (online) in drei Schritten: Copy: Source Code in die Zwischenablage kopieren. Paste: Source Code als Python-Notebook einfügen z.B. auf: JupyterLite oder JupyterLab oder Play: Ausführen. Statt SymPy lieber anderes CAS (Computeralgebrasystem) verwenden? Eine Auswahl verschiedener CAS gibt es hier.Passive Transformation = 2 Bezugssysteme und 1 Tensor
Details
Beispiel zu den Gleichungen (P) und (P')
SymPy
# -*- coding: utf-8 -*-
from sympy.physics.units import *
from sympy import *
# Units:
deg = pi/180
# Rounding:
import decimal
from decimal import Decimal as DX
from copy import deepcopy
def iso_round(obj, pv,
rounding=decimal.ROUND_HALF_EVEN):
import sympy
"""
Rounding acc. to DIN EN ISO 80000-1:2013-08
place value = Rundestellenwert
"""
assert pv in set([
# place value # round to:
"1", # round to integer
"0.1", # 1st digit after decimal
"0.01", # 2nd
"0.001", # 3rd
"0.0001", # 4th
"0.00001", # 5th
"0.000001", # 6th
"0.0000001", # 7th
"0.00000001", # 8th
"0.000000001", # 9th
"0.0000000001", # 10th
])
objc = deepcopy(obj)
try:
tmp = DX(str(float(objc)))
objc = tmp.quantize(DX(pv), rounding=rounding)
except:
for i in range(len(objc)):
tmp = DX(str(float(objc[i])))
objc[i] = tmp.quantize(DX(pv), rounding=rounding)
return objc
# ---
def c_collect(x):
retval = collect(x, cos(2*phi))
return retval
def s_collect(x):
retval = collect(x, sin(2*phi))
return retval
Txx, Txy, Tyy = 2, 1, 1.5
quantities = True
quantities = False
var("Txx, Txy, Tyy")
var("phi")
Tb = var(u"T\u0304")
Tt = var(u"T\u0303")
c2p, s2p = var("c₂ᵩ, s₂ᵩ")
sub_list = [
((Txx + Tyy)/2, Tb),
((Txx - Tyy)/2, Tt),
(cos(2*phi), var("c₂ᵩ") ),
(sin(2*phi), var("s₂ᵩ")),
]
sub_list_q = [
(phi, 30*deg),
(Txx, 2),
(Txy, 1),
(Tyy, S(3)/2 ),
]
pprint("\n(x,y)-Comp's of T:")
T = Matrix([
[Txx, Txy],
[Txy ,Tyy]
])
pprint(T)
c, s = cos(phi), sin(phi)
c2, s2 = cos(2*phi), sin(2*phi)
R = Matrix([
[c, s],
[-s, c]]
)
pprint("\nR₂ᵩ for φ=30°:")
R2 = Matrix([
[c2, s2],
[-s2, c2]]
)
tmp = R2
tmp = tmp.subs(sub_list_q)
pprint(tmp)
tmp = iso_round(tmp,"0.01")
pprint(tmp)
pprint("\n(x̄,ȳ)-Comp's of T:")
Tb = R*T*R.transpose()
tmp = Tb.applyfunc(trigsimp)
tmp = tmp.applyfunc(c_collect)
tmp = tmp.applyfunc(s_collect)
tmp = tmp.subs(sub_list)
pprint(tmp)
pprint("\n(Tx̄x̄, Tx̄ȳ) and (Tȳȳ, -Tx̄ȳ):")
for v in [Matrix([Tb[0,0], Tb[0,1]]), Matrix([Tb[1,1], - Tb[0,1]])]:
tmp = v
if quantities:
tmp = tmp.subs(sub_list_q)
tmp = iso_round(tmp,"0.01")
else: # symbols:
tmp = tmp.applyfunc(trigsimp)
tmp = tmp.applyfunc(c_collect)
tmp = tmp.applyfunc(s_collect)
tmp = tmp.subs(sub_list)
pprint(tmp)
(x,y)-Comp's of T:
⎡Txx Txy⎤
⎢ ⎥
⎣Txy Tyy⎦
R₂ᵩ for φ=30°:
⎡ √3 ⎤
⎢1/2 ── ⎥
⎢ 2 ⎥
⎢ ⎥
⎢-√3 ⎥
⎢──── 1/2⎥
⎣ 2 ⎦
⎡ 0.5 0.87⎤
⎢ ⎥
⎣-0.87 0.5 ⎦
(x̄,ȳ)-Comp's of T:
⎡Txy⋅s₂ᵩ + T̃⋅c₂ᵩ + T̄ Txy⋅c₂ᵩ - T̃⋅s₂ᵩ ⎤
⎢ ⎥
⎣ Txy⋅c₂ᵩ - T̃⋅s₂ᵩ -Txy⋅s₂ᵩ - T̃⋅c₂ᵩ + T̄⎦
(Tx̄x̄, Tx̄ȳ) and (Tȳȳ, -Tx̄ȳ):
⎡Txy⋅s₂ᵩ + T̃⋅c₂ᵩ + T̄⎤
⎢ ⎥
⎣ Txy⋅c₂ᵩ - T̃⋅s₂ᵩ ⎦
⎡-Txy⋅s₂ᵩ - T̃⋅c₂ᵩ + T̄⎤
⎢ ⎥
⎣ -Txy⋅c₂ᵩ + T̃⋅s₂ᵩ ⎦
Aktive Transformation
Es gibt: das \(\left(x, y\right)\)-System den Tensor \(\boldsymbol T\) und den Tensor \(\boldsymbol T'\) den Winkel \(\alpha\), um den \(\boldsymbol T'\) relativ zu \(\boldsymbol T\) gedreht ist \(\begin{bmatrix} T_{xx} & T_{xy} \\ \mathsf{sym} & T_{yy} \end{bmatrix}\): Die \(\left(x, y\right)\)-Komponenten des Tensors \(\begin{bmatrix} T'_{xx} & T'_{xy} \\ \mathsf{sym} & T'_{yy} \end{bmatrix}\): Die \((x, y)\)-Komponenten des gedrehten Tensors die Umrechnungs-Formel = die „Aktive Transformation“: mit \(R_\alpha = \begin{bmatrix}c_\alpha & -s_\alpha \\s_\alpha & c_\alpha\end{bmatrix}\) und \(R_\alpha^{\mathsf T}\) als Transponierte von \(R_\alpha\). Gleiche Komponenten - andere Bedeutung Für \(\alpha=-\varphi\) bzw. gleichbedeutend \(\varphi = - \alpha\) gilt: Eine passive Transformation mit \(\varphi=30^\circ\) führt auf dieselben transformierten Komponenten wie eine aktive Transformation (desselben Vektors) mit \(\alpha = -30^\circ\). Das Bezugssystem um 30 Grad entgegen dem Uhrzeigersinn zu drehen führt auf dieselben transformierten Komponenten wie den Tensor um 30 Grad im Uhrzeigersinn zu drehen. Die transformierten Komponenten sind hierbei zahlenmäßig gleich - haben aber verschiedene Bedeutungen. 2 der 4 Gleichungen von (1‘) lauten: Gegeben: Die \((x,y)\)-Komponenten des Tensors \(\boldsymbol T\): Gesucht: Die \((x, y)\)-Komponenten von \(\boldsymbol T'\) bei Aktiver Transformation mit \(\alpha=45^\circ.\)Aktive Transformation = 1 Bezugssystem und 2 Tensoren
Passive vs. Aktive Transformation
Beispiel zu Gleichung (2')
Web-App
Für Passive Transformation: Oben die Komponenten \((T_{xx}, T_{xy}, T_{yy})\) eintragen als einheitenlose Größen. Falls z.B. ein Tensor untersucht werden soll mit den Komponenten \(\left(2\,\mathrm{Pa}, 1\,\mathrm{Pa}, \tfrac 3 2 \,\mathrm{Pa}\right)\): Dann würde man oben eintragen: \((T_{xx}, T_{xy}, T_{yy}) = (2, 1, 1.5).\) Unten am Schieberegler den Winkel \(\varphi\) einstellen. Im Diagramm die Komponenten \((T_{\bar x \bar x}, T_{\bar x\bar y})\) ablesen. Es gilt für jedes beliebige \(n\in\mathbb{N}:\) Darum lässt sich \(T_{\bar y \bar y}\) ablesen als \(T_{\bar x \bar x}\) für einen um 90 Grad größeren (oder kleineren) Winkel - also gegenüber auf dem Mohrschen Kreis. Beispiel: 180-Grad-Periodizität: Die Passive Transformation ist definiert für jeden beliebigen Winkel \(\varphi\). Denn es gilt für jedes beliebige \(n\in\mathbb{N}:\) Beispiel:Anleitung
Nachfolgend ein Programm, dass Sie ausführen können: Auf dem PC z.B. mit Anaconda. Im Browser (online) in drei Schritten: Copy: Source Code in die Zwischenablage kopieren. Paste: Source Code als Python-Notebook einfügen z.B. auf: JupyterLite oder JupyterLab oder Play: Ausführen. Statt SymPy lieber anderes CAS (Computeralgebrasystem) verwenden? Eine Auswahl verschiedener CAS gibt es hier.SymPy
# -*- coding: utf-8 -*-
from sympy.physics.units import kg, m, s
from sympy import S, pprint, Matrix, cos, sin, pi, sqrt, atan, N
# Units:
(mm, cm) = ( m/1000, m/100 )
Newton = kg*m/s**2
kN = 10**3*Newton
Pa = Newton/m**2
MPa = 10**6*Pa
GPa = 10**9*Pa
deg = pi/180
half = S(1)/2
def iso_round(x, pv):
try:
x = float(x)
tmp = round(x, pv)
except TypeError:
from functools import partial
func = partial(round, ndigits = pv)
tmp = x.applyfunc(func)
return tmp
Txx, Txy, Tyy = 2, 1, 1.5
Txx, Txy, Tyy = -1, 4, 5
p = 21 *deg
mode = "passive"
# mode = "active"
digits = 2
def prnt(p):
tmp = p
tmp /= deg
tmp = iso_round(tmp,digits)
print(tmp,end="")
print("°")
def get_R(p, mode=mode):
c, s = cos(p), sin(p)
R = Matrix([[c, s],[-s, c]])
if mode == "passive":
pprint("\nPassive Transformation.")
pprint("φ:")
prnt(p)
return R
else:
pprint("\nActive Transformation.")
pprint("α:")
prnt(p)
return R.transpose()
pprint("\n(x,y)-Comp's of T:")
T = Matrix([
[Txx, Txy],
[Txy ,Tyy]
])
pprint(T)
R = get_R(p, mode = mode)
if mode == "passive":
pprint("\n(x̄,ȳ)-Comp's of T:")
else:
pprint("\n(x,y)-Comp's of T':")
tmp = R*T*R.transpose()
tmp = iso_round(tmp,digits)
pprint(tmp)
# Or use Calculator:
# if mode == "active":
# p*=-1
# # Shortcuts:
# c = cos(2*p)
# s = sin(2*p)
# Tb = (Txx + Tyy) / 2
# Tt = (Txx - Tyy) / 2
# # Use Shortcuts:
# T11 = Tb + Tt*c + Txy*s
# T12 = -Tt*s + Txy*c
# T22 = Tb - Tt*c - Txy*s
# tmp = Matrix([[T11, T12], [T12, T22]])
# tmp = iso_round(tmp, digits)
# pprint(tmp)
if mode == "passive":
pprint("\nTm:")
Tm = (Txx + Tyy)/2
tmp = Tm
tmp = iso_round(tmp,digits)
pprint(tmp)
pprint("\nr:")
r = ( (Txx - Tyy) / 2 )**2 + Txy**2
tmp = sqrt(r)
tmp = iso_round(tmp,digits)
pprint(tmp)
pprint("\nmax Tx̄x̄:")
tmp = Tm + r
tmp = iso_round(tmp,digits)
pprint(tmp)
pprint("\nmin Tx̄x̄:")
minT = Tm - r
tmp = minT
tmp = iso_round(tmp,digits)
pprint(tmp)
pprint("\nφ₁ / deg:")
p1 = atan(Txy/(Txx - minT))
tmp = p1
tmp /= deg
tmp = iso_round(tmp,digits)
pprint(tmp)
pprint("\nmax Tx̄ȳ:")
tmp = r
tmp = iso_round(tmp,digits)
pprint(tmp)
pprint("\n(φ₁ - 45°) / deg:")
tmp = p1 / deg - 45
tmp = iso_round(tmp,digits)
pprint(tmp)
(x,y)-Comp's of T:
⎡2 1 ⎤
⎢ ⎥
⎣1 1.5⎦
Passive Transformation: φ:
10.00°
(x̄,ȳ)-Comp's of T:
⎡2.33 0.85⎤
⎢ ⎥
⎣0.85 1.17⎦
Active Transformation: α:
45.00°
(x,y)-Comp's of T':
⎡0.75 0.25⎤
⎢ ⎥
⎣0.25 2.75⎦
Tm:
1.75
r:
1.03
Tx̄x̄₁:
2.78
φ₁ / deg:
37.98
Tx̄x̄₂:
0.72
Andere Ebenen und 3D
Entsprechende Formeln lassen sich auch für die anderen Ebenen aufstellen. Hierbei wird zyklisch vertauscht.
Ebene |
\(\varphi\) zählt pos. um |
---|---|
\((x,y)\) |
\(z\) |
\((y,z)\) |
\(x\) |
\((z,x)\) |
\(y\) |
Beispiel \((y,z)\)-Ebene
Passive und aktive Transformation:
Für 3D siehe 3D Elementar-Drehungen.
Weitere Eigenschaften der Passiven Transformation siehe hier.
Tensor-Komponente
Eine Tensor-Komponente ist der Anteil eines symmetrischen Tensors in einer bestimmten „Richtung“.
Diese „Richtung“ wird definiert mit zwei Einheitsvektoren (entlang dieser „Richtung“).
Um eine Tensor-Komponenten zu berechnen, braucht man:
ein Bezugssystem, z.B. das \((x,y,z)\)-System.
die Komponenten des Tensors (bezüglich Bezugssystem): \(T_{xx}, T_{xy}, T_{xz}, T_{yy}, T_{yz}, T_{zz}\).
die Komponenten der Einheitsvektoren (bezüglich Bezugssystem).
\(xx\)-Komponente
Sei die „Richtung“ die \(xx\)-„Richtung“. Dann gilt für die Tensor-Komponente \(T_{xx}\) in dieser „Richtung“:
2D
In 2D z.B. in der \((x,y)\)-Ebene:
\(xy\)-Komponente
Sei die „Richtung“ die \(xy\)-„Richtung“. Dann gilt für die Tensor-Komponente \(T_{xy}\) in dieser „Richtung“:
2D
In 2D z.B. in der \((x,y)\)-Ebene:
\(\bar x\bar x\)-Komponente
Sei die „Richtung“ die \(\bar x\bar x\)-„Richtung“. Weil \(\bar x\) um den Winkel \(\varphi\) relativ zu \(x\) gedreht ist, hat ein Einheitsvektor in \(\bar x\)-Richtung die \((x,y,z)\)-Komponenten \((c_\varphi, s_\varphi, 0)\). Und für die Tensor-Komponente \(T_{\bar x \bar x}\) in dieser „Richtung“ gilt:
2D
In 2D z.B. in der \((x,y)\)-Ebene:
\(\bar x\bar y\)-Komponente
Sei die „Richtung“ die \(\bar x\bar y\)-„Richtung“. Weil \(\bar x\) um den Winkel \(\varphi\) relativ zu \(x\) gedreht ist, hat ein Einheitsvektor in \(\bar x\)-Richtung die \((x,y,z)\)-Komponenten \((c_\varphi, s_\varphi, 0)\). Und weil \(\bar y\) um den Winkel \(\varphi\) relativ zu \(y\) gedreht ist, hat ein Einheitsvektor in \(\bar y\)-Richtung die \((x,y,z)\)-Komponenten \((-s_\varphi, c_\varphi, 0)\). Und für die Tensor-Komponente \(T_{\bar x \bar y}\) in dieser „Richtung“ gilt:
2D
In 2D z.B. in der \((x,y)\)-Ebene:
Dieselben Formeln werden in der Passiven Transformation verwendet.