同(程序所作剪力弯矩图中有断点存在,这是由于本程序绘制剪力弯矩图采用的是散点法,当剪力弯矩值有突变时程序计算的因数值不连续而产生“跳跃”现象),从剪力弯矩图上显然可以得到剪力最大值Fmax=7.5N,弯矩最大值Mz=7.5N·m,与程序相同。
5、右外伸梁计算例题
例5. 已知一右外伸梁长1.5米,右支点距右端面0.5米,在两支架中间作用一大小为P=5N,方向竖直向上的集中力,图形如下,试做出梁上的剪力和弯矩图,并求出剪力弯矩的最大、最小值及它们出现的位置。
计算结果:
图9 计算结果截图
求支反力得FA=2.5N FB=2.5N,作梁的剪力弯矩图与程序所作结果相同(程序所作剪力弯矩图中有断点存在,这是由于本程序绘制剪力弯矩图采用的是散点法,当剪力弯矩值有突变时程序计算的因数值不连续而产生“跳跃”现象),从剪力弯矩图上显然可以得到剪力最大值Fmax=2.5N,弯矩最大值Mz=1.25N·m,与程序计算结果相同。理论计算绘制图示上可以看出剪力和弯矩最大值应该在x=0.5m处取到,而程序计算的最大值分别在x=0.999m和x=0.501m取到,这是由于在程序编写过程中把梁在集中作用出分成了两段,集中力作用以左部分所有的x都小于0.5m,集中力作用以右部分所有x都大于0.5m,因而显示结果会出现与理论计算的微小差别。
6、双外伸梁计算例题
例6. 已知一双外伸梁长4米,固定铰支座距左端面1m,可动铰支座距右端面1m,在距离梁的左端0.5m处作用一大小为F=4N、方向竖直向下的集中力,两铰支座之间作用有向下的均布载荷,大小为2N/m,图形如下。试做出梁上的剪力和弯矩图,并求出剪力弯矩的最大、最小值及它们出现的位置。
计算结果:
求支反力得FA=1N FB=7N,作梁的剪力弯矩图与程序所作结果相同(程序所作剪力图中有断点存在,这是由于本程序绘制剪力弯矩图采用的是散点法,当剪力弯矩值有突变时程序计算的因数值不连续而产生“跳跃”现象),从剪力弯矩图上显然可以得到剪力最大值Fmax=4N,弯矩最大值Mz=-2N·m,与程序计算结果相同。理论计算绘制图示上可以看出剪力和弯矩最大值分别在x=0.5mx=1m处取得,与程序计算结果也相同,因而此段程序运行正确。
图10 计算结果截图
五、程序缺陷
由于本程序绘制剪力弯矩图采用的是散点法,因而在剪力或弯矩有突变时图示上会产生断点,未连接上。可以采用“line”指令,在数据有突变时直接直线连接。
六、体会与收获
在这次上机编程作业中,我虽然花费了很长时间,但是收获很多。在此过程中,我对MATLAB语言有了更加熟悉的运用,这将成为我一生的财富,MATLAB也必将成为我日后学习工作的强大工具。在看到自己做出的最终结果以及它运行时的高效、简洁,我不禁有了一丝成就感。我为能有一次这样锻炼的机会而感到幸
运,希望以后还会更多这样的机会充实自己。对于材料力学这门课程,我想也会因为这次程序的编写而记忆的更加深刻,我一定要争取多掌握一些这方面的知识,然后在工作中充分的应用进去!
当然,作为初学者,制作出的软件不免瑕疵很多,还烦请老师批评指正。但我相信,在今后的学习中,我对MATLAB的应用能力会愈加娴熟。
七、程序源代码
1.左悬臂梁的源程序
E=getappdata(BianXing_ZuoGuDingDuan,'E');
L=getappdata(BianXing_ZuoGuDingDuan,'L');
F=getappdata(BianXing_ZuoGuDingDuan,'F');
a=getappdata(BianXing_ZuoGuDingDuan,'a');
q=getappdata(BianXing_ZuoGuDingDuan,'q');
b1=getappdata(BianXing_ZuoGuDingDuan,'b1');
b2=getappdata(BianXing_ZuoGuDingDuan,'b2');
M=getappdata(BianXing_ZuoGuDingDuan,'M');
c=getappdata(BianXing_ZuoGuDingDuan,'c');
dyuan=str2double(get(handles.edit1,'String'));
Dyuanhuan=str2double(get(handles.edit2,'String'));
dyuanhuan=str2double(get(handles.edit3,'String'));
hjuxing=str2double(get(handles.edit4,'String'));
bjuxing=str2double(get(handles.edit5,'String'));
Izgongzixing=str2double(get(handles.edit6,'String'));
Iz1=pi*dyuan^4/64; Iz2=pi*(Dyuanhuan^4-dyuanhuan^4)/64;
Iz3=bjuxing*hjuxing^3/12; Iz4=Izgongzixing; Iz=Iz1+Iz2+Iz3+Iz4; x=[0:L/500:L]; leng=length(x);
xx1=round(a/L*leng); xx21=round(b1/L*leng); xx22=round(b2/L*leng); xx3=round(c/L*leng); for ii=1:leng if ii<=xx1
vx1(ii)=-F*((ii-1)*L/500)^2*(3*a-(ii-1)*L/500)/(6*E*Iz);
else
vx1(ii)=-F*a^2*(3*(ii-1)*L/500-a)/(6*E*Iz);
end end flag1=1; vx=vx1;
handles.vx=vx; handles=surfplot(handles); guidata(hObject, handles); for jj=1:leng
if abs(vx(jj))>=abs(vx(flag1)) flag1=jj; end
end yy=0*ones(1,leng); yyy2=abs(vx); yyyy2=max(yyy2); axes(handles.axes5); grid on
plot(x,yy,'LineWidth',2);
axis([0,L,-2*yyyy2,2*yyyy2]); hold on
plot(x,100000*vx,'LineWidth',2); hold on
xxx1=L/500*(flag1-1);
plot(xxx1,vx(flag1),'bo','MarkerSize',
10);
hold on
for kk=1:4:leng
plot([x(kk),x(kk)],[0,vx(kk)],'LineWidth',0.4)
end
xlabel('x/m');
ylabel('??á|Fs/N'); 2.右悬臂梁的源程序
E=10^9*str2double(get(handles.edit1,'String'));
L=str2double(get(handles.edit2,'String'));
F=str2double(get(handles.edit3,'String'));
a=str2double(get(handles.edit4,'String'));
q=str2double(get(handles.edit5,'String'));
b1=str2double(get(handles.edit6,'String'));
b2=str2double(get(handles.edit7,'String'));
M=str2double(get(handles.edit8,'String'));
c=str2double(get(handles.edit9,'String'));
x=[0:L/500:L]; FOy1=F;
MO1=FOy1*a; FOy2=q*(b2-b1);
MO2=q*(b2-b1)*(b2+b1)/2; FOy3=0; MO3=M;
leng=length(x);
xx1=round(a/L*leng); xx21=round(b1/L*leng); xx22=round(b2/L*leng); xx3=round(c/L*leng); for ii=1:leng if ii<=xx1
Fsx1(ii)=-FOy1; Mx1(ii)=FOy1*(ii-1)*L/500-MO1;
else
Fsx1(ii)=0; Mx1(ii)=0; end end
for ff=1:leng if ff<=xx21
Fsx2(ff)=-FOy2;
Mx2(ff)=FOy2*(ff-1)*L/500-MO2;
else
if ff<=xx22
Fsx2(ff)=-FOy2 + q*((ff-1)*L/500-b1);
Mx2(ff)=FOy2*(ff-1)*L/500-MO2-((ff-1)*L/500-b1)^2*q/2;
else
Fsx2(ff)=0; Mx2(ff)=0; end end end
for pp=1:leng if pp<=xx3;
Fsx3(pp)=0; Mx3(pp)=M; else
Fsx3(pp)=0; Mx3(pp)=0; end end flag1=1; flag2=1;
Fsx=Fsx3+Fsx2+Fsx1; Mx=Mx3+Mx2+Mx1; for jj=1:leng
if abs(Fsx(jj))>=abs(Fsx(flag1)) flag1=jj; end
if abs(Mx(jj))>=abs(Mx(flag2)) flag2=jj; end
end yy=0*ones(1,leng); yyy2=abs(Fsx); yyyy2=max(yyy2); yyy3=abs(Mx); yyyy3=max(yyy3); axes(handles.axes2); grid on
plot(x,yy,'LineWidth',2);
axis([0,L,-2*yyyy2,2*yyyy2]); hold on
plot(x,Fsx,'LineWidth',2); hold on
xxx1=L/500*(flag1-1);
plot(xxx1,Fsx(flag1),'bo','MarkerSize',10);
hold on
for kk=1:4:leng
plot([x(kk),x(kk)],[0,Fsx(kk)],'LineWidth',0.4)
end
xlabel('x/m');
ylabel('??á|Fs/N'); axes(handles.axes3); grid on
plot(x,yy,'LineWidth',2);
axis([0,L,-1.2*yyyy3,1.2*yyyy3]); hold on
plot(x,Mx,'LineWidth',2); hold on
xxx2=L/500*(flag2-1);
plot(xxx2,Mx(flag2),'bo','MarkerSize',10);
for ll=1:4:leng
plot([x(ll),x(ll)],[0,Mx(ll)],'LineWidth',0.4)
end
xlabel('x/m'); ylabel('í???M/N.m'); str1=num2str(yyyy2); str2=num2str(xxx1);
set(handles.edit10,'String',str1); set(handles.edit11,'String',str2); str3=num2str(yyyy3); str4=num2str(xxx2);
set(handles.edit12,'String',str3); set(handles.edit13,'String',str4); % --- Executes on button press in togglebutton2.
function
togglebutton2_Callback(hObject, eventdata, handles)
% hObject handle to togglebutton2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
close(gcf) a=gcf;
XuanZeLiangDeLeiXing
% Hint: get(hObject,'Value') returns toggle state of togglebutton2
% --- Executes on button press in togglebutton3.
function
togglebutton3_Callback(hObject, eventdata, handles)
% hObject handle to togglebutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
a=gcf;
BianXing_ZuoGuDingDuan
E=10^9*str2double(get(handles.edit1,'String'));
L=str2double(get(handles.edit2,'String'));
F=str2double(get(handles.edit3,'String'));
a=str2double(get(handles.edit4,'String'));
q=str2double(get(handles.edit5,'String'));
b1=str2double(get(handles.edit6,'St

