http://blog.163.com/zpfzcjndx@126/blog/static/6354568120135196735577/
最近一直在计算向量式有限元的膜单元,笔者真心给Matlab的计算速度给跪了,之前分析梁杆单元的时候还能接受,但现在真心无语了,电脑常跑了一夜,第二天早上却发现计算结果是错的。因此我不得不投向数值计算最经典的Fortan语言。
本文以一个简单的平面桁架算例,如图1,分别用Fortran和Matlab编写相同的分析程序进行计算,它们的计算速度可以说有天壤之别,如图2,分别增大计算循环步数两种语言的计算时间比较,图3为个人计算机的性能配置。这也印证了网上盛传的一句话“MATLAB只是个高级计算器”,当然,决不能因此一棒子拍死MATLAB,它在很多方面的功能还是很强大的,是其他一些软件是无法比拟的。
图1
计算模型
图2 计算速度对比
图3 计算机配置
MATLAB程序~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
clc
clear
Node=xlsread('Data.xls','Node');
Element=xlsread('Data.xls','Element');
Boundary=xlsread('Data.xls','Boundary');
Section=xlsread('Data.xls','Section');
Force=xlsread('Data.xls','Force');
%%读取数据
N_Element=size(Element,1);
N_Node=size(Node,1);
N_Force=size(Force,1);
N_Boundary=size(Boundary,1);
h=1e-4;
alltime=20;
Zeta =0.1;
EA=Section(1,1)*Section(1,2);
%%阻尼系数
C1 = 1+Zeta*h/2;
C2 = 1-Zeta*h/2;
Squre_h=h^2;
Mass=0.1;
%%定义位移
ExtForce=zeros(N_Node,2);
for i=1:N_Force
ExtForce(Force(i,1),:)=Force(i,2:3);
end
ExpB=ones(N_Node,2);
for i=1:N_Boundary
ExpB(Boundary(i,1),:)=Boundary(i,2:3);
end
First=Node;
Second=Node;
%约束标识
BD=ones(N_Node,2)-ExpB;
InternalForce=zeros(N_Node,2);
El