材料力学上机大作业
院 系: 机电工程学院
班 级: 1208107
作 者: 吕肃
学 号: 1120810728
指导教师: 张桂莲
设计时间: 2014.6.12
一、问题的提出:
计算出6种梁的剪力,弯矩,挠度及角度,给出剪力图、弯矩图,挠曲线,角度曲线。
二、数学模型及算法
算法实现:剪力,弯矩运用叠加法,挠度,角度运用积分法计算。
三、程序说明
鉴于GUI界面复杂,回调函数众多,故只给出主回调函数,及对应的三个子函数。
需要输入分段矩阵x及载荷矩阵ZH。输入分段矩阵为行矩阵,每个矩阵中的值对应载荷及支点位置或固定端,按从小到大顺序输入,从0开始。载荷矩阵为多行矩阵,每行形式如:a b c d。a对应载荷类型,1为力偶,2为集中力,3位分布力。b对应载荷大小,单位为k。c对应载荷起点位置,d对于载荷终点位置。还可以选择不同截面类型,得到不同的E。
四、主回调程序
global x ZH E I %定义所有的全局变量
L1=get(handles.edit17,'string');
L1=str2num(L1); %将文本格式转换到数值
L2=get(handles.edit16,'string');
L2=str2num(L2); %将文本格式转换到数值
A=get(handles.edit18,'string');
A=str2num(A); %将文本格式转换到数值
B=get(handles.edit19,'string');
B=str2num(B); %将文本格式转换到数值
valu=get(handles.popupmenu2,'Value');
value=get(handles.popupmenu3,'Value');
switch value
case 1
I=pi*A^4/64;
case 2
I=pi*(A^4-B^4)/64;
case 3
I=A^3*B/12;
case 4
I=2450000;
case 5
I=23700000;
case 6
I=25000000;
end
E=get(handles.edit4,'string');
E=str2num(E); %将文本格式转换到数值
E=E*10^9;
I=I/10^12;
z=E*I;
x=get(handles.edit1,'string');
x=str2num(x); %将文本格式转换到数值
ZH=get(handles.edit2,'string');
ZH=str2num(ZH);
switch valu
case 1 %简支梁
[n,m]=size(x);
[a,b]=size(ZH);
L=x(m);
x1=[];
for i=1:m-1
x1=[x1,linspace(x(i),x(i+1),30*(x(i+1)-x(i)))];
end
LO=zeros(size(x1));
JL=zeros(size(x1));
[PN,t]=size(ZH);
[t,n]=size(x1);
for i=1:PN
switch ZH(i,1) %不同类型的作用对梁的贡献
case 1 %作用为弯矩
M=ZH(i,2)*10^3;
a=ZH(i,3);
d=-M/L;
JL=JL+d;
LO=LO+d*x1;
if a==0
LO=LO+M;
end
if a>0&a<L
LO=QLO(n,x1,a,M,LO);
end
case 2 %作用为剪力
P=ZH(i,2)*10^3;
b=ZH(i,3);
RA=(L-b)*P/L;
if b>0&b<L
JL(1:n)=JL+RA;
LO=LO+RA*x1;
[JL,LO]=QMP(n,x1,b,P,JL,LO);
end
case 3 %作用为均布载荷
q=ZH(i,2)*10^3;
c=ZH(i,3);
d=ZH(i,4);
RA=(L-0.5*(c+d))*q*(d-c)/L;
JL=JL+RA;
LO=LO+RA*x1;
[JL,LO]=QMQ(n,x1,c,d,q,JL,LO);
end
end
dx=1/10;
h=cumtrapz(LO)*dx/z;
y=cumtrapz(h)*dx;
D=-y(1);
C=(-D-y(n))/L;
h=cumtrapz(LO)*dx/z;
h=h+C;
y=cumtrapz(h)*dx;
y=y+D;
case 2 %左端固定悬臂梁
[n,m]=size(x);
L=x(m);
x1=[];
for i=1:m-1
x1=[x1,linspace(x(i),x(i+1),30*(x(i+1)-x(i)))];
end
LO=zeros(size(x1));
JL=zeros(size(x1));
[PN,t]=size(ZH);
[t,n]=size(x1);
for i=1:PN
switch ZH(i,1) %不同类型的作用对梁的贡献
case 1 %作用为弯矩
M=ZH(i,2)*10^3;
a=ZH(i,3);
if a>0&a<L
LO=LO-M;
LO=QLO(n,x1,a,M,LO);
end
if a==L
LO=LO-M;
end
case 2 %作用为剪力
P=ZH(i,2)*10^3;
b=ZH(i,3);
RA=P;
MA=-P*b;
JL=JL+RA;
LO=LO+RA*x1+MA;
if b>0&b<L
[JL,LO]=QMP(n,x1,b,P,JL,LO);
end
case 3 %作用为均布载荷
q=ZH(i,2)*10^3;
c=ZH(i,3);
d=ZH(i,4);
RA=Q*(d-c);
MA=-0.5*Q*(d-c)*(d+c);
JL=JL+RA;
LO=LO+RA*x1+MA;
[JL,LO]=QMQ(n,x1,c,d,q,JL,LO);
end
end
h=cumtrapz(LO)/z;
y=cumtrapz(h);
case 3 %右端固定悬臂梁
[n,m]=size(x);
L=x(m);
x1=[];
for i=1:m-1
x1=[x1,linspace(x(i),x(i+1),30*(x(i+1)-x(i)))];
end
LO=zeros(size(x1));
JL=zeros(size(x1));
[PN,t]=size(ZH);
[t,n]=size(x1);
for i=1:PN
switch ZH(i,1) %不同类型的作用对梁的贡献
case 1 %作用为弯矩
M=ZH(i,2)*10^3;
a=ZH(i,3);
if a==0
LO=LO+M;
end
if a>0&a<L
LO=QLO(n,x1,a,M,LO);
end
case 2 %作用为剪力
P=ZH(i,2)*10^3;
b=ZH(i,3);
if b==0
JL=JL-P;
LO=LO-P*x1;
end
if b>0&b<L
[JL,LO]=QMP(n,x1,b,P,JL,LO);
end
case 3 %作用为均布载荷
q=ZH(i,2)*10^3;
c=ZH(i,3);
d=ZH(i,4);
[JL,LO]=QMQ(n,x1,c,d,q,JL,LO);
end
end
dx=1/10;
h=cumtrapz(LO)*dx/z;
y=cumtrapz(h)*dx;
C=-h(n);
D=-y(n)-C*L;
h=cumtrapz(LO)*dx/z;
h=h+C;
y=cumtrapz(h)*dx;
y=y+D;
case 4 %左端外伸梁
[n,m]=size(x);
L=x(m);
x1=[];
for i=1:m-1
x1=[x1,linspace(x(i),x(i+1),30*(x(i+1)-x(i)))];
end
LO=zeros(size(x1));
JL=zeros(size(x1));
[PN,t]=size(ZH);
[t,n]=size(x1);
for i=1:PN
switch ZH(i,1) %不同类型的作用对梁的贡献
case 1 %作用为弯矩
M=ZH(i,2)*10^3;
a=ZH(i,3);
RA=-M/(L-L1);
[JL,LO]=QMP(n,x1,L1,-RA,JL,LO);
if a>0&a<L
LO=QLO(n,x1,a,M,LO);
end
if a==0
LO=LO+M;
end
case 2 %作用为剪力
P=ZH(i,2)*10^3;
b=ZH(i,3);
RA=P*(L-b)/(L-L1);
[JL,LO]=QMP(n,x1,L1,-RA,JL,LO);
if b>0&b<L
[JL,LO]=QMP(n,x1,b,P,JL,LO);
end
if b==0
JL=JL-P;
LO=LO-P*x1;
end
case 3 %作用为均布载荷
q=ZH(i,2)*10^3;
c=ZH(i,3);
d=ZH(i,4);
b=(c+d)*0.5;
P=(d-c)*q;
RA=P*(L-b)/(L-L1);
[JL,LO]=QMP(n,x1,L1,-RA,JL,LO);
[JL,LO]=QMQ(n,x1,c,d,q,JL,LO);
end
end
for i=1:n
if x1(i)==L1
t=i;
end
end
dx=1/10;
h=cumtrapz(LO)*dx/z;
y=cumtrapz(h)*dx;
C=(y(n)-y(t))/(t*dx-L);
D=-y(n)-L*C;
h=cumtrapz(LO)*dx/z;
h=h+C;
y=cumtrapz(h)*dx;
y=y+D;
case 5 %右端外伸梁
[n,m]=size(x);
L=x(m);
x1=[];
for i=1:m-1
x1=[x1,linspace(x(i),x(i+1),30*(x(i+1)-x(i)))];
end
LO=zeros(size(x1));
JL=zeros(size(x1));
[PN,t]=size(ZH);
[t,n]=size(x1);
for i=1:PN
switch ZH(i,1) %不同类型的作用对梁的贡献
case 1 %作用为弯矩
M=ZH(i,2)*10^3;
a=ZH(i,3);
RA=-M/L1;
RB=-RA;
JL=JL+RA;
LO=LO+x1*RA;
[JL,LO]=QMP(n,x1,L1,-RB,JL,LO);
if a>0&a<L
LO=QLO(n,x1,a,M,LO);
end
if a==0
LO=LO+M;
end
case 2 %作用为剪力
P=ZH(i,2)*10^3;
b=ZH(i,3);
RA=P*(L1-b)/L1;
RB=P*b/L1;
JL=JL+RA;
LO=LO+RA*x1;
[JL,LO]=QMP(n,x1,L1,-RB,JL,LO);
if b>0&b<L
[JL,LO]=QMP(n,x1,b,P,JL,LO);
end
if b==0
JL=JL-P;
LO=LO-P*x1;
end
case 3 %作用为均布载荷
q=ZH(i,2)*10^3;
c=ZH(i,3);
d=ZH(i,4);
b=(c+d)*0.5;
P=(d-c)*q;
RA=P*(L1-b)/L1;
RB=P*b/L1;
JL=JL+RA;
LO=LO+RA*x1;
[JL,LO]=QMP(n,x1,L1,-RB,JL,LO);
[JL,LO]=QMQ(n,x1,c,d,q,JL,LO);
end
end
for i=1:n
if x1(i)==L1
t=i;
end
end
dx=1/10;
h=cumtrapz(LO)*dx/z;
y=cumtrapz(h)*dx;
D=-y(1);
C=(-D-y(t))/(t*dx);
h=cumtrapz(LO)*dx/z;
h=h+C;
y=cumtrapz(h)*dx;
y=y+D;
case 6 %两端外伸梁
[n,m]=size(x);
L=x(m);
x1=[];
for i=1:m-1
x1=[x1,linspace(x(i),x(i+1),30*(x(i+1)-x(i)))];
end
LO=zeros(size(x1));
JL=zeros(size(x1));
[PN,t]=size(ZH);
[t,n]=size(x1);
for i=1:PN
switch ZH(i,1) %不同类型的作用对梁的贡献
case 1 %作用为弯矩
M=ZH(i,2)*10^3;
a=ZH(i,3);
RA=-M/(L2-L1);
RB=-RA;
[JL,LO]=QMP(n,x1,L1,-RA,JL,LO);
[JL,LO]=QMP(n,x1,L2,-RB,JL,LO);
if a>0&a<L
LO=QLO(n,x1,a,M,LO);
end
if a==0
LO=LO+M;
end
case 2 %作用为剪力
P=ZH(i,2)*10^3;
b=ZH(i,3);
LL=L2-L1;
bb=b-L1;
RA=P*(LL-bb)/LL;
RB=P*b/LL;
[JL,LO]=QMP(n,x1,L1,-RA,JL,LO);
[JL,LO]=QMP(n,x1,L2,-RB,JL,LO);
if b>0&b<L
[JL,LO]=QMP(n,x1,b,P,JL,LO);
end
if b==0
JL=JL-P;
LO=LO-P*x1;
end
case 3 %作用为均布载荷
q=ZH(i,2)*10^3;
c=ZH(i,3);
d=ZH(i,4);
b=(c+d)*0.5;
P=(d-c)*q;
LL=L2-L1;
bb=b-L1;
RA=P*(LL-bb)/LL;
RB=P*bb/LL;
[JL,LO]=QMP(n,x1,L1,-RA,JL,LO);
[JL,LO]=QMP(n,x1,L2,-RB,JL,LO);
[JL,LO]=QMQ(n,x1,c,d,q,JL,LO);
end
end
for i=1:n
if x1(i)==L1
t=i;
end
end
for i=1:n
if x1(i)==L2
r=i;
end
end
dx=1/10;
h=cumtrapz(LO)*dx/z;
y=cumtrapz(h)*dx;
C=(y(r)-y(t))/(t*dx-r*dx);
D=-y(t)-C*t*dx;
h=cumtrapz(LO)*dx/z;
h=h+C;
y=cumtrapz(h)*dx;
y=y+D;
end
[Qmax,i]=max(JL); %寻找最大剪力
[Qmin,j]=min(JL); %寻找最小剪力
if abs(max(JL))>=abs(min(JL))
set(handles.text7,'string',Qmax);
set(handles.text8,'string',x1(i));
else
set(handles.text7,'string',Qmin);
set(handles.text8,'string',x1(j));
end
[LOax,i]=max(LO); %寻找最大弯矩
[LOin,j]=min(LO); %寻找最小弯矩
if abs(max(LO))>=abs(min(LO))
set(handles.text9,'string',LOax);
set(handles.text10,'string',x1(i));
else
set(handles.text9,'string',LOin);
set(handles.text10,'string',x1(j));
end
[hmax,i]=max(h); %寻找最大弯矩
[hmin,j]=min(h); %寻找最小弯矩
if abs(max(h))>=abs(min(h))
set(handles.text24,'string',hmax);
set(handles.text25,'string',x1(i));
else
set(handles.text24,'string',hmin);
set(handles.text25,'string',x1(j));
end
[ymax,i]=max(y); %寻找最大弯矩
[ymin,j]=min(y); %寻找最小弯矩
if abs(max(y))>=abs(min(y))
set(handles.text26,'string',ymax);
set(handles.text27,'string',x1(i));
else
set(handles.text26,'string',ymin);
set(handles.text27,'string',x1(j));
end
axes(handles.axes1); %绘制剪力图并显示在axe.1中
stem(x1,JL);
grid;
title('剪力图')
axes(handles.axes2); %绘制弯矩图并显示在axe.2中
stem(x1,LO);
grid;
title('弯矩图');
axes(handles.axes3);
stem(x1,h);
grid;
title('转角图');
axes(handles.axes4);
stem(x1,y,'b');
grid;
title('挠度图');
3个子函数
%集中力偶对弯矩贡献的子程序:
function LO=QLO(n,x1,a,M,LO)
for j=1:n
if x1(j)==a
n1=j;
end
end
LO(n1:n)=LO(n1:n)+M;
%集中力对剪力和弯矩贡献的子程序:
function [JL,LO]=QMP(n,x1,b,P,JL,LO)
for j=1:n
if x1(j)==b;
n1=j;
end
end
JL(n1:n)=JL(n1:n)-P;
LO(n1:n)=LO(n1:n)-P*(x1(n1:n)-b);
%分布力对剪力和弯矩贡献的子程序:
function [JL,LO]=QMQ(n,x1,c,d,q,JL,LO)
for j=1:n
if x1(j)>c
JL(j)=JL(j)-q*(x1(j)-c);
LO(j)=LO(j)-0.5*q*(x1(j)-c)^2;
end
if x1(j)>d
JL(j)=JL(j)+q*(x1(j)-d);
LO(j)=LO(j)+0.5*q*(x1(j)-d)^2;
end
end
五、应用举例:
O简支梁,长1.6m,在0.7m及1.3m处分别有力偶30KN m及集中力46KN,截面为圆形,直径200mm,弹性模量210Gp
运行得出结果如下:
可得出最大剪力-46000N在0m处,最大弯矩-89800N m在0m处。最大角度-0.0035在1.3m处,最大挠度-0.0041在1.6m处,曲线如图
O左悬臂梁,长2m,在2m及1m处分别有力偶3KN m及分布力2KN/m共0.5m,截面为圆环,大圆直径100mm小圆直径40,弹性模量200Gp
可得出最大剪力1000N在0m处,最大弯矩-4250N m在0处。最大角度-0.0115在2m处,最大挠度-0.0121在2m处。曲线如图
O两端外伸梁长5m支点位置分别在1m及4m处,在0处有集中力2.1KN在1.2m处有力偶3KN m在3m 处有分布力1.6kN/m共0.5m,在5m处有集中力2kN。截面为矩形,长80mm,宽60mm弹性模量200Gp
可得出最大剪力3366.67N在4m处,最大弯矩-2355.33N m在3m处。最大角度0.0083在0m处,最大挠度-0.0078在0m处。曲线如图
六、实验结论
基本实现了预期目标,熟悉掌握了MatlabGUI基本操作,即材料力学相关知识,较圆满完成了任务。期间失败了很多次,特别是计算挠度与角度的部分,但通过不断尝试,与查找
相关资料,各个击破了,花费了很多的时间和精力,总算没有白费。这次材料力学上机真的获益匪浅,要想真的做成点什么没有百折不挠的精神和浓厚的兴趣是不可能的,但是坚持一定会有回报,付出了一定有收获,你所做的一切,一定不会被辜负的。