Matlab是由Math Works公司于1984年推出的一套数值计算软件,它将不同数学分支的算法以函数的形式分类成库,使用时直接调用这些函数并赋予实际参数就可以快捷而准确的解决问题。和很多高级编程语言一样。Matlab也有图形用户界面开发环境,称为GUI,即Graphical User Interface,是由窗口、菜单、图形、光标、按键、对话框和文本等各种图形对象组成的用户界面。GUI可以允许用户定制与Matlab的交互方式,通过鼠标或键盘选择、激活这些图形对象,直观的达到用户的求解、分析目的。
在弹性力学的学习中,数学推导求解较为繁琐,学生容易在学习中产生畏难情绪,影响学习效果。考虑到Matlab-GUI具有编程简单、界面友好等特点,开发弹性力学的推导、求解界面,将一部分数学推导工作交给计算机完成,学生可以集中精力加强对原理和数学逻辑的理解,这样可在一定程度上降低弹性力学的学习难度。本文正是基于这一目标开展的教学实践,以下先介绍Matlab-GUI设计环节,然后再通过一个例题展示其计算结果。
问题规划及Matlab-GUI的界面设计
本节将采用应力函数法求解一个受任意载荷的简支梁模型。对于均布载荷作用下的简支梁,多项式应力函数可得到完整的弹性解,然而,对于复杂载荷,甚至是不连续载荷问题,就需要用三角级数表示的应力函数来求解,该应力函数中待定参数较多,求解过程繁琐,大多数教材中只提出该方法,不对其例题演示。基于MATLAB-GUI编程设计三角级数应力函数的求解界面,可以使学生从繁琐的数学推导和求解中解脱出来,重点理解三角级数应力函数法求解思路与过程,这对于培养学生实践能力具有积极的示范作用。
在进行Matlab-GUI编程时,要根据“人-机”交互功能,规划好输入、输出参数和输出结果,首先对问题进行分析规划,确定问题中的各项参数,包括基本输入常量,求解过程中所产生的变量以及核心算法,绘制流程如图1所示
图1
其次,将各种控件在设计区域内进行布局设计,主要包括基本输入参数以及所需显示的输出结果。本软件考虑一简支梁在上、下表面受任意载荷情况,需要输入梁的基本参数、载荷参数、材料参数等,为此设置相应的控件,完成控件的布局,并设置求解过程中的功能按钮,在控件布局中注意保证界面的简洁性与美观性。可参考图2所示界面
图2
利用菜单可设计多窗口以完成不同的功能,菜单主要包括文件操作(文件打开、保存、清除和退出),求解(可跟踪求解过程),以及结果分析(包括结果的可视化、最大值分析、项数分析和生成报告),窗口和帮助(可查看基本理论和软件使用方法)五项,如图2和图3所示。
对界面控件进行布局设计之后,控件还不具备计算、分析功能。需要对每一个控件进行Matlab编程,要将Matlab程序代码放在相应的控件代码下,这样各控件就具备了计算、分析功能。
另外,形象地展示求解结果是Matlab程序设计的优点,利用图形输出可以将分析结果可视化,使弹性力学问题中复杂繁琐的数学公式能够转变为图形结果,有利于提高学生的学习兴趣。如图3所示,将在结果中以图形方式展示应力结果和误差分析结果。
图3
运行设计好的程序,用户可依照以下使用流程进行分析:
通过自主完成编写弹性力学求解系统,学生可以形成对弹性力学基本概念、求解思路的自我归类和主动学习,对于弹性力学涉及到的相关理论形成更加深刻的理解,提高学习效率。以下将通过一个例题来展示基于Matlab-GUI编程技术分析三角级数作为应力函数的弹性力学求解问题。
三角级数应力函数法求解举例
问题描述:给定简支梁的参数,跨度L=250mm,高度h=30mm,梁的弹性模量E=200GPa,泊松比=0.25,梁的上端受非均布载荷q1(x)=8(x/l)**3 N/mm,下端自由q2(x)=0。利用三角级数法求出该简支梁的应力、应变,并分析三角级数项数对求解精度的影响。
图4
依据上一节中的步骤输入参数,并进行求解。观察x=90mm截面上应力分布,如图5所示。该曲线表示在x=90 mm的截面上,应力分量随简支梁高度的变化。
图5
从图中看出随着级数项数的增加,当n>7时,σx与τxy值逐渐收敛为一定值,但对于σy,其收敛速度较σx与τxy慢。为了进一步研究所取项数对应力值的影响,定义相对误差为
其中,Xi表示级数项数为i时所得的计算结果认为当相对误差小于0.5%可满足要求精度。对于本例,研究发现对于同一截面上的点,相对误差变化趋势大致相同,本文选取(80,10),(125,10)(170,10)横坐标不同的三点绘制σx,τxy和σy,相对误差与级数项数的关系说明不同位置应力分量受级数项数的影响规律,如图6所示。由于τxy和σy,绝对值较小,采用双纵坐标可将应力分量进行对比观察,图中示例“左”右”分别表示该曲线对应于“左纵坐标”和“右纵坐标”。
图6
从上述误差分析可以看出,对于σx在n>7时可以满足求解精度,但对于τxy和σy,,由于其值非常小,在数值上仅为σx的5%左右,相对误差极不稳定,需要求解到n>36时,才满足er<0.5%。
以简支梁的跨度,高度分别作为x,y坐标,通过图形分析界面绘制出应力值的平面图形, colorbar显示出颜色与应力数值大小的对应值,该图形可以显示出简支梁截面内任意点应力的大小分布,直观观察出应力的最大值与最小值。
例如,对于图7中的σx,红色部分为拉应力,蓝色部分压应力图中可以明显的看出压应力与拉应力最大的部分约为横坐标x=170mm的截面上为了证明求解的正确性。
本文与 Ansys的计算结果做了比较,如图7所示。其中,除 Ansys模型约東处由于应力集中与本文方法差距较大之外,其他位置解相一致,如应力最大值利用 Matlab求解结果为89.968MPa, Ansys模型为89.616MPa,两者基本一致。
图7
总结
结合Matlab-GUI编程学习弹性力学,以图形方式展示求解结果,可以在一定程度上减小弹性力学问题求解的繁琐过程。同时,在自主完成编写弹性力学求解系统的过程中,可形成对弹性力学基本概念、求解思路,以及程序逻辑的主动学习,在一定程度上提高学习效率和实践能力。
亲手设计、编写一个可以“人-机”交互的界面程序,以作品的形成呈现出来。一个东西,从无到有,通过自己的双手把它创造出来这应该就是学习的快乐!
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删