首页/文章/ 详情

有限元基础知识:KNN与径向基函数插值

17小时前浏览1

有一个和接触分析非常类似的领域,那就是不同物理场、不同结果数据之间的映射插值,如果需要互相映射插值的两者是有网格数据的,那么插值的过程与接触计算基本上没啥差异,还更简单一些,但如果其中一套数据是基于节点的,而没有网格单元信息,则需要用到KNN (K近邻点, k nearest nodes)与径向基函数 (RBF, radial basis functions)进行映射插值。

很多做神经网络的朋友们可能都听过KNN,但这个的KNN更加的清晰明确,就是找离一个节点最近的k个对应的节点,做多物理场仿真(尤其是弱耦合)的朋友们应该都知道有款软件叫preCICE或者mpCCI,本质上他们就是提供了基于网格单元的映射插值与基于KNN与RBF的节点插值。


这个被映射插值的物理量可能是各种各样的,可能是压力、应力、温度等等,用统一的方法(略有不同的实现方式,主要考虑是否要考虑守恒的物理量等因素)进行插值。而在这个过程中使用KNN就听起来很简单,最简单的思路就是全局遍历,比如从一个点云(每个点上都对应一些物理量),向另一片点云(或网格)进行搜索,那么这个搜索复杂度可是老高了。那么想着降低搜索的复杂度,其实也很简单,这就用上了我们之前讲的空间划分算法,尽可能的在更小的范围内进行搜索: 

有限元基础知识:空间箱排序(bucket sorting)

接触基础知识:从二分到四叉树与八叉树

接触基础知识:从四叉树八叉树到K-d tree

以下就是一段非常简单的python代码,快速的给出knn的检测:

from sklearn.neighbors import KDTree
tree = KDTree(all_nodes)
distances, indices = tree.query(query_point, k=3)

然后在找到这k个近邻的节点之后,我们就可以通过RBF方式进行插值,可能有朋友会问,这里为啥我们不用拉格朗日插值、线性插值等等,这个原因也很好理解,因为你找到的k近邻点不一定在空间中分布是啥样的,他们中间也没有网格连着。那RBF其实很好理解,可以理解为就是以这个网格节点为中心,然后沿着径向逐渐减小,最后随着离中心越远,逐渐缩减到0,也就是在插值中不再进行贡献,具体如下图所示:

然后诸如对一个物理量的插值就可以写成

 

其中     为第k个节点的径向基函数。那么通过上述的方式就可以实现两个区域基于节点数据的映射插值。大概长这样: 

可能有熟悉神经网络的朋友们会觉得这玩意不是有限元吗,这里的概念咋跟神经网络里面那么多概念是重合的,其实答案就是:数学原理都差不多,学好数学吧!


来源:大狗子说数值模拟
python
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-08-26
最近编辑:17小时前
大狗子说数值模拟
博士 传播国际一流的数值模拟算法
获赞 10粉丝 25文章 73课程 0
点赞
收藏
作者推荐

有限元基础知识:几何非线性中的TL与UL

之前介绍过非线性分析,包括材料、几何与接触非线性,有限元基础知识:非线性分析几何非线性:应变张量今天就几何非线性着重说一下,对于几何非线性分析有两种基本描述方法,Total Lagrange(TL)和Updated Lagrange(UL)方法是两种主要拉格朗日框架。它们的核心区别在于参考构型的选择,这直接影响了应变、应力度量和平衡方程的数学形式。参考构型用“人话”来说就是你的变形、应变是基于哪个形状定义的?是初始时刻的呢?还是 时刻的呢? 以下从理论公式和实际案例两方面详细说明其差异:参考构型的定义 • Total Lagrange(TL)方法始终以初始未变形构型(时间 )为参考。所有物理量(如应变、应力)均映射到初始构型上描述。关键公式:• 应变度量:Green-Lagrange应变张量 其中 为位移, 为初始坐标, 后续大写 普遍表示未变形的形体 位置坐标,也就是对应于 时刻。• 应力度量:第二类Piola-Kirchhoff应力张量 ,与Green应变共轭。• Updated Lagrange(UL)方法以上一增量步的变形后构型(时间 )为参考。物理量在每个增量步更新到最新构型。关键公式:• 应变度量:Almansi应变张量(或增量形式的对数应变) 其中 为增量位移, 为当前坐标,所以这里可以看到与上述UL中应变表达的不同,首先是基于增量位移,其次参考构型是变化的是上一步变形后的构型。 • 应力度量:Cauchy应力张量 \sigma ,直接描述当前应力状态。 平衡方程的弱形式 • TL方法的平衡方程: 积分域为初始体积 ,需处理几何非线性项(如位移二次导数)。• UL方法的平衡方程: 积分域为当前体积 ,几何非线性通过构型更新隐式处理。应力更新算法 • TL方法:应力通过材料本构模型直接更新为第二类Piola-Kirchhoff应力: 其中 是弹性张量。• UL方法:先计算Cauchy应力增量,再通过旋转张量更新: 为旋转张量, 为Almansi应变增量。收敛性与计算效率很多教材与论文都会探讨这两者的收敛性是效率的,然而事实上是这东西跟谁编程,怎么写代码关系非常大。我只能说天下没有免费的午餐,你得到一些东西的同时总会失去一些东西,常规上来说可以做如下总结• TL方法:因初始构型固定,Newton-Raphson迭代易因大旋转步发散,如果对于变形没有那么大,没有接触的材料非线性+结合非线性是比较适合的• UL方法:构型逐步更新,Jacobian矩阵条件数更低,迭代更稳定,又由于每步都更新构型,对于接触分析比较适合两种方法本质是同一物理规律的不同数学描述:TL更适合材料非线性主导问题(y由于不用更新构型),UL更擅长几何非线性与接触耦合场景(因为接触你反正无论如何都得更新构型,虽然正常教科书上绝对不会说是这个理由)。实际应用中(如Abaqus/ANSYS)常混合使用,例如UL处理接触边界,TL处理材料本构。以下是一个基本的TL的代码流程,大家可以以此作为参考: 来源:大狗子说数值模拟

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