Uploaded by Zackery L

galekin

advertisement
2021/11/28 下午4:40
有限元分析(FEA)是个什么东东 - 知乎
首发于
小潘是个工程师
参考文献:
[1] Larson, Mats G., and Fredrik Bengzon. "The finite element method: theory,
implementation, and practice."
五、如何获得“弱形式”的解
前面我们计算了函数
的,那
的基函数空间的投影情况,我们说有限元是为了解决偏微分方程求解
和偏微分方程又有什么关系呢?这就牵扯到微分方程的“弱形式”了!获得微分方
程的“弱形式”解,可以说是有限元法最重要的概念之一,我们看一下是怎么一回事!假设我们微
分方程具有下列形式:
边界条件为:
https://zhuanlan.zhihu.com/p/56326567
15/28
2021/11/28 下午4:40
有限元分析(FEA)是个什么东东 - 知乎
首发于
小潘是个工程师
其中
和
为给定的函数,
,
,
和
是给定常数。具
有给定热源的一维热传导方程就具备这种形式。微分方程描述的是微观状态,但是我们一般更容易
掌握的是宏观的现象,所以呢,方程我们一般喜欢把微分方程转化成积分方程,比如对上式两边同
时积分:
乍一看,皆大欢喜,实际上有问题,问题在哪呢?——以上方程表示在整个计算域
中,
方程的积分值相等,也就是平均值相等,与原来要求处处相等相比,显得“太弱了”!那怎么办
呢?——我们可以找一个试函数
当然,
(任意的),将原方程改写成如下方式:
不能表现太糟糕,至少要保证两边积分都是收敛的。上述方程对于所有满足条件的
都成立,这个要求太强了,显然当
时这个方程是成立的,那是不是只有
这种情况下才成立呢?——实际上就是的,这可以通过变分法证明。
下一个问题就来了,既然
有千千万万,那我们到底选择哪一个?总不能都选择吧!——前
面我们说了,有限元就是为了解决偏微分方程的求解问题,思路就是将复杂的空间切成很多小区
域,每个区域上假设一个试函数test function(或者叫形函数shape function)
通过求取试函数的系数
来获得函数
,然后
的近似。试函数有一个特点,它只在一个很小的区
间上有数值,其他地方都为零。如果我们在每个点上都用试函数测试一遍,这样至少能保证所单元
上都成立的!——这种将试函数和形函数选择为同一个函数的方法,是一个俄国人最先使用的,
我们称之为伽辽金(Galerkin)法。
这样我们就得到了如下的方程:
这就是所谓的原微分方程的弱形式!之所以“弱”,是因为这个方程的解只能保证在每个单元上方
程左右两边的平均值相等,而不是原微分方程要求的每一点都相等。注意此时的
原微分方程的解
https://zhuanlan.zhihu.com/p/56326567
已经与
有了差异,因为我们现在是用有限维空间去近似了原无限维空间。
16/28
2021/11/28 下午4:40
有限元分析(FEA)是个什么东东 - 知乎
接下来我们要继续变形了,要稍微用点数学知识——不知道大家还记不得分部积分法:假设有函
首发于
数
和
,则很容易得到
小潘是个工程师
乘积的微分为:
为二阶无穷小,可略去,所以可以得到:
两边积分得到:
现在我们令
,
,则有
所以我们可以得到:
通过这种变化,我们对
的要求由2阶降到了1阶,将形函数
从0阶增加到了1阶,由
于形函数是我们自己设计的,这就降低了对原微分方程解的光滑性要求。将边界条件代入上式,可
得展开的微分方程弱形式:
我们可以假设
代入展开的微分方程弱形式就可以得到:
https://zhuanlan.zhihu.com/p/56326567
17/28
2021/11/28 下午4:40
有限元分析(FEA)是个什么东东 - 知乎
首发于
小潘是个工程师
其中
和
为
矩阵,
和
为
向量,具体表达式如下:
矩阵,称之为刚度矩阵,
为负载矩阵,和前面的定义一
这样我们就将微分方程转化成了线性矩阵方程:
其中
为
样。和前面的计算相似,可以获得
的完整矩阵形式如下:
为边界条件带来的等效矩阵,显然只有
很容易求得
https://zhuanlan.zhihu.com/p/56326567
,
或者
时
才有取值,
,即
18/28
2021/11/28 下午4:40
所以可以得到:
有限元分析(FEA)是个什么东东 - 知乎
首发于
小潘是个工程师
MATLAB代码如下:
function A = StiffMat1D(x,kappa)
n = length(x)-1;
A = zeros(n+1,n+1);
for i = 1:n
h = x(i+1) - x(i);
A(i,i) = A(i,i) + 1/h;
A(i,i+1) = A(i,i+1) - 1/h;
A(i+1,i) = A(i+1,i) - 1/h;
A(i+1,i+1) = A(i+1,i+1) + 1/h;
end
A(1,1) = A(1,1) + kappa(1);
A(n+1,n+1) = A(n+1,n+1) + kappa(2);
很容易得到:
MATLAB代码如下:
function b = LoadVec1D(x,f,kappa,g)
n = length(x)-1;
https://zhuanlan.zhihu.com/p/56326567
19/28
2021/11/28 下午4:40
有限元分析(FEA)是个什么东东 - 知乎
b = zeros(n+1,1);
首发于
for i = 1:n
小潘是个工程师
h = x(i+1) - x(i);
b(i) = b(i) + f(x(i))*h/2;
b(i+1) = b(i+1) + f(x(i+1))*h/2;
end
b(1) = b(1) + kappa(1)*g(1);
b(n+1) = b(n+1) + kappa(2)*g(2);
举个例子:假设我们现在有一维导热方程如下:
边界条件为:
也就是左端是恒定温度边界条件,右端是绝热边界条件。对照之前我们理论推导,设定的边界条件
应该具有下列形式:
两者貌似不一致,怎么回事?——我们之所以用诺依曼边界条件进行推导,是因为微分方程弱形
式进行分部积分的时候会用到诺依曼条件,那假如是别的边界条件怎么办呢?比如本例中的就有狄
利克雷条件:
,这就需要一点数学技巧了!
我们知道,物理模型的量一般都是有界的,不会漫天飞,因此,我们可以认为
个有限值,现在假如
非常大,比如说达到
,所以只要我们设置
,那
也是一
要非常接近0才行,于是
即可;
第二个边界条件本身就是诺依曼条件,就简单了,直接设置
即可;
下面我们通过MATLAB来看一下,热源的代码为:
https://zhuanlan.zhihu.com/p/56326567
20/28
Download