怎样用matlab进行matlab做有限元分析析

小木虫 --- 500万硕博科研人员喜爱的学术科研平台
&&查看话题
MATLAB有限元分析与应用
MATLAB有限元分析与应用,大家将就看
研究生必备与500万研究生在线互动!
扫描下载送金币
浏览器进程
打开微信扫一扫
随时随地聊科研查看: 5925|回复: 8|关注: 0
怎样用matlab进行有限元分析? 新手求教
<h1 style="color:# 麦片财富积分
新手, 积分 5, 距离下一级还需 45 积分
利用matlab画出了一个图,在正方形内有若干圆形。想利用有限元方法分析计算。怎样利用matlab来进行?要求圆形内和正方形中其他区域有不同的网格密度。
求教。谢谢!急盼解答!
PS:帮助文件怎么看比较好啊。。。感觉看帮助文件晕的慌
<h1 style="color:# 麦片财富积分
为什么要用matlab?
有很多有限元分析软件可以做前处理 画网格
比如 ansys MSC.Nastran 等
<h1 style="color:# 麦片财富积分
回复 2# lewis 的帖子
直接在MATLAB中不能够画出来么?
<h1 style="color:# 麦片财富积分
还是用专门的有限元软件来做吧,用matlab只适合做点验证算例的工作。
<h1 style="color:# 麦片财富积分
但是我先用matlab来生成的一个图形,要在这个图形上用有限元分析啊。每一次运行程序所得出的图形是不同的。也就是说,不能每次都移植去ansys,也没法移植过去网格化。所以还是希望找到可以直接用matlab来处理的方法。
<h1 style="color:# 麦片财富积分
DT算法很好用的哦
:loveliness:
学习中、、、、、
<h1 style="color:# 麦片财富积分
新手像你请教,matlab画图是怎么画的啊
<h1 style="color:# 麦片财富积分
xywade 发表于
新手像你请教,matlab画图是怎么画的啊
很久没上过。。。希望你已经解决了问题。
我现在画图,都是找到点集,然后直接plot出来。 其实就是一推点
<h1 style="color:# 麦片财富积分
画点的方法也不错
Powered by有限元matlab仿真
最近写有有限元作业,用matlab实现了整个的过程,顺便熟悉一下有限元的整体解题思路,感觉这确实是一种很好方法。下面对书上的一道题做仿真吧,最后结果如下。
题目:F的作用下,求各节点位移和各单元应力,已知
&这是一个正方形的薄板,上面两个顶点处被吊起来,在中心处受到一个向下的力。现分成四个单元(下面的两个顶点编号为1,2,上面个两个为3,4,中间的5)
执行程序得到如下结果
1节点的位移:(u,v) = (-1.4, -7.1)
2节点的位移:(u,v) = (1.4, -7.1)
3节点的位移:(u,v) = (0, 0)
4节点的位移:(u,v) = (0, 0)
5节点的位移:(u,v) = (0, -8.5)
应力为(.75e+006,-2.25e+006)
应变为(3.5,1.7,-2.1)
应力为(1.5e+006,-1.5e+006,6.9)
应变为(7.1,-7.1,1.0)
应力为(.75e+006,2.25e+006)
应变为(3.5,1.7,2.1)
应力为(0,9e+006,0)
应变为(0,4.2,0)
还可以实现各顶点移动的动画图,本来想做个gif,但发现getframe截不了屏,郁闷!!!只能在这贴几张图了
这个是不是就是ANSYS的有限元分析啊!
代码部分如下,显示动画的代码麻烦点,就不贴了,从代码也可以看到,好的数据结构的重要性:
main.m文件:
choise = 1;
switch choise
&&& case 1
% 作业第3题
verts = [0 0;
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&
1 1;]*0.2;
eleindex = [1 5 4;
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&
vertdisind = [1 1 1 1 0 0 0 0 0 1]';
R = [0 0 0 0 0 0 0 0 0 -30000]';
&&& case 2
% 书上例题
verts = [0 2;
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&
eleindex = [5 2 4;
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&
patch('Faces', eleindex, 'Vertices', verts, 'FaceColor', 'r'); %
axis equal
hFEM.vertcount = size(verts, 1);
hFEM.verts =
hFEM.elecount = size(eleindex, 1);
hFEM.eleindex =
hFEM.mu = 0;
hFEM.E = 210e9;
hFEM.t = 0.01;
hFEM = FEM(hFEM);
% 求解有限元方程得各节点位移
hFEM = FEMSolve(hFEM, vertdisind, R);
for k = 1:hFEM.vertcount
fprintf('%d节点的位移:(u,v) = (%g, %g)\n', k, hFEM.vertdis([2*k-1,
% 求各单元应力、应变
for k = 1:hFEM.elecount
&&& ind(1:2:5) =
2*hFEM.eleindex(k, :)-1;
&&& ind(2:2:6) =
2*hFEM.eleindex(k, :);
&&& stress =
hFEM.eletruct(k).S * hFEM.vertdis(ind);
&&& strain =
hFEM.eletruct(k).B * hFEM.vertdis(ind);
fprintf('第%d单元:\n应力为(%g,%g,%g)\n', k, stress);
fprintf('应变为(%g,%g,%g)\n', strain);
FEM.m文件:
% 计算FEM分析的各种矩阵
function hFEM = FEM(hFEM)
% 处理每个单元
for i = 1:hFEM.elecount
hFEM.eletruct(i) = FEMele(hFEM, i);
% 计算合成刚度矩阵
hFEM.K = FEMCalcCombiningK(hFEM);
function hFEMele = FEMele(hFEM, ind)
hFEMele.ele = hFEM.verts(hFEM.eleindex(ind, :), :);
hFEMele.B = FEMCalcB(hFEMele);
hFEMele.D = FEMCalcD(hFEM);
hFEMele.S = FEMCalcS(hFEMele);
hFEMele.K = FEMCalcK(hFEM, hFEMele);
% 计算几何矩阵
function B = FEMCalcB(hFEMele)
ele = hFEMele.
A(:, 2:3) =
A(:, 1) = 1;
invA = inv(A);
B(1, 1:2:5) = invA(2, :);
B(2, 2:2:6) = invA(3, :);
B(3, 1:2:5) = invA(3, :);
B(3, 2:2:6) = invA(2, :);
% 计算应力矩阵
function D = FEMCalcD(hFEM)
mu = hFEM.
E = hFEM.E;
D = [1 mu 0;
(1-mu)/2]*E/(1-mu^2);
% 计算应力变换矩阵
function S = FEMCalcS(hFEMele)
S = hFEMele.D*hFEMele.B;
% 计算单元刚度矩阵
function K = FEMCalcK(hFEM, hFEMele)
triarea = CalcTriangleArea(hFEMele.ele);
K = hFEM.t*triarea*hFEMele.B'*hFEMele.D*hFEMele.B;
% 计算三角形面积
function area = CalcTriangleArea(ele)
A(:, 2:3) =
A(:, 1) = 1;
area = 0.5*det(A);
% 计算合成矩阵
function K = FEMCalcCombiningK(hFEM)
vertcount = hFEM.
elecount = hFEM.
eleindex = hFEM.
eleK = zeros(6, 6, elecount);
for k = 1:elecount
&&& eleK(:, :,
k) = hFEM.eletruct(k).K;
K = zeros(vertcount*2);
for i = 1:vertcount
&&& for j =
1:vertcount
for k = 1:elecount
&&&&&&&&&&&
indi = find(eleindex(k, :)==i);
&&&&&&&&&&&
indj = find(eleindex(k, :)==j);
&&&&&&&&&&&
if ~isempty(indi) &&
~isempty(indj)
&&&&&&&&&&&&&&&
K(2*i-1:2*i, 2*j-1:2*j) = K(2*i-1:2*i, 2*j-1:2*j) +
eleK(2*indi-1:2*indi, 2*indj-1:2*indj, k);
&&&&&&&&&&&
FEMSolve.m文件:
% 求解有限元方程
function hFEM = FEMSolve(hFEM, vertdisind, R)
K = hFEM.K;
hFEM.vertdis = SolveFEM(vertdisind, R, K);
for i = 1:hFEM.elecount
hFEM.eletruct(i).vertdis(1:2:5) = hFEM.vertdis(2*hFEM.eleindex(i,
:) - 1); % u
hFEM.eletruct(i).vertdis(2:2:6) = hFEM.vertdis(2*hFEM.eleindex(i,
function vertdis = SolveFEM(vertdisind, R, K)
ind = find(vertdisind ~= 0);
Krule = K(ind, ind);
Rrule = R(ind);
vertdis(ind) = Krule\R
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 有限元分析软件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信