 宏观力学层合板强度分析MATLAB实现

n=input('please input the layer number of compusite materials:');

t=zeros(1,n);

theta=zeros(1,n);

e1=input('please input e1(Gpa): ')*10^9;

e2=input('please input e2(Gpa): ')*10^9;

g12=input('please input g12(Gpa): ')*10^9;

v21=input('please input v21: ');

F=zeros(5,1);

F(1,1)=input('please input Xt(unit/Mpa):')*10^6;

F(2,1)=input('please input Xc(unit/Mpa):')*10^6;

F(3,1)=input('please input Yt(unit/Mpa):')*10^6;

F(4,1)=input('please input Yc(unit/Mpa):')*10^6;

F(5,1)=input('please input S(unit/Mpa):')*10^6;

for i=1:n

disp(['please input elasetic constant from bottom to the top(The direction of the elastic spindle is' ...

' specified as 1 direction),while now you should input layer ' ,num2str(i)])

theta(1,i)=input('please input theta(°): ');

t(1,i)=input('please input the thickness(m):');

theta(1,i)=theta(1,i)/180*pi;

end

N=zeros(1,3);M=zeros(1,3);

for i=1:3

N(i)=input(['please input N',num2str(i),'(force at per width). While axis 1 is the fiber direction(unit/N):']);

end

for i=1:3

M(i)=input(['please input M',num2str(i),'(force at per width). While axis 1 is the fiber direction(unit/N*m):']);

end

FAM=[N';M'];

scale0=zeros(1,n);

[q,s]=calculateq(e1,e2,g12,v21);

[q0,s0,T]=calculateq0(n,q,s,theta);

ddd=0;

epsilonx=zeros(1,3*n);

format long

for i=1:3*n

[Q0,S0,A,B,D,z0]=calculateQtotal(q0,t,n);

[scale,deslayer,desnum,layer,sc,epsilon,kappa]=calculatescale(q0,z0,T,F,n,t,S0,FAM);

[q0,desd]=recalculateq0(t,q,q0,T,F,scale,epsilon,kappa,z0,desnum,deslayer,layer);

scale0(i)=scale;

DF=scale0(i)*FAM;

if desd(1)==0

break

else if i>1&&scale0(i)*2<scale0(i-1)

break

end

end

epsilonx(2*i-1)=scale0(i)*epsilon(1);

[Q0,S0,A,B,D,z0]=calculateQtotal(q0,t,n);

ttt=scale0(i)*S0*FAM;

epsilonx(2*i)=ttt(1);

ddd=ddd+1;

disp(['第',num2str(i),'次总破坏层数为',num2str(desnum)])

for j=1:desnum

disp(['第',num2str(deslayer(j)),'层'])

disp(['该层破坏的方向为',num2str(desd(j)),'方向'])

end

disp('破坏时的外力矩阵为')

disp(num2str(DF,'%e'))

end

scale1=scale0;

clear scale0;

for i=1:ddd

scale0(2*i-1)=scale1(i);

scale0(2*i)=scale1(i);

epsilonx0(2*i-1)=epsilonx(2*i-1);

epsilonx0(2*i)=epsilonx(2*i);

end

for i=2*ddd:-1:2

scale0(i)=scale0(i-1);

epsilonx0(i)=epsilonx0(i-1);

end

scale0(1)=0;

epsilonx0(1)=0;

plot(epsilonx0,scale0)

xlabel('\epsilon');

ylabel('Fx/N','Rotation',90);

function [q,s]=calculateq(e1,e2,g12,v21)

s=zeros(3,3);

q=zeros(3,3);

s(1,1)=1/e1;

s(2,2)=1/e2;

s(1,2)=-v21/e1;

s(2,1)=s(1,2);

s(3,3)=1/g12;

q(1,1)=s(2,2)/(s(1,1)*s(2,2)-s(1,2)^2);

q(2,2)=s(1,1)/(s(1,1)*s(2,2)-s(1,2)^2);

q(1,2)=-s(1,2)/(s(1,1)*s(2,2)-s(1,2)^2);

q(2,1)=q(1,2);

q(3,3)=1/s(3,3);

end

function [q0,s0,T]=calculateq0(n,q,s,theta)

% 计算各层刚度矩阵q0(3,3,n)和柔度矩阵s0(3,3,n)(转角后)

q0=zeros(3,3,n);

s0=zeros(3,3,n);

T=zeros(3,3,n);

for i=1:n

T(1,1,i)=cos(theta(1,i))^2;

T(1,2,i)=sin(theta(1,i))^2;

T(1,3,i)=2*sin(theta(1,i))*cos(theta(1,i));

T(2,1,i)=sin(theta(1,i))^2;

T(2,2,i)=cos(theta(1,i))^2;

T(2,3,i)=-2*sin(theta(1,i))*cos(theta(1,i));

T(3,1,i)=-sin(theta(1,i))*cos(theta(1,i));

T(3,2,i)=sin(theta(1,i))*cos(theta(1,i));

T(3,3,i)=cos(theta(1,i))^2-sin(theta(1,i))^2;

