有限元(FEM) 、有限差分(FDM)和有限体积(FVM) 的优势和劣势

前言: 偏微分方程的类型

偏微分方程(组)可以把它的算子提出来, 构成算子代数方程(组). 然后根据算子代数方程(组)的特征值来区分是椭圆的, 双曲的, 还是抛物型的.具体可以翻看各类数学物理方程或者偏微分方程的教材, 一般前两章必讲.

工程中碰到的椭圆方程(组)有

  • 弹性力学中的各种方程组, 几乎都是椭圆的
  • 热传导方程, 如果不含时间项(定常)

工程中碰到的纯双曲方程不多, 各种波动方程一般都是双曲的

  • 声波传导, 各类波动方程, 只能在教科书的例子中见到

工程中的纯抛物问题也不多, 各种发展类型的物理问题大多数是抛物型的,比如

  • 非定常热传导(纯抛物型的)

下面我们要说一些nb的方程了, 多类型混合的, 上面已经说了, 工程界碰到的纯粹抛物和纯粹双曲的都不多, 而且单类型的方程都不是被人搞出解析解了, 就是用数值方法解决的很好了.

抛物型最容易和其他两种结合搞出难以求解的方程, 比如

  • 弱可压缩流体(比如亚声速燃烧, 风场等), 椭圆-抛物方程, 因为抛去时间项后, 体现为椭圆方程的特征, 这种一般好求解
  • 各类液体流动方程, 同上

双曲-抛物型方程比较nb, 我们专门说

  • 空气动力学方程组, 波澜壮阔如雷贯耳, 典型的双曲-抛物型.  你就算抛去时间项, 还是双曲型的. 双曲已经很难搞, 叠加一个抛物属性, 有多难随便你想.
  • 电磁学Maxwell方程组, 特征速度就是光速, CFL条件你要怎么提?

双曲型方程是可以搞出间断的, 在空气动力学中就是激波, 所以含有双曲属性的工业问题, 在学术界都是老大难.

 

三类方法的优缺点

 

有限元(Finite Element Method)

椭圆方程适合用有限元,当然椭圆方程用什么都可以,只不过有限元方法之于椭圆方程就好比青椒对瘦肉,绝配。那些求解结构强度, 结构动响应的 都用有限元.前面说了, 这些问题大多都是椭圆型方程, 就算是带了非定常时间项, 也可以用各类方法把时间项折叠(folding)到空间项中, 用有限元方法求解. 椭圆方程中没有间断, 怎么折腾都可以. 你们用到的ansys, abaqus核心求解器都是典型的有限元方法.

 

有限差分(Finite Difference Method)


有限差分百搭,解什么都可以,只不过有限差分大多要求结构网格,一般学术研究中用得多。

有限差分还有个不大不小的优势,就是能利用结构网格的拓扑优势轻松扩大模板,构造出高精度格式。

电磁学领域有些软件会用FDTD(时域有限差分)方法, 个人见过的为数不多的在工业软件领域采用差分的例子


有限体积法(Finite Volume Method)

有限体积法就比较强大了。除了高精度构造略微麻烦,几乎通吃有限差分所有领域,双曲性、抛物型、椭圆形都可以。当然对于椭圆形方程,不如有限元方法更搭配. 看看这些如雷贯耳的软件, fluent, star-cd, cfx, esi-fastran, esi-ace, openfoam, su2等等全是有限体积法,你就知道有限体积法的强大了.
 

三种方法中有限元和有限体积对计算域(几何区域)复杂度适应性好,而有限差分就是差很多了,因此FEM和FVM都是工程软件的首选,现在甚至学术界几乎都用FEM和FVM了,而FDM只是学生入门的时候用用。

 

 

  • 21
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是一个用MATLAB编写的简支梁有限元程序: ```matlab clear all; clc; % 梁的参数 L = 5; % 梁的长度 E = 2.1e11; % 弹性模量 I = 8.3333e-6; % 截面惯性矩 rho = 7800; % 密度 A = 0.01; % 横截面积 % 离散化参数 n = 20; % 节点数目 m = n-1; % 单元数目 % 计算单元长度 dx = L/m; % 初始化矩阵 K = zeros(n, n); % 刚度矩阵 M = zeros(n, n); % 质量矩阵 % 计算局部刚度矩阵和质量矩阵 k = E*I/dx^3*[12 6*dx -12 6*dx; 6*dx 4*dx^2 -6*dx 2*dx^2; -12 -6*dx 12 -6*dx; 6*dx 2*dx^2 -6*dx 4*dx^2]; m = rho*A*dx/420*[156 22*dx 54 -13*dx; 22*dx 4*dx^2 13*dx -3*dx^2; 54 13*dx 156 -22*dx; -13*dx -3*dx^2 -22*dx 4*dx^2]; % 组装全局刚度矩阵和质量矩阵 for i = 1:m K(i:i+3, i:i+3) = K(i:i+3, i:i+3) + k; M(i:i+3, i:i+3) = M(i:i+3, i:i+3) + m; end % 施加边界条件 K([1, end], :) = 0; K(:, [1, end]) = 0; K(1, 1) = 1; K(end, end) = 1; M([1, end], :) = 0; M(:, [1, end]) = 0; M(1, 1) = 1; M(end, end) = 1; % 求解特征值和特征向量 [V, D] = eig(K, M); % 提取固有频率和振型 f = sqrt(diag(D))/(2*pi); y = V'; % 绘制前6阶固有频率和振型 for i = 1:6 figure; plot(linspace(0, L, n), y(i, :), '-o'); title(['第', num2str(i), '阶固有频率为', num2str(f(i)), 'Hz']); xlabel('位置(米)'); ylabel('位移(米)'); end ``` 在这个程序中,我们将梁分成20个节点,并计算每个节点的刚度矩阵和质量矩阵。然后,我们将这些局部矩阵组装成全局刚度矩阵和质量矩阵,并施加边界条件(两端简支)。最后,我们使用MATLAB的eig函数求解特征值和特征向量,提取固有频率和振型,并绘制前6阶固有频率和振型。 请注意,这个程序只是一个简单的示例。在实际应用中,您可能需要根据您的具体问题进行一些修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值