代码及使用方法

2022-07-15 13:13:14   第一文档网     [ 字体: ] [ 阅读: ] [ 文档下载 ]
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。下载word有问题请添加QQ:admin处理,感谢您的支持与谅解。点击这里给我发消息

#第一文档网# 导语】以下是®第一文档网的小编为您整理的《代码及使用方法》,欢迎阅读!
使用方法,代码

代码及使用方法.txt我这人从不记仇,一般有仇当场我就报了。没什么事不要找我,有事更不用找我!就算是believe中间也藏了一个lie!我那么喜欢你,你喜欢我一下会死啊?我又不是人民币,怎么能让人人都喜欢我?程序执行方法:just for matlab new users 7.1以上版本

打开matlab,点开new M-file,将上述源程序复制粘贴到M-文件中,修改蓝色部分的格式,保存。按F5即可执行~

%%%% A 99 LINE TOPOLOGY OPTIMIZATION CODE BY OLE SIGMUND, JANUARY 2000 %%% %%%% CODE MODIFIED FOR INCREASED SPEED, September 2002, BY OLE SIGMUND %%% function top(nelx,nely,volfrac,penal,rmin); nelx=80;%x轴向单元数目 nely=20;%y轴向单元数据 volfrac=0.4;%体积比

penal=3;%材料插值的惩罚因子 rmin=2; %敏度过滤的半径 % INITIALIZE 初始化

x(1:nely,1:nelx) = volfrac; %x是设计变量 loop = 0; %存放迭代次数的变量

change = 1.; %每次迭代目标函数的改变值,用来判断何时收敛 % START ITERATION 开始迭代

while change > 0.01 %当两次目标函数的迭代的差小于0.01时候,停止迭代 loop = loop + 1; %迭代次数加1

xold = x; %将前一次的设计变量付给xold % FE-ANALYSIS 有限元分析

[U]=FE(nelx,nely,x,penal);

% OBJECTIVE FUNCTION AND SENSITIVITY ANALYSIS 目标函数和灵敏度很细 [KE] = lk; %单元刚度矩阵

c = 0.; %用来存放目标函数的变量,这里目标函数是刚度最大,也就是柔度最

for ely = 1:nely for elx = 1:nelx

n1 = (nely+1)*(elx-1)+ely; n2 = (nely+1)* elx +ely;

Ue = U([2*n1-1;2*n1; 2*n2-1;2*n2; 2*n2+1;2*n2+2; 2*n1+1;2*n1+2],1); c = c + x(ely,elx)^penal*Ue'*KE*Ue;%计算目标函数柔度的值 dc(ely,elx) = -penal*x(ely,elx)^(penal-1)*Ue'*KE*Ue; %灵敏度分析的结果,参考文献公式


end end

% FILTERING OF SENSITIVITIES

[dc] = check(nelx,nely,rmin,x,dc); %灵敏度过滤,为了边界光顺 % DESIGN UPDATE BY THE OPTIMALITY CRITERIA METHOD

[x] = OC(nelx,nely,x,volfrac,dc); %优化准则法更新设计变量 % PRINT RESULTS

change = max(max(abs(x-xold))); %计算目标函数的该变量

disp([' It.: ' sprintf('%4i',loop) ' Obj.: ' sprintf('%10.4f',c) ... ' Vol.: ' sprintf('%6.3f',sum(sum(x))/(nelx*nely)) ... ' ch.: ' sprintf('%6.3f',change )]) %屏幕显示迭代信息 % PLOT DENSITIES

colormap(gray); imagesc(-x); axis equal; axis tight; axis off;pause(1e-6); end

%%%%%%%%%% OPTIMALITY CRITERIA UPDATE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [xnew]=OC(nelx,nely,x,volfrac,dc) %oc算法子程序

l1 = 0; l2 = 100000; move = 0.2;%l1l2用于体积约束的拉格朗日乘子 while (l2-l1 > 1e-4) lmid = 0.5*(l2+l1);

