第 25 卷 第 3 期 佳 木 斯 大 学 学 报 ( 自 然 科 学 版 )
2007 年 05 月 Journal of Jiamusi University (Natural Science Edition)
Vol. 25 No. 3
May 2007
文章编号 :1008 - 1402 (2007) 03 - 0356 - 03
Matlab 语言在机械振动中的应用
董宇欣
(哈尔滨工程大学计算机科学与技术学院 ,黑龙江 哈尔滨 150001)
①摘 要 : 例举了振动课程中的一个典型的实例 ,用 Matlab 语言编制了计算机程序 ,并进行了仿真.
文中给出了程序执行过程及动画演示.
关键词 : Matlab 语言 ;仿真 ;动画 ;模拟
中图分类号 : O321 文献标识码 : A
在进行机械振动和分析力学课程的讲授过程
中 ,本文作者采取计算机计算语言 MATLAB ,大胆
地制作了一些课件 ,达到了用计算机仿真机械振动
和分析力学经典实例的目的. 在实际应用和讲授
中 ,取得了一定效果 ,下面以机械振动单自由度系
统为例介绍一下设计思路.
1 机械振动的计算机仿真实例
研究振动问题的思路 ,一般是建立数学模型 ,
列出微分方程 ,进而求解得出位移 、速度 、加速度随
时间变化的表达式. 作为机械振动课程的一项内
容 ,教学上以前主要把精力放在讲授方程的求解方
法上 ,对启发与引导学生独立思考 ,实验探索影响
振动的各因素之间的关系这一方面重视不够 ,而从
学生接受知识的角度出发 ,本文认为如果能够给学
生以实践的机会 ,学生的学习效果会更好 ,知识的
掌握程度会更高. 正是认识到这一点 ,本文作者才
开始探索如何利用计算机这一现代化工具为学生
提供一个互动平台 ,以促进学生对所学知识的理
解. 考虑到对微分方程求解 ,Matlab 编程语言是一种
十分有效的工具 ,而且 Matlab 还有强大的图形界面和
交互处理功能 ,因此选择这种语言作为工作语言.
从单自由度系统振动微分方程入手 ,其方程为
m¨x + c
x + k ( x + βx3 ) = F0 sinωt
其中各参数意义如下 : m 为振动体质量 , c 为阻尼
系数 , k 为振子刚度 ,β为振子非线性系数 , F0 为激
振力 ,ω为激振力频率.
设计的程序执行界面如图 1 所示.
从此图可以看到软件具有极强的可视性和人
机交互性. 界面各区功能如下 :
1. 参数设定区 ,位于界面有上方. 用户可设定
振子运动的全部参数. 包括 :弹簧原长 、初位移 、初
速度 、质量 、刚度 、非线性系数、阻尼 、激振力 、激振
频率 、运动演示最大时间.
2. 运动演示和函数图像区. 图形窗口 1 根据用
户设定的参数 ,实时演示振子运动情况. 图形窗口
2 绘制时间 —位移函数图像. 图形窗口 3 绘制位移
—速度函数图像 ,即振子的相轨线.
3. 运动状态描述区、数据求解区和按钮操作
区. 这三区分布在界面的中部.
下面简要介绍程序设计.
% % % 振动试验数值仿真软件主程序
spring main. m % % % % % % % % % %
% % % 另四个子程序分别为 subfun. m —解方
程子程序 ;helpdown - 帮助按钮按下时执行程序 ;
% % % % solvedown. m - 求解按钮按下时执行
程序 ;startdown - 开始按钮按下时执行程序.
% % % % 以上程序应放在同一目录下.
clear ;g = 9. 8 ;L0 = 40 ; % % 弹簧原长 L0
% % % % % % % % % % % 做图形 1 静态画面
% % % % % % % % %
figure (1)
set ( gcf ,’unit’,’normalized’,’position’, [ 0. 00
0. 42 0. 99 0. 52 ] ,. . .
’name ’,’振 动 试 验 数 值 仿 真 软 件 ’) ;
从此模型出发进行编程 ,可以为学生完整认识
% % % % % % % 图形 1 位置设置
单自由度系统振动问题提供有效帮助.
set (gca ,’unit’,’normalized’,. . .
① 收稿日期 :2007 - 02 - 08
作者简介 :董宇欣 (1974 - ) ,女 ,哈尔滨工程大学 ,硕士 ,主要研究方向为移动数据库、仿真智能机器人.
3
Π
3
3
3
3
3
3
753
3
第 3 期
董宇欣 :Matlab 语言在机械振动中的应用
’position ’, [ 0. 03 0. 54 0. 64 0. 38 ]) ;
’horizontal’,’center’,’string’, [ {’弹簧原长 L0
% % % % % % % 坐标轴原点位置设定
= ’} {’(cm) ’} ] ,’fontsize’,11) ;
title1 = title ( ’单自由度振子运动演示’,’col
h
edit
l0 = uicontrol ( hf1 ,’style’,’edit’,’
or’,[0. 5 0. 1 0. 9 ] ,’fontsize’,12) ;
unit’,’normalized’,’position’,. . .
% % % % % % % % % % % 做图形 2 静态画面
[ btntext
left + 0. 18 ,btn
btm1 ,btnedit
% % % % % % % % % %
figure (2)
set ( gcf ,’unit’,’normalized’,’position’, [ 0. 00
0. 08 0. 52 0. 33 ] ,. . .
’name’,’时间 ———位移函数图象’) ;
set (gca ,’unit’,’normalized’,’position’, [ 0. 06
0. 1 0. 95 0. 77 ] ,. . .
’fontsize’,10) ; % % % % % % % 坐标轴原
点位置设定
hold on
title2 = title (’时间 (x 轴) ———位移 (y 轴) 函数
图象’,’color’,[0. 5 0. 1 0. 9 ]) ;
% % % % % % % % % % % 做图形 3 静态画面
% % % % % % % % % % %
figure (3)
set ( gcf ,’unit’,’normalized’,’position’, [ 0. 53
0. 08 0. 46 0. 33 ] ,’name’,’振子的相轨线’) ;
set (gca ,’unit’,’normalized’,’position’, [ 0. 06
0. 1 0. 95 0. 77 ]) ; % % % % % % % 坐标轴原点位
置设定
axis on
hold on
title3 = title (’位移 (x 轴) ———速度 (y 轴) 函数
图象 , 即 振 子 的 相 轨 线’,’color’, [ 0. 5 0. 1 0.
9 ]) ; % 图形标题
以下面方式形成框架 :
hf1 = figure (1) ;
FrmBKcolor = [0. 2 0. 5 0. 5 ] ; % % %所有框架
背景颜色
frm1left = 0. 68 ; frm1btm = 0. 27 ; frm1wid = 0.
32 ; frm1het = 0. 73 ;
frm1Pos = [frm1left frm1btm frm1wid frm1het ] ;
h = uicontrol ( hf1 , ’Style’,’frame’,’Units’,’
normalized’, . . .
’Position’, frm1Pos ,’BackgroundColor ’,
FrmBKcolor) ;
以下面方式建立参数文本框 :
% % 弹簧原长 L0 文字说明框和可编辑框
h
l0 = uicontrol ( hf1 ,’style’,’text’,’
text
unit’,’normalized’,’position’,. . .
wid ,0. 6
btn
het ] ,. . .
’backgroundcolor’,editColor ,. . .
’horizontal ’,’left ’,’string ’, num2str
(L0) ,’callback’,. . .
’number
l0 ,’’string’’) ) ;’) ;
l0 = str2num (get ( h
edit
以下面方式建立运动状态显示文本框 :
h
v = uicontrol ( hf1 ,’style’,’text’,’
text
unit’,’normalized’,’position’,. . .
[frm2 ] left + 3
09 ,2
textWid + 0. 5
spacing2 + 2
spacing ,0. 7
textWid ,frm2btm + 0.
het ] ,. . .
btn
’backgroundcolor’,[0. 2 0. 9 0. 3 ] ,. . .
’horizontal’,’center’,’string’,. . .
[ ’速度 v = ’num2str (number
v0) ’m
s’] ,’fontsize’,11) ;
各命令按钮以下面方式形成 :
% % % % 开始按钮 % % % % % % % %
startHndl = uicontrol (hf1 ,’Style’,’pushbutton’,’
Units’,’normalized’, . . .
’Position’,[0. 68 0. 15 0. 10 0. 1 ] , . . .
’String’,’开始绘图’,’fontsize’,12 ,. . .
’Callback’,’figure (3) ; cla ;figure (2) ; cla ;figure
(1) ;cla ;Startdown ’) ;
对于解方程只用两条语句就完成了 :
function ydot = subfun (t ,y ,flag ,m ,k ,c ,g ,F0 ,w ,
bata) ;
ydot = [ y(2) ; ( - c
sin (w
(y(1) )^3) + F0
y (2) - k
t) )
m] ;
(y (1) + bata
对于振动的动画模拟 ,用下面的语句来完成 :
for i = 1 :length (t)
%根据质点的位置来形成弹簧端点坐标 ,
进而去画弹簧
xx = 0 :0. 1 :100
yy = R
(l0 + 100
4
sin ( ( (xx - 100
pi)
x (i) ) ) ; %调整弹簧伸缩时外径的
x(i) - l0)
5
x(i) + l0 ;
变化.
%由于弹簧一端固定不动 ,故只需提供另
[ btntext
left + 0. 07 ,btn
btm1 ,1. 5
btntext
一端的数据.
wid ,0. 6
btn
het ] ,. . .
set (spring ,’xdata’,xx ,’ydata’,yy) ;
853
佳 木 斯 大 学 学 报 ( 自 然 科 学 版 )
2007 年
set (ball ,’xdata’,100
drawnow
由于力学中的振动和电学中的方程有相似性 ,
x(i) + l0) ;
如果将编程使用的方程参数变化一下 ,这一仿真实
例就可以应用于电学的教学环节.
图 1 程序执行界面
2 结束语
从本文的分析中可以看出 ,开发的软件充分结
合了 MATLAB 较强的运算功能 ,一方面采用数值方
法解方程 ,使用户从复杂的求解过程中解脱出来 ,
另一方面 ,采用面向对象的设计技术 ,用户界面友
好 ,用户可以设定参数 ,自己试验 ,从动态演示中了
解振动状态.
参考文献 :
[1 ] 吴福光 ,蔡承武 ,徐兆. 振动理论 [ M] . 上海 : 高等教育出版
社 ,1987 ,p16 - 35.
[2 ] 张宜华. 精通 Matlab 5 [M] . 北京 :清华大学出版社 ,1999 ,61 -
92.
[3 ] 彭芳麟 ,管靖 ,胡静 ,卢圣治. 理论力学计算机模拟[ M] . 北京 :
清华大学出版社 ,2002 ,108 - 217.
Application of Matlab in Mechanics Vibration
DONG Yu - xin
(School of Computer Science and Technology , Harbin Engineering University , Harbin 150001 , China)
Abstract : A typical example in vibration course is given in the paper , and using Matlab language computer
program and emulate is compiled. Performing process of the program and demo animate are given.
Key words : Matlab ; emulate ; animate ; simulation