前言
机械振动在当今机械工程领域里越来越受到重视,机械振动的主被动控制也已成为各种机械装备的动力学设计中的重要问题之一。计算机科学的迅猛发展也为振动问题的计算分析、模拟仿真提供了强有力的工具。振动学是高等数学和力学等建立起来的王国。所以计算机的应用只是提供了一个强有力的工具。但是这个工具现在已变得愈来愈重要了。为了更好地应用计算机,学习和掌握有关的计算机程序的编制也已成为科技人员一种必要的技能。
振动学已有漫长的历史,线性振动理论在18世纪就趋于成熟,长时间的积累,许多科学家创立了不少振动学的经典理论和公式。对于机械振动系统的三要素的分析计算:激励(输入)、系统、响应(输出),从理论上讲,激励、系统和响应三者知其二就可求出第三者。但实际上还不能完全做到这样。而常见的振动问题可以分成下面几种基本型式:系统识别(已知激励和响应,求系统性质),如计算系统的固有频率规避和远离共振;环境预测(已知系统和响应,求激励),现在用仪器实测来解决的居多;振动设计(已知激励和系统,求响应),现在用动态模拟仿真来解决的居多。本书涉及的只是其中在机械工程上常用编程计算来进行分析计算的一角,工程上有时笼统地称它为机械振动设计分析计算。在这里面的公式都是按解析式数学公式来表达的,对于这部分,本书都是采用VB来编写。全书共有24章和3个附录。共40多个编程实例,2个仿真示例。其中用VB编写的共25例占了大部分。采用VB是为了易学易用,有利于编程的入门起步。由于应用了计算机,采用了诸如数组、迭代等计算机的一些通用算法,使这些用解析式数学公式求解的机械振动问题在计算时变得更快捷、更精准,并且能更方便、更贴切地绘制出相应的振动曲线,使振动的分析计算因采用编程计算而全面跃上一个新台阶。
以前笔者也曾用VB写过几本如机械可靠性编程实例、汽车零部件设计编程实例等图书。在书的最后都有一两个用MATLAB写的例子。如在可靠性灰色模型的最小二乘估算里用它作矩阵的初等运算;在汽车转向转阀的性能曲线绘制,是在一个大界面里由三个不同坐标的小图框里各呈现实测、计算、修正计算三幅曲线图。因为这些实例都只有用MATLAB才能完成,而且这些方法都在MATLAB的通用部分里,可以被用户较方便地用于编程。
而这次编写机械振动的编程计算在矩阵数值计算方面则必须要用MATLAB来编写。这是因为自从20世纪七八十年代开始由于计算机的发展给线性代数的应用创造了条件,矩阵数值计算很快就被各领域广泛应用起来。其中也包括振动学,开始出现应用矩阵数值计算譬如从特征根里的共轭复根中求得振动的固有频率、衰减系数等新颖的算法。而MATLAB本身就是以矩阵运算为基础的交互式程序语言。所以MATLAB现在已成为用于振动学矩阵数值计算的重要工具。所以在本书的最后部分里的二、三自由度系统的矩阵数值计算实例,都是用MATLAB编写的,这样大家可体会到矩阵数值计算对机械振动分析计算所起到的非同一般的作用。
本书包括五个绘制曲线的实例在内,共有16个实例是用MATLAB编写的,其中2个是用MATLAB/Simulink来实现的。另外有3个绘制曲线的实例是用Excel来完成的,Excel可以不用编程,将VB程序的计算数据,复制粘贴到它的工作表里就能实现,但只能完成简单的曲线。因为机械振动的内容很丰富,所以本书的程序实例应用了不同的计算机语言平台才得以完成,这样做仅仅是选取容易实现为目的。其平台分布详情见附表1。另外,在本书所附的光盘中刻录了本书所有程序实例的源代码,读者可方便参考应用。
我国在线性代数的教改上和高校应用MATLAB上,比国外晚了好多年,但现在进展非常迅猛。当前高校里对MATLAB的应用分了两个层面:第一层面,完全不改变原有教材内容,而仅把MATLAB作为“手算的替身”用于相关内容的算例习题解算。第二层面,对原有教材中“那些手算所不能处理”的内容加以改变,而成为由MATLAB实施的新章节;或把原教学大纲中“那些采用硬件设备进行的实验”改成MATLAB仿真。
还有,“MATLAB”本身是一个藏量极为丰富的资源库。因此,对大多数用户个体来说,一定有部分MATLAB内容看起来是“透明”的,即用户能明白其全部细节;另有些内容表现为“灰色”,即用户虽明白其机理但不懂具体的执行细节;还有些内容则“全黑”,即用户对它们完全无知。以上引用了参考文献[13]、[14]中的两段话。对我们学习编程的和用编程来解决机械振动问题以及解决其他专业问题的人来说很有启示和教益。因为用计算机来解决机械振动问题,现在也存有两个层面,本书的编程计算属于第一层面,即书中编程计算的内容必然是“透明”的。这样,读者阅读后,就能明白程序的全部细节,这对学习编程来说是必需的(关于“灰色”“全黑”请参阅本书第5章5.5节可执行文件的有关叙述)。在第二个层面里,用户须直接使用MATLAB的工具箱、模块集及MATLAB/Simulink来学习和应用及评估其结果。MATLAB/Simulink的建模、解算、结果表述与本书前面章节里的编程计算不同。本书原设定编写内容以第一层面为界。但为了对MATLAB仿真在机械振动里的应用有所了解,便编入2个示例于附录内。这样可从中了解到Simulink中有很多特定的动态模拟仿真功能,它能作很简单的模拟仿真,也能作很复杂的模拟仿真。
另外在一些国内外线性代数专著里,如参考文献[10]、[12]、[13],亦有用MATLAB矩阵数值计算来解振动问题的实例,这些都是我们很好的学习内容。把这些问题与实际结合,反复实践,最终一定会有收获的。要重视那些二自由度算例,因为有些程序是可改写的,把一个正确的二自由度矩阵数值计算程序扩展为三、四自由度矩阵数值计算程序还是有可能的;要重视对相应的数学、力学模型的认识,二、三自由度矩阵模型是可理解的,再往上的概念都是引申出来的,要多结合实践应用来提高对它们的认识;不要轻视那些解析式公式计算的那一部分,这部分也很有价值,值得我们用编程计算去提升它们。
对于此书的编写,由于本人才疏学浅,因此书中的疏漏和不足之处肯定不少,敬请读者批评指正。