zoukankan      html  css  js  c++  java
  • Python3之弹性力学——应力张量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 & 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 ] ]

    参考

  • 相关阅读:
    插入排序
    APPlication,Session,Cookie,ViewState和Cache之间的区别
    sqlserver 2005新特性
    选择排序
    Transact_SQL小手册
    装箱和取消装箱
    select语句的执行步骤:
    using 的三种用法
    创建索引及撤销
    (转译)用FFmpeg和SDL写播放器08软件缩放
  • 原文地址:https://www.cnblogs.com/brightyuxl/p/9992441.html
Copyright © 2011-2022 走看看