qt=(T(:,:,i)^-1)*q*((T(:,:,i)^-1)');

st=T(:,:,i)'*s*T(:,:,i);

for m=1:3

for n=1:3

q0(m,n,i)=qt(m,n);

s0(m,n,i)=st(m,n);

end

end

end

end

function [Q0,S0,A,B,D,z0]=calculateQtotal(q0,t,n)

A=zeros(3,3);

B=zeros(3,3);

D=zeros(3,3);

t0=0;

for i=1:n

t0=t0+t(i);

end

z0=t0/2;

tz=0;

for k=1:n

tz=tz+t(k);

for i=1:3

for j=1:3

A(i,j)=A(i,j)+q0(i,j,k)*t(k);

B(i,j)=B(i,j)+0.5*q0(i,j,k)*((tz-z0)^2-(tz-t(k)-z0)^2);

D(i,j)=D(i,j)+1/3*q0(i,j,k)*((tz-z0)^3-(tz-t(k)-z0)^3);

end

end

end

Q0=[A,B;B,D];

S0=Q0^(-1);

% S0=zeros(6,6);

% S0(1:3,1:3)=A^-1;

z0=t0/2;

end

function [scale,deslayer,desnum,layer,sc,epsilon,kappa]=calculatescale(q0,z0,T,F,n,t,S0,FAM)

%判断最易破坏层,初步分析可确定破坏平面为两层之间的连接面。输出最易破坏层的放大因子scale(与加载力相比,放大因子)及层数desnum、deslayer

syms scalebelow scaleup;

tz=0;

sigma=zeros(3,1,n);

sc=zeros(2*n,1);

EAK0=S0*FAM;

epsilon=zeros(3,1);

kappa=zeros(3,1);

for i=1:3

epsilon(i,1)=EAK0(i);

kappa(i,1)=EAK0(i+3);

end

for i=1:n

% if tz<=0

q0tr=q0(:,:,i);

sigmatrbelow=scalebelow*q0tr*(epsilon+(tz-z0)*kappa);%计算i层下表面sigma矩阵

tz=tz+t(i);

sigmatrup=scaleup*q0tr*(epsilon+(tz-z0)*kappa);%计算i层上表面sigma矩阵

sigmabelow0=T(:,:,i)*sigmatrbelow;

sigmaup0=T(:,:,i)*sigmatrup;

if q0tr==zeros(3,3)

continue

end

%Hill-蔡强度理论判断

fbelow=sigmabelow0(1)^2/(F(1)*F(2))-sigmabelow0(1)*sigmabelow0(2)/(F(1)*F(2))+sigmabelow0(2)^2/(F(3)*F(4))+(F(2)-F(1))/(F(1)*F(2))*sigmabelow0(1)+(F(4)-F(3))/(F(3)*F(4))*sigmabelow0(2)+sigmabelow0(3)^2/F(5)^2-1;

sc(2*i-1)=double(max(solve(fbelow==0,scalebelow)));%计算下表面的应力系数

fup=sigmaup0(1)^2/(F(1)*F(2))-sigmaup0(1)*sigmaup0(2)/(F(1)*F(2))+sigmaup0(2)^2/(F(3)*F(4))+(F(2)-F(1))/(F(1)*F(2))*sigmaup0(1)+(F(4)-F(3))/(F(3)*F(4))*sigmaup0(2)+sigmaup0(3)^2/F(5)^2-1;

sc(2*i)=double(max(solve(fup==0,scaleup)));%计算上表面的应力系数

end

scale=min(sc);

sc1=(sc-min(sc))/(min(sc)+1*10^-10);

desnum=0;

j=1;

for i=1:n

if sc1(2*i-1)<0.01||sc1(2*i)<0.01

desnum=desnum+1;

deslayer(j)=i;

j=j+1;

end

end

layer=zeros(1,desnum);

j=1;

for i=1:n

if sc1(2*i-1)<0.01

layer(j)=1;

j=j+1;

else if sc1(2*i)<0.01

layer(j)=0;

j=j+1;

end

end

end

end

function [q0,desd]=recalculateq0(t,q,q0,T,F,scale,epsilon,kappa,z0,desnum,deslayer,layer)

%破坏后从新计算破坏层的刚度矩阵

%疑问:会不会存在L方向和T方向差不多同时破坏的情况,这样对于判断哪个方向破坏可能会产生错误的解

%进度中断:破坏情况可以预想到的太多,如何把这些情况分好类

%计算破坏层的破坏方向

tz=0;

desd=zeros(1,desnum);

for i=1:desnum

for j=1:(deslayer(i)-layer(i))

tz=tz+t(j);

end

sigmatr=scale*q0(:,:,deslayer(i))*(epsilon+(tz-z0)*kappa);

sigmap=T(:,:,deslayer(i))*sigmatr;

% later=sigmap/scale

for j=1:2

percentage=abs((sigmap(1)-F(j))/F(j));

if percentage<0.2

desd(i)=1;

break;

end

end

for j=3:4

percentage=abs((sigmap(2)-F(j))/F(j));

if percentage<0.2

desd(i)=2;

break;

end

end

percentage=abs((sigmap(3)-F(5))/F(5));

if percentage<0.1

desd(i)=3;

end

if desd(i)==1

direction=2;

else if desd(i)==2

direction=1;

else

direction=3;

end

end

if direction==3

q1=q;

q1(direction,direction)=0;

q0(:,:,deslayer(i))=(T(:,:,deslayer(i))^-1)*q1*((T(:,:,deslayer(i))^-1)');

else if q0(1,2,deslayer(i))==0

q0(:,:,deslayer(i))=0;

else

q1=zeros(3,3);

q1(direction,direction)=q(direction,direction);

q0(:,:,deslayer(i))=(T(:,:,deslayer(i))^-1)*q1*((T(:,:,deslayer(i))^-1)');

end

end

end

end

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值