用python进行简单有限元分析——二维4单元9节点总刚度组装以及9个节点的力和位移求解

本文是2020年数值分析作业,介绍如何使用Python进行二维有限元分析,包括总刚度矩阵的组装、设置力和位移边界条件,最终求解9个节点的力和位移,提供了可直接运行的代码。
摘要由CSDN通过智能技术生成

2020年数值分析作业,已成功实现,可直接复制代码运行!!

1、大概的理论。这里主要讲总刚度矩阵的组装原理,如何得到单元刚度矩阵请看添加链接描述https://blog.csdn.net/Youngist/article/details/106651143

在这里插入图片描述

2、实现得到4单元9节点总刚度矩阵的源代码

from math import *
import numpy as np
from matplotlib import pyplot as plt



# 1个单元四个节点
def shapefunction(r,s):#形函数
    N1 = 1 / 4 * (1 - r) * (1 - s)
    N2 = 1 / 4 * (1 + r) * (1 - s)
    N3 = 1 / 4 * (1 + r) * (1 + s)
    N4 = 1 / 4 * (1 - r) * (1 + s)
    return N1,N2,N3,N4

def diffNdr(r,s): # 求dNidr
    dN1dr = 1 / 4 * (-1) * (1 - s)
    dN2dr = 1 / 4 * (1) * (1 - s)
    dN3dr = 1 / 4 * (1) * (1 + s)
    dN4dr = 1 / 4 * (-1) * (1 + s)
    dNdr = [dN1dr,dN2dr,dN3dr,dN4dr]
    return dNdr


def diffNds(r,s): # 求dNids
    dN1ds = 1 / 4 * (1 - r) * (-1)
    dN2ds = 1 / 4 * (1 + r) * (-1)
    dN3ds = 1 / 4 * (1 + r) * (1)
    dN4ds = 1 / 4 * (1 - r) * (1)
    dNds = [dN1ds, dN2ds, dN3ds, dN4ds]
    return dNds

def jacobian(x,y,r,s): # 求J,Jinv,Jdet
    dNdr = diffNdr(r,s)
    dNds = diffNds(r,s)

    dxdr = x[0]*dNdr[0]+x[1]*dNdr[1]+x[2]*dNdr[2]+x[3]*dNdr[3]
    dxds = x[0]*dNds[0]+x[1]*dNds[1]+x[2]*dNds[2]+x[3]*dNds[3]
    dydr = y[0]*dNdr[0]+y[1]*dNdr[1]+y[2]*dNdr[2]+y[3]*dNdr[3]
    dyds = y[0]*dNds[0]+y[1]*dNds[1]+y[2]*dNds[2]+y[3]*dNds[3]

    J = np.array([[dxdr,dxds],[dydr,dyds]])
    Jdet = np.linalg.det(J)
    # Jdet = J[0][0]*J[1][1]-J[0][1]*J[1][0]
    Jinv = np.linalg.inv(J)
    return Jinv,Jdet

def Bmatrix(r,s,Jinv):# 求B
    dNdr = diffNdr(r, s)
    dNds = diffNds(r, s)

    B1 = np.matrix([[1,0,0,0],[0,0,0,1],[0,<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值