- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Matlab计算效率1
Matlab 计算效率的提高
参照文《On efficient finite element assembly in Matlab》by Alejandro A. Ortiz. 用Matlab进行有限元计算,往往采用稀疏矩阵节约内存,一般是一开始就定义整体刚度矩阵为稀疏矩阵,然后再组集,但需要耗费大量时间(见Alejandro A.Ortiz),而作者先使用全矩阵方式求得每个单元矩阵,然后利用K=sparse(I,J,X,freedom,freedom)组集整体刚度矩阵,随着网格的细分,组集效率的提高变得明显。但是作者只举了一个常规有限元三角形单元分析温度场的例子,而我们常常用常规有限元四节点等参单元(更高阶单元)来进行分析问题。需要对该程序进行一些修改。
首先说一下 sparse的用法。
一般我们将full矩阵转换为稀疏矩阵直接采用K=sparse(K)。但是采用K=sparse(I,J,X,freedom,freedom)使得生成稀疏矩阵变得灵活。其中I为freedom X freedom的稀疏矩阵K的非零元素的行标,J为列标,X则为K(I,J)的值。这样只需要知道非零元素在整个矩阵K的位置,即可生成稀疏矩阵。
比如
I=[1 3 2 3];J=[1 1 2 4]; X=[1 3 2 -1];
Freedom=5;
则 输入
K=sparse(I,J,X,freedom,freedom)
得到:
K =
(1,1) 1
(3,1) 3
(2,2) 2
(3,4) -1
有限元中:
一般组集方法:
先设置整体刚度矩阵
K=sparse(freedom,freedom),然后组集整体刚度矩阵
新的组集方法:
根据Alejandro A.Ortiz的组集方法是先确定单元full矩阵在整体矩阵的位置,最后K=sparse(I,J,X,freedom,freedom)组集整体刚度矩阵。
算例1. 下面分别使用两种组集方法测试尺寸为1m x 1m,弹性模量为1,泊松比取0.3,密度取1的块体在重力作用下组集整体刚度矩阵所需时间。
新的组集的程序:
% Compute K
I=zeros(64*numelem,1);
J=zeros(64*numelem,1);
K_c=zeros(64*numelem,1); %这里若使用I=[],J=[],K_c=[];在下面循环计算反而要花更多的时间,因为四节点等参单元生成的单元刚度矩阵为8X8,故I维数为64numelem.
s=1;
q=[];
tic
for iel=1:numelem
sctr = element(iel,:) ;
nn = length(sctr);
ke = 0;
sctr = element(iel,:); % element connectivity
%choose Gauss quadrature rules for elements
[W,Q]=quadrature(2,GAUSS,2);
%Transfrom these Gauss points to global coords for plotting ONLY
for igp = 1:size(W,1)
gpnt = Q(igp,:) ;
[N,dNdxi] = lagrange_basis(elemType,gpnt) ;
Gpnt = N*node(sctr,:) ;
q = [q;Gpnt] ;
end
% Determine the position in the global matrix K
sctr=element(iel,:);
for i=1:length(sctr)
sctrB(2*i-1)=2*sctr(i)-1;
sctrB(2*i)=2*sctr(i);
end
r=s;
% ---------------------
% Loop on Gauss points
% ---------------------
for kk = 1 : size(W,1)
B=[];
pt = Q(kk,:);
您可能关注的文档
最近下载
- 十八护理核心制度.doc VIP
- Unit3OurcultureourtresaureReading课件高中英语牛津译林版(2020)选修第三册3.pptx
- JJF(京)159-2025 水质在线电导率仪校准规范.pdf VIP
- GZ104 跨境电子商务赛题第5套-2024年全国职业院校技能大赛双数年拟设赛项赛题.pdf VIP
- 新22J10 无障碍设计.docx VIP
- 杨志人物介绍水浒传.pptx VIP
- 材料科学与工程基础》顾宜第四章课后答案.pptx VIP
- GZ104 跨境电子商务赛题第6套-2024年全国职业院校技能大赛双数年拟设赛项赛题.pdf VIP
- 《PDCA管理循环培训》课件.ppt VIP
- DGTJ08-2206-2024 建筑信息模型技术应用标准(人防工程).pdf VIP
文档评论(0)