结构力学编程说明书.docx
- 文档编号:8715766
- 上传时间:2023-05-14
- 格式:DOCX
- 页数:13
- 大小:274.25KB
结构力学编程说明书.docx
《结构力学编程说明书.docx》由会员分享,可在线阅读,更多相关《结构力学编程说明书.docx(13页珍藏版)》请在冰点文库上搜索。
结构力学编程说明书
结构力学编程说明
池昌江
水工92
2009010269
2011/12/9
一、程序思路概述
本次程序的目的是为了解连续梁受荷载问题。
主要过程可分为如下几点:
1、读取数据。
从给出的原始数据以及数据表提供的结点号和受载情况,需要利用程序分析出每一个单元杆的受力情况。
2、合成整体矩阵。
这包括两部分,一部分是将单元刚度矩阵合成整体刚度矩阵,令一部分是将单元等效结点荷载合成为整体等效结点荷载向量。
这是这次变成中最重要的一部分。
3、解线性方程,求出位移值以及杆端弯矩。
由于我用的是vb语言,因此这部分在matlab当中看起来最轻松的部分却是vb最难编的一部分。
4、画图。
在vb当中,画图像利用的是最简单的微元法。
即将杆件分成微小的段落,计算每段节点上的弯矩,然后绘制出整个图形。
二、程序运行方式
1、软件运行平台。
本次使用的编译器是visualbasic6.0。
当然如果是更高版本的visualbasic软件也可以运行。
2、软件运行方式
(1)打开文件夹中的工程1.exe程序开始运行程序,进入程序之后会显示
点击开始计算进入计算过程。
(2)数据输入。
进入计算系统之后,系统会显示如下窗口:
这个是程序的主要界面,剩下来的步骤将主要在这个界面上完成。
此时,点击“请输入初始条件”,输入原始数据以及数据表中的数据。
此时,将原始数据表中的数据录入。
注意:
“EI”输入的是右侧“EI的值”的倍数,例如2或者1.5.“EI的值”输入的是题中给的已知EI值。
之后点击确定进入下一个数据输入界面,“返回”可回到上一个界面。
使用tab键输入会方便一些。
此时输入结点号和端部支承号,点击“确定”进入下一个界面,“返回”回到上一个界面。
此时按照数据表中相应的数据录入表格当中即可,之后点击“确定”即可以返回到主界面。
此时点击计算弯矩,就可以得出如下数据。
其中P(i)表示等效结点荷载向量中的值,i表示相应的结点;X(i)表示位移,i表示相应的结点;M(i,j)表示两端弯矩,j=1为左端,j=2为右端,i表示对应的单元号。
之后点击“确定”即可以返回主界面。
此时点击主界面当中的“画图”就可以出现此时的弯矩图。
最后在主界面点击“关闭”即可停止程序。
三、主要程序代码
1、读取数据
DimG(0To5)AsKua'定义杆1到5并将其设成Kua类型
Fori=1To5'读取表格中的数据
IfForm4.Controls("Text"&i+5).Text=1Then'读取长度值
G(i).long=Val(Form2.Text1)
ElseIfForm4.Controls("Text"&i+5).Text=2Then
G(i).long=Val(Form2.Text2)
ElseIfForm4.Controls("Text"&i+5).Text=3Then
G(i).long=Val(Form2.Text3)
EndIf
IfForm4.Controls("Text"&i+10).Text=1Then'读取刚度值
G(i).EI=Val(Form2.Text4)*Val(Form2.Text13.Text)
ElseIfForm4.Controls("Text"&i+10).Text=2Then
G(i).EI=Val(Form2.Text5)*Val(Form2.Text13.Text)
ElseIfForm4.Controls("Text"&i+10).Text=3Then
G(i).EI=Val(Form2.Text6)*Val(Form2.Text13.Text)
EndIf
IfForm4.Controls("Text"&i+15).Text=0Then'读取集中荷载值
G(i).P=0
ElseIfForm4.Controls("Text"&i+15).Text=1Then
G(i).P=Val(Form2.Text7)
ElseIfForm4.Controls("Text"&i+15).Text=2Then
G(i).P=Val(Form2.Text8)
ElseIfForm4.Controls("Text"&i+15).Text=3Then
G(i).P=Val(Form2.Text9)
EndIf
IfForm4.Controls("Text"&i+20).Text=0Then'读取均布荷载值
G(i).q=0
ElseIfForm4.Controls("Text"&i+20).Text=1Then
G(i).q=Val(Form2.Text10)
ElseIfForm4.Controls("Text"&i+20).Text=2Then
G(i).q=Val(Form2.Text11)
ElseIfForm4.Controls("Text"&i+20).Text=3Then
G(i).q=Val(Form2.Text12)
EndIf
G(i).M1=G(i).P*G(i).long/8+G(i).q*G(i).long*G(i).long/12'求等效结点荷载
G(i).M2=-G(i).M1
Nexti
2、合成整体矩阵和等效结点荷载向量
DimK(5,5)AsSingle,kk(2,2),a(1To6)AsSingle'先把i=EI/L提取出来,这样只需要利用一个二阶矩阵
kk(1,1)=4
kk(1,2)=2
kk(2,1)=2
kk(2,2)=4
Fori=1To6'读取结点编号
a(i)=Val(Form3.Controls("Text"&i))
Nexti
Fori=1To5'合成整体刚度矩阵
Forj=1To5
Ifi=jAndi>1Then
K(a(i),a(j))=kk(1,1)*G(i).EI/G(i).long+kk(2,2)*G(i-1).EI/G(i-1).long
ElseIfi=jAndi=1Then
K(a(i),a(j))=kk(1,1)*G(i).EI/G(i).long
ElseIfj=i+1Then
K(a(i),a(j))=kk(1,2)*G(i).EI/G(i).long
K(a(j),a(i))=kk(2,1)*G(i).EI/G(i).long
ElseIfj<>i-1Then
K(a(i),a(j))=0
EndIf
Nextj
Nexti
DimP(1To5)AsSingle'合成整体外部等效结点荷载向量
Fori=1To5
Ifi=1Then
P(a(i))=G(i).M1
Else
P(a(i))=G(i).M1+G(i-1).M2
EndIf
Nexti
3、解线性方程代码
PrivateSub解方程(XiSu()AsDouble,jie()AsDouble)
DimBeiSuAsDouble
OnErrorGoToerr1
m=UBound(XiSu,1)'读取增广矩阵的行数
n=UBound(XiSu,2)'读取增广矩阵的列数
Ifn<>m+1Then
MsgBox"系数矩阵维数不正确!
",,"注意"
ExitSub
EndIf
Fori=0Tom
IfXiSu(i,i)=0Then
MsgBox"系数矩阵的对角线系数不能有0,请校对后重新输入!
",,"注意"
ExitSub
EndIf
Next
Fori=1To5'行
ForK=iTom'行
BeiSu=XiSu(K,i-1)/XiSu(i-1,i-1)
Forj=i-1Ton'列数据处理
XiSu(K,j)=XiSu(K,j)-BeiSu*XiSu(i-1,j)
Next
Next
Next
Fori=m-1To0Step-1
ForK=iTo0Step-1
BeiSu=XiSu(K,i+1)/XiSu(i+1,i+1)
Forj=iTon
XiSu(K,j)=XiSu(K,j)-BeiSu*XiSu(i+1,j)
Next
Next
Next
Fori=0Tom
jie(i)=XiSu(i,n)/XiSu(i,i)
Next
ExitSub
4、画图代码
Form7.Scale(-10,200)-(50,-50)'绘图代码
l=0
Fori=1To5'累积杆的长度值
l=l+G(i).long
Nexti
Form7.Line(0,0)-(l,0)'画出整条杆
DimF(1To5)AsSingle,x()AsSingle,bAsSingle'定义杆端剪力,用以计算各点弯矩
b=0
Fori=1To5
F(i)=(m(i-1,0)+m(i-1,1)-G(i).q*G(i).long*G(i).long/2-G(i).P*G(i).long/2)/G(i).long'计算杆端剪力
Nexti
G(0).M2=0
Fori=1To5
ReDimx(G(i).long/0.1)'每一点的弯矩值
x(0)=m(i-1,0)
Forj=1ToG(i).long/0.1
Ifj<=G(i).long/0.2Then
x(j)=m(i-1,0)-F(i)*j*0.1-G(i).q*j*0.1*j*0.1/2
Form7.Line(b+(j-1)*0.1,-x(j-1))-(b+j*0.1,-x(j))
ElseIfj>G(i).long/0.2Then
x(j)=m(i-1,0)-F(i)*j*0.1-G(i).q*j*0.1*j*0.1/2-G(i).P*(j*0.1-G(i).long/2)
Form7.Line(b+(j-1)*0.1,-x(j-1))-(b+j*0.1,-x(j))
EndIf
Nextj
b=b+G(i).long'以每一个单元杆的起始点当做局部坐标起点
Nexti
四、编程体会
这次是我第一次进行小型程序的编写,之前虽然学过不少语言,但是多半没有认真具体的学进去,而且他们也不要求做大作业。
因此,这次的编程给我的影响很大。
不仅仅是巩固和加强了自己的vb编程能力,更多的还是让我渐渐对编程的恐惧减小了,就像老师说的那样,学编程而不动手的话就等于是白学。
这次的编程过程里就让我深深体会到了这一点。
另外我还想说的一点就是关于编程语言的选取。
之前刚看到这个题目的时候,我举得使用vb的画会有很好的用户体验,而且自己之前学过一些vb代码,因此便选了vb。
可是当自己开始进行编程的时候,才发现自己选的语言有一定的问题存在:
一是vb的良好界面和编程的适用范围是冲突的。
Vb如果要进行原始数据和数据表数据的录入的话,可以使用text控件,这样可以非常直观的进行录入。
但是text控件是死的,一旦设定好之后,就没有办法随机自动再生成(至少我不知道该怎么做)。
这样就使得在解决更多这种连续梁受载问题时受到非常大的限制。
而如果vb想要使用更大的范围,那么势必要利用到inputbox,个人感觉这种方式是一种非常烂的方式,因为每输入一个数据就得弹出一个inputbox窗口,输入几十个数据我估计大家都烦了。
这也使得我后面的编程颇为郁闷,因为最开始我的设想是想解决所有的连续梁问题,包括不同的单元数量以及端部支承的情况。
可是到后面才发现这样实在有点困难,最后只能选择放弃。
二是vb在解线性方程的时候很困难。
毕竟vb不同于matlab那种专门的数学软件。
在matlab当中解线性方程只要将矩阵输入就ok,可是vb却需要非常绕的思维逻辑以及矩阵运算。
这部分是我这次编程过程当中最辛苦的一部分。
当然这也让我了解到以后不能太过高估自己,要在自己能力范围之内更好的解决问题。
也许下次计算流体的编程我就会选择使用matlab,这样就会方便许多。
不过在这个时候有另外一个问题,就是师兄师姐有现成的作业。
个人不喜欢抄袭作业,因此这次使用vb编程倒可以摆脱这种嫌疑。
不过我们班级也有一些matlab大牛,对matlab的掌握已经到达了一定的程度了。
我绝对这部分人的水平已经超过之前师兄师姐的作业,相信老师在批改的过程当中也可以很明显的发现。
最后,我要感谢老师以及助教这一年里的照顾。
虽然结构力学很难学,但是我还是觉得很有趣。
希望将来还有机会可以和老师以及助教进行交流。
谢谢!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 力学 编程 说明书