哈工大 材料力学 MATLAB 梁 上机 大作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本程序只支持静定结构的梁(左端悬臂梁、简支梁)
函数输入格式:beamsolver(L,EI,supports,loads,maxdx);
参量的输入格式:
L=10.0
EI=2e8
supports={{'f',0},{'v',10.0}} ----左端悬臂梁
supports={{'p',2.0},{'r',8.0}} ----简支梁
loads={{'f',[2.0,1000]},{'m',[4.0,500]},{'d',[7.0,9.0,3.0,20,100]}}
maxdx=0.01
输出为V,M,vy,x的一维行向量和三张坐标图----图1:剪力V图,图2:弯矩M图,图3:挠度vy图.
范例:
悬臂梁:纯受集中力:
beamsolver(10.0,2e8,{{'f',0},{'v',10.0}},{{'f',[2.0,1000]}},0.01)
纯受集中矩:
beamsolver(10.0,2e8,{{'f',0},{'v',10.0}},{{'m',[4.0,500]}},0.01)
纯受分布力(格式一):
beamsolver(10.0,2e8,{{'f',0},{'v',10.0}},{{'d',[7.0,9.0,3.0,20,100]}},0.01) 纯受分布力(格式二):
beamsolver(10.0,2e8,{{'f',0},{'v',10.0}},{{'d',[(7.0:0.01:9.0);(0:0.01:2.0).^2]} },0.01)
受混合力:
beamsolver(10.0,2e8,{{'f',0},{'v',10.0}},{{'f',[2.0,1000]},{'m',[4.0,500]},{'d', [7.0,9.0,3.0,20,100]}},0.01)
简支梁:纯受集中力:
beamsolver(10.0,2e8,{{'p',2.0},{'r',8.0}},{{'f',[5.0,1000]}},0.01)
纯受集中矩:
beamsolver(10.0,2e8,{{'p',2.0},{'r',8.0}},{{'m',[4.0,500]}},0.01)
纯受分布力(格式一):
beamsolver(10.0,2e8,{{'p',2.0},{'r',8.0}},{{'d',[7.0,9.0,3.0,20,100]}},0.01) 纯受分布力(格式二):
beamsolver(10.0,2e8,{{'p',2.0},{'r',8.0}},{{'d',[(7.0:0.01:9.0);(0:0.01:2.0).^2] }},0.01)
受混合力:
beamsolver(10.0,2e8,{{'p',2.0},{'r',8.0}},{{'f',[5.0,1000]},{'m',[4.0,500]},{'d' ,[7.0,9.0,3.0,20,100]}},0.01)
以上范例输出的剪力V图、弯矩M图都经过笔算检验完全正确。
悬臂梁的挠度经检验为正确的,简支梁的挠度有误(整个程序的唯一错误)。
function [x,V,M,vy]=beamsolver(L,EI,supports,loads,maxdx)
%材料力学上机课作业(满分)
%本DOC文件由M文件转换而成,可能有格式错误
%班级;1036***(专业班级1036***)
%支持两种梁的模型:
%1.左端悬臂梁
%2.一端pin一端roller的简支梁
%输入格式:beamsolver(L,EI,supports,loads,maxdx);
%例如:
L=10.0,EI=2e8,supports={{'f',0},{'v',10.0}},loads={{'f',[2.0,1000]},{'m',[4.0,50 0]},{'d',[7.0,9.0,3.0,20,100]}},maxdx=0.01
%输出为三张坐标图,图1:剪力V图,图2:弯矩M图,图3:挠度vy图.
%fixed-free
if (supports{1}{1}=='f' && supports{2}{1}=='v')
n=1;
M=linspace(0,0,L/maxdx);
V=linspace(0,0,L/maxdx);
while n<=length(loads)
%P------------------------fixed-free--------------------------------------
if loads{n}{1}=='f'
x=linspace(maxdx,L,L/maxdx); %将x分为小量
n1=loads{n}{2}(1)/maxdx; %确定x=L1处对应的下标
V1=linspace(loads{n}{2}(2),loads{n}{2}(2),n1); %第一段剪力赋值
V2=zeros(1,L/maxdx-n1); %第二段剪力赋值
M1=-loads{n}{2}(2)*(loads{n}{2}(1)-x(1:n1)); %第一段弯矩赋值
M2=zeros(1,L/maxdx-n1); %第二段弯矩赋值
M=M+[M1,M2]; %全梁的弯矩
V=V+[V1,V2]; %全梁的剪力
end
%M-----------------------fixed-free----------------------------------------- if loads{n}{1}=='m'
x=linspace(maxdx,L,L/maxdx); %将x分为小量
n1=loads{n}{2}(1)/maxdx; %确定x=L1处对应的下标
M1=linspace(loads{n}{2}(2),loads{n}{2}(2),n1); %第一段弯矩赋值
M2=zeros(1,L/maxdx-n1); %第二段弯矩赋值
M=M+[M1,M2]; %全梁的弯矩
end
%q-----------------------fixed-free---------------------------------------
if loads{n}{1}=='d'
x=linspace(maxdx,L,L/maxdx); %将x分为小量
n1=loads{n}{2}(1)/maxdx; %确定x=L1处对应的下标
n2=loads{n}{2}(2)/maxdx; %确定x=L2处对应的下标
k=length(loads{n}{2})-4;
A=size(loads{n}{2});