gpt4 book ai didi

python - python中有限元节点应力点之间高效准确的插值

转载 作者:太空宇宙 更新时间:2023-11-03 16:45:43 24 4
gpt4 key购买 nike

我想在节点不存在的点处插入来自一堆已知节点的一些 3D 有限元应力场数据。我意识到节点应力已经从高斯点推断出来,但这是我能利用现有数据做的最好的事情。下图给出了 2D 表示。红色和粉色点代表我想要插入值的位置。

Point Set with Red and Pink Unknown values

最初我以为我可以找到包含感兴趣点且没有其他已知点的最小边界框(外壳)或单纯形。在二维中可视化这一点,我意识到这可能会导致错误地忽略邻近值的数据。我打算使用 scipy LindearNDInterpolator但我注意到有一些unexpected behaviour ,我担心它会按照我刚才描述的方式排除附近的点。请注意,粉红色的点不会引用绿色三角形,而是忽略橙色三角形之外的点,尽管它可能更相关。

Triangles around known points

据我所知,最好的方法是采用最近的周围节点,并通过距离加权平均进行插值。我不确定是否有现成的东西或者是否需要编写。我想这是一个相当普遍的问题,所以我认为轮子已经被发明了......

实际上,我的最终目标是通过点集插入/回归 3D 线的值。

最佳答案

您可以尝试Inverse distance weighting 。以下是 1D 示例(很容易推广到 3D):

from pylab import *
# imaginary samples
xmax=10
Npoints=10
x=0.1*randint(0,10*xmax,Npoints)
y=sin(2*x)+x
plot(x,y,ls="",marker="x",color="red",label="samples",ms=9,mew=2)
# interpolation
x2=linspace(0,xmax,150) # new sampling
def weight(x,x0,p): # modify this function in 3D
return 1/(((x-x0)**2)**(p/2)+0.00001) # 0.00001 to avoid infinity
y2=zeros_like(x2)
for p in range(1,4):
for i in range(len(y2)):
y2[i]=sum(y*weight(x,x2[i],p))/sum(weight(x,x2[i],p))
plot(x2,y2,label="Interpolation p="+str(p))
legend(loc=2)
show()

这是结果 interpolation result

正如您所看到的,这并不是太棒。我认为最好的结果是 p=2,但在 3D 中会有所不同。我已经用高斯权重获得了更好的曲线,但没有这样的选择的理论背景。

关于python - python中有限元节点应力点之间高效准确的插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36328807/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com