روش اجزاء محدود یا روش المان محدود (Finite Element Method) که به اختصار (FEM) نامیده می‌شود، روشی است عددی برای حل تقریبی معادلات دیفرانسیل جزئی و نیز حل معادله‌های انتگرالی. (کاربرد عملی اجزای محدود معمولا با نام تحلیل اجزا محدود (FEA) خوانده می‌شود). اساس کار این روش یا حذف کامل معادلات دیفرانسیل یا ساده سازی آنها به معادلات دیفرانسیل معمولی، که با روشهای عددی مثل اویلر حل می‌شوند، می‌باشد.

در حل معادلات دیفرانسیل جزئی مسئله مهم این است که به معادله ساده‌ای که از نظر عددی پایدار است- به این معنا که خطا در داده‌های اولیه و در حین حل آنقدر نباشد که به نتایج نا مفهوم منتهی شود- برسیم. روشهایی با مزایا و معایب مختلف برای این امر وجود دارد، که روش اجزاء محدود یکی از بهترین آنهاست. این روش درحل معادلات دیفرانسیل جزئی روی دامنه‌های پیچیده  یا هنگامی که دامنه متغیر است، یا وقتی که دقت بالا در همه جای دامنه الزامی نیست و یا اگر نتایج همبستگی و یکنواختی کافی را ندارند، بسیار مفید می‌باشد. به عنوان مثال در شبیه سازی یک تصادف در قسمت جلوی ماشین، نیازی به دقت بالای نتایج در عقب ماشین نیست، همچنین در شبیه سازی و پیش بینی هوا روی کره زمین، هوای روی خشکی‌ها اهمیت بیشتری از هوای روی دریاها دارند.

در این پست، یکی از کامل ترین پروژه های درس المان محدود را جهت دانلود رایگان خدمت شما کاربران ارایه می دهیم. در حقیقت این پروژه یک ToolBox می باشد که برای نرم افزار MATLAB  ارایه شده است. برخی کاربردهای این ToolBox:

– حل معادلات ODE در مسایل با شرایط مرزی (BVP)

– حل معادلات PDE در مسایل با شرایط مرزی (BVP)

از این تولباکس می توان در مسایل یک بعدی، دو بعدی و سه بعدی استفاده کرد. همچنین قابلیت مش بندی ها متفاوت در این نرم افزار درنظر گرفته شده است. توابعی که در برنامه نویسی این تولباکس بکار رفته است، در ادامه معرفی می شود:

FEM1
this is the main routine for solving ODE BVPs using any combination  of Dirichlet, Neumann or Robin conditions

GENMAT1
called by FEM1 and is the core of the program. It generates the  matrices used for solving the linear equation system for the ODE

REFINE1
with this routine you can refine the mesh over certain critical grid points. The the gridpoints will become non-uniformly linearly spaced

TEST1
this is a test for the 1D case of FEM. Look through this example carefully in order to fully understand how FEM1 works

FEM2.mat
contains examples over meshes/triangulations in 2D

PLOTGRID2
plot mesh/triangulation in 2D and put a number in each corresponding element/triangle

QUADSPACE
generates quadratically spaced vectors. That is, the spaces are linearly decreasing/increasing

FEM2
this is the main routine for solving PDE BVPs using any combination of Dirichlet, Neumann or Robin conditions

GENMAT2
called by FEM2 and is the core of the program. It generates the matrices used for solving the linear equation system for the PDE

TEST2
test for the 2D case of FEM. Test this for better learning how to use FEM2 and other utilities

همچنین در این مجموعه، شش مثال و پروژه یصورت کامل و شبیه سازی شده قرار داده شده است. مانند:

۱- برخورد یک موج به یک صفحه شیشه ای در خلا (مشخصات صفحه:conductivity %sigma=.02 mho/m و  relative permittivity of e_r=2.5)

۲- مثال الکترواستاتیک

۳- کار با Handle Graphics در متلب

کد نوشته شده جهت حل مثال شماره ۱ بصورت زیر می باشد:

%This is an electrostatic example. It is a resistive element
%with a potential at the bottom equal to V=0 and at the top
%the electric potential is V=10. There is no net electric field
%towards the other sides of the square plate.

% **************
% http://EngPedia.ir
% Iranian Engineering Encyclopedia
% **************************

N=10;
%generate grid
xn=linspace(0,1,N);
[X,Y]=meshgrid(xn);
nod2xy=[X(:) Y(:)];
%generate triangulation/mesh
el2nod=delaunay(X(:),Y(:));
%find boundary nodes
geom.a=find(nod2xy(:,2)==0); %lower boundary
geom.b=find(nod2xy(:,1)==1); %right boundary
geom.c=find(nod2xy(:,2)==1); %upper boundary
geom.d=find(nod2xy(:,1)==0); %left boundary
geom.b=setdiff(geom.b,[geom.a;geom.c]);
geom.d=setdiff(geom.d,[geom.a;geom.c]);

%drawing mesh and gridpoints
plotgrid2(nod2xy,el2nod)
%plotting boundary nodes
figure
hold on
plot(nod2xy(geom.a,1),nod2xy(geom.a,2),’.-b’)
plot(nod2xy(geom.b,1),nod2xy(geom.b,2),’.-r’)
plot(nod2xy(geom.c,1),nod2xy(geom.c,2),’.-b’)
plot(nod2xy(geom.d,1),nod2xy(geom.d,2),’.-r’)
legend(‘Dirichlet’,’Neumann’,0)

%generate boundary conditions
bd={};
bd{1}=[geom.a zeros(N,1)]; %lower boundary (Dirichlet)
bd{2}=[geom.b zeros(N-2,2)]; %right boundary (Neumann)
bd{3}=[geom.c 10*ones(N,1)]; %upper boundary (Dirichlet)
bd{4}=[geom.d zeros(N-2,2)]; %left boundary (Neumann)

%set PDE parameter values
alpha=ones(size(nod2xy,1),1);
beta=zeros(size(nod2xy,1),1);
s=ones(size(nod2xy,1),1);

u=fem2(nod2xy,el2nod,alpha,beta,s,bd);
%plot solution as points
figure
plot3(nod2xy(:,1),nod2xy(:,2),u,’.’)
rotate3d
%plot solution as a surface
[u x y c]=fem2(nod2xy,el2nod,alpha,beta,s,bd);
figure
fill3(x,y,u,c)
shading flat
colormap summer
rotate3d
همچنین در ادامه یک ایبوک با نام Programing the Finite Element Method with MATLAB جهت دانلود قرار گرفته است. این ایبوک در ۴۵ صفحه تنظیم شده است که به بیان اصول FEM در زبان متلب می پردازد و به چند مثال همراه با کدها اشاره می کند.
منبع: دانلود ایبوک

دانلود پروژه در متلب