xnew = max(0.001,max(x-move,min(1.,min(x+move,x.*sqrt(-dc./lmid)))));%核心部分参见林文

if sum(sum(xnew)) - volfrac*nelx*nely > 0; %采用了二乘法更新拉格朗日乘子 l1 = lmid; else

l2 = lmid; end end

%%%%%%%%%% MESH-INDEPENDENCY FILTER %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [dcn]=check(nelx,nely,rmin,x,dc) %敏度过滤技术子程序 dcn=zeros(nely,nelx); for i = 1:nelx for j = 1:nely sum=0.0;

for k = max(i-floor(rmin),1):min(i+floor(rmin),nelx) for l = max(j-floor(rmin),1):min(j+floor(rmin),nely) fac = rmin-sqrt((i-k)^2+(j-l)^2); sum = sum+max(0,fac);

dcn(j,i) = dcn(j,i) + max(0,fac)*x(l,k)*dc(l,k); end end

dcn(j,i) = dcn(j,i)/(x(j,i)*sum); end

end %光顺边界

%%%%%%%%%% FE-ANALYSIS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


function [U]=FE(nelx,nely,x,penal) %有限元求解子程序 [KE] = lk; %单元刚度矩阵

K = sparse(2*(nelx+1)*(nely+1), 2*(nelx+1)*(nely+1)); %总体刚度矩阵的稀疏矩阵 F = sparse(2*(nely+1)*(nelx+1),1); U = zeros(2*(nely+1)*(nelx+1),1); %力矩阵的稀疏矩阵

for elx = 1:nelx for ely = 1:nely

n1 = (nely+1)*(elx-1)+ely; n2 = (nely+1)* elx +ely;

edof = [2*n1-1; 2*n1; 2*n2-1; 2*n2; 2*n2+1; 2*n2+2; 2*n1+1; 2*n1+2];%y轴是反方向的,不影响结果

K(edof,edof) = K(edof,edof) + x(ely,elx)^penal*KE; %将单元刚度矩阵组装成总体的刚度矩阵 end end

% DEFINE LOADS AND SUPPORTS (HALF MBB-BEAM) F(2*(nelx/2+1)*(nely+1),1) = 1; %初始的集中力

fixeddofs = [2*(nely/2+1),2*nelx*(nely+1)+2*(nely/2+1)]; %固定节点 alldofs = [1:2*(nely+1)*(nelx+1)];%所有节点 freedofs = setdiff(alldofs,fixeddofs); %自由节点 % SOLVING

U(freedofs, : )= K(freedofs,freedofs) \ F(freedofs,:); %有限元求解 U(fixeddofs,: )= 0; % 固定节点位移为0

%%%%%%%%%% ELEMENT STIFFNESS MATRIX %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% function [KE]=lk %单元刚度矩阵的子程序 E = 1.; nu = 0.3;

k=[ 1/2-nu/6 1/8+nu/8 -1/4-nu/12 -1/8+3*nu/8 ... -1/4+nu/12 -1/8-nu/8 nu/6 1/8-3*nu/8];

KE = E/(1-nu^2)*[ k(1) k(2) k(3) k(4) k(5) k(6) k(7) k(8) k(2) k(1) k(8) k(7) k(6) k(5) k(4) k(3) k(3) k(8) k(1) k(6) k(7) k(4) k(5) k(2) k(4) k(7) k(6) k(1) k(8) k(3) k(2) k(5) k(5) k(6) k(7) k(8) k(1) k(2) k(3) k(4) k(6) k(5) k(4) k(3) k(2) k(1) k(8) k(7) k(7) k(4) k(5) k(2) k(3) k(8) k(1) k(6) k(8) k(3) k(2) k(5) k(4) k(7) k(6) k(1)]; %


本文来源:https://www.dywdw.cn/f769daf07c1cfad6195fa78d.html

相关推荐
推荐阅读