题目
已知某点的应力张量为:
[left[
egin{array}{ccc}
sigma_{x} & au_{xy} & au_{xz}\
au_{yx} &sigma_{y} & au_{yz}\
au_{zx} & au_{zy} &sigma_{z}
end{array}
ight]
=
left[
egin{array}{ccc}
0 &1 &2\
1 & sigma_{y} & 1\
2 &1 &0
end{array}
ight]
]
并已知经过该点的某一平面上的应力矢量为零矢量,求 (sigma_y) 和主应力?
分析
由题意,存在某个微分面(单位法向量为 (oldsymbol{n})),其上的应力矢量 (oldsymbol{T}=oldsymbol{0}),即
[oldsymbol{T}=oldsymbol{sigma}cdotoldsymbol{n}=
left[egin{array}{ccc}
0 & 1 & 2\
1 & sigma_{y} & 1\
2 & 1 & 0
end{array}
ight]
left[
egin{array}{c}
n_1\
n_2\
n_3
end{array}
ight]
=
left[
egin{array}{c}
0\
0\
0
end{array}
ight]
]
行列式必须为零
线性方程组存在非零解,必然行列式为零,即
[left|egin{array}{ccc}
0 & 1 & 2\
1 & sigma_{y} & 1\
2 & 1 & 0
end{array}
ight|
= 0 + 2 + 2 -4sigma_y - 0 - 0
= 0
]
求得 (sigma_y = 1)。
应力张量
于是,应力张量为
[left[
egin{array}{ccc}
sigma_{x} & au_{xy} & au_{xz}\
au_{yx} & sigma_{y} & au_{yz}\
au_{zx} & au_{zy} & sigma_{z}
end{array}
ight]
=
left[
egin{array}{ccc}
0 & 1 & 2\
1 & 1 & 1\
2 & 1 & 0
end{array}
ight]
]
特征值问题
求主应力,即为求应力张量的特征值。
[left|\,oldsymbol{sigma}-sigmaoldsymbol{I} \,
ight| = 0
]
或
[left|
egin{array}{ccc}
-sigma & 1 & 2\
1 & 1-sigma & 1\
2 & 1 & -sigma
end{array}
ight|
=
(1-sigma)sigma^2 + 2 + 2 - 4(1-sigma) + sigma + sigma = 0
]
整理得
[-sigma^3 + sigma^2 + 6sigma = -sigma(sigma-3)(sigma+2) = 0
]
主应力
得到三个主应力分别为
[left{
egin{array}{rcr}
sigma_1 & = & 3\
sigma_2 & = & 0\
sigma_3 & = & -2
end{array}
ight.
]
Python3代码求解
符号运算求特征值
- 调用 Python 下的 sympy 模块
from sympy import init_printing, Matrix
init_printing(use_unicode=True)
Matrix对象表示应力矩阵
# 生成矩阵对象
sigma = Matrix([[0, 1, 2], [1, 1, 1], [2, 1, 0]])
sigma
[left[egin{matrix}0 & 1 & 2\1 & 1 & 1\2 & 1 & 0end{matrix}
ight]
]
求特征值
- 前已求得三个主应力分别为
[left{
egin{array}{rcr}
sigma_1 & = & 3\
sigma_2 & = & 0\
sigma_3 & = & -2
end{array}
ight.
]
- 调用 Matrix 对象的 eigenvals 方法
sigma.eigenvals() # 求特征值
[left { -2 : 1, quad 0 : 1, quad 3 : 1
ight }
]
- 冒号后的数字表示一重特征值
求特征矢量
- 调用 Matrix 对象的 eigenvects 方法
sigma.eigenvects()
[left [ left ( -2, quad 1, quad left [ left[egin{matrix}-1\0\1end{matrix}
ight]
ight ]
ight ), quad left ( 0, quad 1, quad left [ left[egin{matrix}1\-2\1end{matrix}
ight]
ight ]
ight ), quad left ( 3, quad 1, quad left [ left[egin{matrix}1\1\1end{matrix}
ight]
ight ]
ight )
ight ]
]