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
for i = (nelx-19):nelx for j = (nely-14):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
%%%%%%%%%% 有限元分析 %%%%%%%%%%%%% 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-20) 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]; K(edof,edof) = K(edof,edof) + x(ely,elx)^penal*KE; end end
for elx = (nelx-19):nelx for ely = 1:15
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]; K(edof,edof) = K(edof,edof) + x(ely,elx)^penal*KE; end end
for elx = (nelx-19):nelx for ely = 36:50
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]; K(edof,edof) = K(edof,edof) + x(ely,elx)^penal*KE; end end
% 定义载荷和边界条件 i=0;
for elx = (nelx-19):nelx ely=15;
n2 = (nely+1)* elx +ely; F(2*n2,1) = i;
i=i+1; end i=0;
for elx = (nelx-19):nelx ely=36;
n1 = (nely+1)*(elx-1)+ely; F(2*n1,1) = -i; i=i+1; end
fixeddofs = [1,2,2*(nely+1)-1,2*(nely+1)]; alldofs = [1:2*(nely+1)*(nelx+1)]; freedofs = setdiff(alldofs,fixeddofs);
U(freedofs,:) = K(freedofs,freedofs) \\ F(freedofs,:); % 求解G U(fixeddofs,:)= 0;
%%%%%%%%%% 单元刚度矩阵 %%%%%%%%%%%%%%%%%%%%%%% function [KE]=lk E = 200000; 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)];