有限元笔记8-一维单元二阶偏导的推导

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/walkandthink/article/details/78682431

对于拉普拉斯算符 Δ ,在做弱形式的时候通过格林公式可以将其转换为低一阶的梯度算符 来进行计算。但是对更高阶的算符,比如 (Δu) 这样的计算,常规的一阶偏导就不够用了,这个时候就需要二阶偏导数,也就是:

2Nx2,2Nxy,2Ny2

先来看一维的情形,在等参单元中,全局坐标( x,y )与自然坐标( ξ,η )满足一定的转换关系,也就是可以互相写为对方的函数:

x=x(ξ,η)y=y(ξ,η)

同时也会有:
ξ=ξ(x,y)η=η(x,y)

对任意等参一维单元(只考虑沿 x 方向变化,注意,一维单元虽然是一维,但可以是三维空间下的一维单元),我们定义该单元上第 i 个单元节点的形函数为:

Ni=Ni(ξ)

在等参空间中对其求偏导可以得到:

Niξ=Nixxξ

再对其求一次偏导可以得到:

ξ(Niξ)=ξ(Nix)xξ+Nix2xξ2=2Nix2(xξ)2+Nix2xξ2

将我们需要的 2Nix2 移到等式右边就可以得到:

2Nix2=(2Niξ2Nix2xξ2)/(xξ)2

这个就是我们需要的针对高阶算符的二阶偏导了,对二维单元可以用同样的思路,通过链式法则来得到二维的二阶偏导,这里就不再给出了。

用三点lagrange插值多项式大概画一下,代码如下:

def N1(x):
    return (x - x2)*(x - x3)/((x1 - x2)*(x1 - x3))

def dN1(x):
    return (x - x2)/((x1 - x2)*(x1 - x3)) + (x - x3)/((x1 - x2)*(x1 - x3))
def d2N1(x):
    return 2/((x1 - x2)*(x1 - x3))

import numpy as np
import matplotlib.pyplot as plt
x1=-1.0;x2=0.0;x3=1.0
x=np.linspace(x1,x3,50)
n1=N1(x)
dn1=dN1(x)
d2n1=d2N1(x)*np.ones(50)

plt.figure(1)
plt.subplot(131)
plt.title('$N_{1}$',fontsize=18)
plt.plot(x,n1)
plt.subplot(132)
plt.title(r'$\frac{\partial N_{1}}{\partial x}$',fontsize=18)
plt.plot(x,dn1)
plt.subplot(133)
plt.title(r'$\frac{\partial^{2}N_{1}}{\partial x^{2}}$',fontsize=18)
plt.plot(x,d2n1)
#plt.xticks(fontsize=12)
#plt.yticks(fontsize=12)
plt.savefig('shp2dnd.png',dpi=800,bbox_inches='tight')

结果如下:
这里写图片描述

常规的二阶单元在一次偏导之后基本就退化成线性函数了,要计算二阶偏导必须要求单元形函数满足 C1 连续。

猜你喜欢

转载自blog.csdn.net/walkandthink/article/details/78682431
今日推荐