有限元分析法: (1). 投影的使用

名词解释:

FEM:有限单元法( Finite Element Method, FEM)。

FVM:有限体积法( Finite Volume Methoc, FVM)。

FDM:有限差分法( Finite Difference Method, FDM)。

统称为有限元分析法


核心思路:

将连续问题离散化为若干有限大小的单元问题进行求解。


基本步骤:

剖分---单元分析---求解近似方程。


具体方案--投影:

投影的意义在于将一个复杂的问题投影到已知的空间中,方便问题解决。当然一次投影只能解决一方面问题,可以多次投影达到毕竟最佳值的目的。

方案步骤:

设一个部分可知的函数 f(x) 在空间 V 上的投影为 fv(x) 。空间 V 的基函数为r_i(x)。那么可以得到

∫[f(x)-fv(x)]*r_i(x)dx=0      //投影定理
fv(x)=∑_(j=0)^n[aj*r_j(x)]   //基函数性质

将第2行的式子代入第1行中

∫[f(x)-∑_(j=0)^n[aj*r_j(x)]r_i(x)dx=0
化简可得:
∫f(x)*r_i(x)dx-∑_(j=0)^n[aj∫r_i(x)*r_j(x)dx]=0

只要求出各个 aj 就可以知道 f(x) 在空间 上的投影 fv(x) 。

令 Mij = ∫r_i(x)*r_j(x)dxbi=∫f(x)*r_i(x)dx

那么 aj = Mij / bi 。

就转化为一个解矩阵的问题。


根据 j 的取值区间为[0,n]。可知 a 是一个 (n+1)*1 的矩阵,M 是一个(n+1)*(n+1) 的矩阵,b 是一个 (n+1)*1 的矩阵。


设基函数 r_i(x) 为帽子函数。

if x=[x_(i-1),x_i]
r_i(x)=(x-x_(i-1))/(x_i-x_(i-1))
else if x=[x_i,x_(i+1)]
r_i(x)=(x_(i+1)-x)/(x_(i+1)-x_i)
otherwise
r_i(x)=0

根据辛普森公式:

∫_(a,b) f(x)dx = (b-a)/6 * [f(a)+4*f((a+b)/2)+f(b)]  //这里的=是近似等于

可得到 M 中各项的递推关系式

M_ii=(x_i-x_(i-1))/3+(x_(i+1)-x_i)/3
M_ij=(x_(i+1)-x_i)/6

根据递推法则:

∫_(a,b) f(x)dx = (b-a)/2* [f(a)+f(b)]     //这里的=是近似等于

可得到 b 的各项表达式:

b_i=f(x_i)*0.5*(x_i-x_(i-1)+x_(i+1)-x_i)

这样就可以求得 a 。详细的演算可以在 www.lolplayer.club 上查看。

Matlab代码实现:

1. 求 M 部分

%代码来源:J Pan 《有限元分析(FEA)是个什么东东》. 知乎. 链接:https://zhuanlan.zhihu.com/p/56326567
function M = MassMat1D(x)
n = length(x)-1; % number of subintervals
M = zeros(n+1,n+1); % allocate mass matrix
for i = 1:n % loop over subintervals
    h = x(i+1) - x(i); % interval length
    M(i,i) = M(i,i) + h/3; % add h/3 to M(i,i)
    M(i,i+1) = M(i,i+1) + h/6;
    M(i+1,i) = M(i+1,i) + h/6;
    M(i+1,i+1) = M(i+1,i+1) + h/3;
end

2. 求 b 部分

%代码来源:J Pan 《有限元分析(FEA)是个什么东东》. 知乎. 链接:https://zhuanlan.zhihu.com/p/56326567
function b = LoadVec1D(x,f)
n = length(x)-1;
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

3. 自定义 f(x) 部分

%此m文件用来自定义你想要投影呈现的函数
%代码来源:J Pan 《有限元分析(FEA)是个什么东东》. 知乎. 链接:https://zhuanlan.zhihu.com/p/56326567
function y = Foo(x)
y=x; %这里的函数是y=x*sinx。可以自己修改。

4. 求 fv(x) 部分

%此m文件将原函数分解为各个分段函数,只需运行此文件,
%代码来源:J Pan 《有限元分析(FEA)是个什么东东》. 知乎. 链接:https://zhuanlan.zhihu.com/p/56326567
clear all
n = 5 ;% number of subintervals
h = 1/n; % mesh size
x = 0:h:1; % mesh
y = Foo(x);% calc f(x)
M = MassMat1D(x); % assemble mass
b = LoadVec1D(x,@Foo); % assemble load
Pf = M\b; % solve linear system
plot(x,Pf,x,y); % plot  projection
grid on
legend('投影函数','原函数')
%可以在工作区中找到x和y对应的值,使用y=ax+b就可以计算出各个分段函数。

我们的公众号:认知无线电

我们的网站:www.lolplayer.club

欢迎关注和指正

你可能感兴趣的:(有限元分析法: (1). 投影的使用)