首页 百科知识 的数值计算

的数值计算

时间:2022-10-25 百科知识 版权反馈
【摘要】:目前在科技和工程界比较著名且流行的数学计算软件主要有4个,分别是Maple、Math-CAD、Mathematica和MATLAB。Maple是由加拿大Waterloo大学开发的数学系统软件,它具有精确的数值处理功能,更重要的特点是具有无与伦比的符号计算功能,它的符号计算能力还是MathCAD和MATLAB等软件的符号处理的核心。

4 数学计算软件

4.1 概 述

4.1.1 主要数学计算软件简介

目前在科技和工程界比较著名且流行的数学计算软件主要有4个,分别是Maple、Math-CAD、Mathematica和MATLAB。它们具有不同的特性。

1)Maple

Maple是由加拿大Waterloo大学开发的数学系统软件,它具有精确的数值处理功能,更重要的特点是具有无与伦比的符号计算功能,它的符号计算能力还是MathCAD和MATLAB等软件的符号处理的核心。它还提供了一套内置的编程语言,用户可以开发自己的应用程序。Maple采用字符行输入方式,输入时需要按照规定的格式输入,虽然与一般常见的数学格式不同,但灵活方便,也很容易理解。输出则可以选择字符方式和图形方式,产生的图形结果可以很方便地剪贴到Windows应用程序内。

2)Mathematica

Mathematica是由美国物理学家Stephen Wolfram领导的Wolfram Research开发的数学系统软件。它拥有强大的数值计算和符号计算能力,在这一方面与Maple类似,但它的符号计算不是基于Maple上的,而是自己用C语言开发的。Mathematica是一个交互式的计算系统,计算是在用户和Mathematica互相交换、传递信息数据的过程中完成的。Mathematica对于输入形式有比较严格的规定,用户必须按照系统规定的数学格式输入,系统才能正确地处理,输出时可以用各种格式保存文件和剪贴内容,包括RTF、HTML、BMP等格式。

3)MathCAD

MathCAD是美国Mathsoft公司推出的一个交互式的数学系统软件。现已被美国PTC公司收购。MathCAD是集文本编辑、数学计算、程序编辑和仿真于一体的软件。MathCAD Prime 2.0运行在NT/XP/Win7下,它的主要特点是输入格式与人们习惯的数学书写格式很近似,采用所见所得界面,特别适合一般无须进行复杂编程或要求比较特殊的计算。Math-CAD可以看作是一个功能强大的计算器,没有很复杂的规则;同时它也可以和Word、Lotus、WPS Writer等文字处理软件很好地配合使用,可以把它当作一个出色的全屏幕数学公式编辑器。

4)MATLAB

MATLAB原是矩阵实验室(Matrix Laboratory)在20世纪70年代用来提供Linpack和Eispack软件包的接口程序,采用C语言编写。现在,MATLAB可以运行在十几个操作平台上,比较常见的有基于Windows、OS/2、Macintosh、Sun、Unix、Linux等平台的系统。

MATLAB程序主要由主程序和各种工具包组成,其中主程序包含数百个内部核心函数,工具包则包括复杂系统仿真、信号处理工具包、系统识别工具包、优化工具包、神经网络工具包、控制系统工具包、μ分析和综合工具包、样条工具包、符号数学工具包、图像处理工具包、统计工具包等。

MATLAB是数值计算的先锋,它以矩阵作为基本数据单位,在应用线性代数、数理统计、自动控制、数字信号处理、动态系统仿真方面已经成为首选工具,同时也是科研工作人员和大学生、研究生进行科学研究的得力工具。MATLAB在输入方面也很方便,可以使用内部的Editor或者其他任何字符处理器,同时它还可以与Word结合在一起,在Word的页面里直接调用MATLAB的大部分功能,使Word具有特殊的计算能力。

4.1.2 数学计算软件的选用

选用何种数学软件?对于要求一般的计算或者是普通用户日常使用,首选的是Math-CAD,它在高等数学方面所具有的能力,足够一般客户的要求,而且它的输入界面也特别友好;如果对计算精度、符号计算和编程方面有要求的话,最好同时使用Maple和Mathematica,它们在符号处理方面各具特色,有些Maple不能处理的,Mathematica却能处理,诸如某些积分、求极限等问题,这些都是比较特殊的;如果要求进行矩阵方面或图形方面的处理,则选择MATLAB,矩阵计算和图形处理是它的强项,同时利用MATLAB的NoteBook功能,结合Word的编辑功能,可以很方便地处理科技文章。

4.1.3 本章目的

本章将简述数学分析软件“MATLAB”的基本功能(以R2010b版为例),力求使读者了解MATLAB的主要特点,初步掌握利用MATLAB进行土木工程方面数学计算、程序开发的知识。

4.2 MATLAB的基础知识

4.2.1 安装

MATLAB的主要安装步骤与普通Windows应用程序类同。但要注意,MATLAB软件光盘包含许多工具包,其中有的专业性很强,用户可根据需要选择安装。

4.2.2 操作桌面

安装完成后,点击Windows操作系统“程序”菜单中的快捷方式后,就可以打开操作桌面(Desktop),其缺省情况如图4.1所示。

MATLAB有大量的交互工作界面,包括:通用操作界面、工具包专用界面、帮助界面、演示界面等,而所有这些交互工作界面按一定的次序和关系被链接在一个称为“MATLAB操作桌面(MATLAB Desktop)”的高度集成的工作界面中。

图4.1是Desktop操作桌面的缺省外貌。该桌面的上层铺放着3个最常用的界面:指令窗、历史指令窗、工作空间浏览器,还有一个只能看到窗名(铺放在桌面下层)的当前目录窗。在窗桌面的左下角新增加了“【开始】”按钮。其他常用交互界面还有:工作空间浏览器、内存数组编辑器、交互界面分类目录窗、M文件编辑/调试器、帮助导航/浏览器。

图4.1 Desktop操作桌面的缺省外貌

下面将简要介绍上述各界面的使用方法。

4.2.3 指令窗(Command Window)

MATLAB有许多使用方法,但最基本的,是通过指令窗(Command Window)这种界面。

缺省情况下,指令窗位于MATLAB桌面的右方,如图4.1所示。用户可以点击指令窗右上角的,就可获得浮出的几何独立的指令窗。若用户希望让独立指令窗嵌放回桌面,则只要选中指令窗的【View】下拉菜单中的【Dock Command Window】选项即可。其他界面类似。下面结合算例,归纳一些MATLAB最基本的规则和语法结构。例4-1 求[3×(6-4)]÷23的算术运算结果。

解 ①用键盘在MATLAB指令窗中输入以下内容:

>>(3*(6-4))/2^3

②在上述表达式输入完成后,按【Enter】键,该指令就被执行

③在指令执行后,MATLAB指令窗中将显示以下结果:

ans=

0.7500

说明

(1)指令行的“头首”的“>>”是系统自动显示的“指令输入提示符”,其后的黑体字表示用键盘敲入的内容。

(2)在全部键入一个指令行后,必须按下【Enter】键,该命令才会被执行。

(3)本例计算结果中的“ans”是英文“answer”的缩写,其含义是“运算答案”。它是MATLAB的一个默认变量。

①在键盘上输入下列内容:

A=[1,2,3;4,5,6;7,8,9]

②在上述表达式输入完成后,按【Enter】键,该指令就被执行。

③在指令执行后,MATLAB指令窗中将显示以下结果:

A=

说明

(1)直接输入矩阵时,矩阵元素用空格或逗号“,”分隔,行用“;”隔离,整个矩阵放在方括号“[]”里。

(2)标点符号一定要在英文状态下输入。

(3)在MATLAB中,不必事先对矩阵维数做任何说明,存储将自动配置。

(4)指令执行后,矩阵A被保存在MATLAB的工作空间(Workspace)中,以备后用。如果用户不用“clear”指令清除它,或对它重新赋值,那么该矩阵会一直保存在工作空间中,直到本MATLAB指令窗被关闭。

(5)MATLAB对字母大小写是敏感的。如本例中的矩阵赋给了变量A,而不是小写的变量a。

1)数值、变量和表达式

(1)数值——MATLAB的数值采用习惯的十进制表示,可以用小数点或负号。

(2)变量命名规则——变量名、函数名对字母大小写敏感;变量名首字母必须是英文字母,最多可包含63个字符(英文、数字和下划线)。

(3)MATLAB默认的预定义变量——在MATLAB中有一些所谓的预定义变量(Predefined Variable)。用户应尽可能不对它们重新赋值,以免产生混淆。

表4.1 MATLAB的预定义变量

(4)运算符和表达式

①算术运算符加、减、乘、除、幂在MATLAB中依次为“+”、“-”、“*”、“/”(或“\”)、“^”;

②MATLAB书写表达式的规则与“手写算式”几乎完全相同。

说明

MATLAB用左斜杠或右斜杠分别表示“左除”或“右除”运算。对标量,这两种运算符的左右没有区别,但对矩阵来说,“左除”或“右除”将产生不同的影响。

2)指令窗显示方式的操作

MATLAB对窗内的字符、数码采用不同的颜色分类,使得显示十分醒目。如对if、for等关键词采用蓝色字体,对输入的指令以及计算结果采用黑色字体,对字符串采用赭红色字体等。此外,MATLAB仅仅为了显示简洁才采用较少数位显示数值(实际存储和运算时都以双精度进行)。

用户根据需要,可对指令窗的上述显示方式进行设置:选中桌面或指令窗的【File】下的【Preferences】下拉菜单项,引出一个参数设置对话框;在此弹出的对话框的左栏选中“Command Window”项或其展开项“Fonts”、“Colors”,然后选择对话框的相应内容进行设置即可。

3)指令窗的常用控制指令

MATLAB提供的通用操作指令见表4.2。

表4.2 常见的通用操作指令

4)指令窗中指令行的编辑

为了操作方便,MATLAB允许用户对过去已经输入的指令行进行回调、编辑、重运行。具体的操作方式见表4.3。

表4.3 指令窗中实施指令行编辑的常用操作键

4.2.4 历史指令窗(Command History)、实录指令(Diary)

用户可在MATLAB环境中,边想边做,包括把以前的做法拿过来稍加修改后再验证。为此,MATLAB向用户提供了两个应用工具:历史指令窗(Command History)、指令窗实录指令diary。

1)Command History历史指令窗

历史指令窗记录着用户在MATLAB指令窗中输入过的所有指令行。而所有这些被记录的指令行都能被复制,或送到指令窗中再运行:单行或多行指令的复制和运行、生成M文件、历史命令的内容打印、使用查找对话框搜索历史命令窗口中的内容、设置历史命令的自动保存等,其主要用法见表4.4。

2)指令窗实录指令diary

在MATLAB开启运行的情况下,用户若想把此后指令窗中的全部内容记录为“日志”文件(ASCII文件),可以进行如下操作:

(1)把将来存放“日志”文件的目录(例如e:\mydir)设置成当前目录。设置既可以通过桌面上的【Current Folder】进行,也可以通过在指令窗中运行“cd e:\mydir”实现。

(2)在MATLAB指令窗中运行指令“diary my_diary”(自己命名的日志名)。此后,指令窗中显示内容(包括指令、计算结果、提示信息等)将全部记录在内存中。

(3)当用户运行关闭记录指令“diary off”后,那些内存中保存的操作内容就全部记录在名为“my_diary”的“日志”文件中(无扩展名),文件“my_diary”则登陆在当前目录“e:\mydir”中。该文件可用MATLAB的M文件编辑器或其他文本读写软件打开阅读和编辑。

4.2.5 当前目录窗(Current Directory)

在指令窗中运行一条指令时,MATLAB怎样从庞大的函数和数据库中,找到需要的函数和数据?本节将要介绍这方面的内容。

1)用户目录和当前目录设置

(1)建立用户目录——在Windows环境下,创建目录是十分简单的规范操作,本书不再赘述。

(2)把用户目录设置为当前目录——方法1:在MATLAB操作桌面右上方,或当前目录浏览器左上方,都有一个当前目录设置区。它包括“目录设置栏”和“浏览键”。用户可在“设置栏”中直接填写待设置的目录名,或借助“浏览键”和鼠标选择待设置目录。方法2:通过指令设置,例如“cd:c:\mydir”。

说明

(1)以上方法设置的当前目录,只是在当前开启的MATLAB环境中有效。

(2)在MATLAB环境中,如果不特别指明存放数据和文件的目录,那么MATLAB总默认将它们存放在当前目录中。

2)MATLAB的搜索路径

MATLAB的所有(M、MAT、MEX)文件都被存放在一组结构严整的目录(即文件夹)上。MATLAB把这些目录按优先次序设计为“搜索路径”上的各个节点。以后,MATLAB就沿着此搜索路径,从各个目录上寻找所需调用的文件、函数、数据。

例如,当用户从指令窗中送入一个名为“cow”的指令后,MATLAB的搜索次序大致如下:①在内存中进行检查,看“cow”是不是变量,假如不是,往下执行;②检查“cow”是不是内建函数(Built-in Function),假如不是,往下执行;③在当前目录上,检查是否有名为“cow”的M文件存在,假如不是,往下执行;④在MATLAB搜索路径的其他目录中,检查是否有名为“cow”的M文件存在。

假如用户有多个目录需要同时与MATLAB交换信息,或经常需要与MATLAB交换信息,那么就应该把这些目录放置在MATLAB的搜索路径上。又假如其中某个目录需要用来存放运行中产生的文件和数据,那么还应该把这个目录设置为当前目录(方法见前)。

设置搜索路径的方法有两种:

(1)采用路径对话框——在指令窗中运行指令“pathtool”,或在MATLAB桌面、指令窗等的菜单条中,选择【File】中的【Set Path】下拉菜单项,都可以引出如图4.2的路径对话框。

说明

(1)假如在路径设置过程中,仅使用了对话框的左侧按键,则修改仅在当前有效。

(2)假如在设置后,使用了对话框下方的【Save】选项,则修改永久有效,即所进行的修改不因MATLAB的关闭而消失。

(2)采用指令“path”设置路径——该方法对任何版本的MATLAB都适用。假设待纳入搜索路径的目录为“e:\my_dir”,那么以下任何一条指令均能实现:path(path,'e:\my_dir') 把e:\my_dir设置在搜索路径的尾端path('e:\my_dir',path) 把e:\my_dir设置在搜索路径的首端

说明

用path指令扩展的搜索路径仅在当前MATLAB环境下有效。

图4.2 路径设置对话框

4.2.6 工作空间浏览器(Workspace Browser)

工作空间浏览器有多种功能,内存变量的查阅、保存、编辑、重命名、删除等,见表4.5。

除下表中描述的工作空间浏览器的现场菜单操作以外,还可以在指令窗中使用指令来查阅、删除变量:

(1)用who、whos指令查阅变量

表4.5 工作空间浏览器主要应用功能的操作方法

续表4.5

说明

who、whos指令操作对MATLAB的所有版本都适用;两个指令的差别仅在于获取内存变量信息的详细程度不同。

(2)用clear指令删除变量

clear 删除内存中的所有变量。

clear a1a2 删除内存中的变量a1,a2。注意被删变量之间须用“空格”分隔。

4.2.7 帮助系统

1)纯文本帮助

MATLAB的所有执行指令、函数的M文件都有一个注释区,用纯文本的形式简要地叙述该函数的调用格式和输入输出变量含义。该帮助内容最原始,但最真切可靠。对这些纯文本帮助的使用有以下几种方法:

(1)敲入“help”,引出包含一系列主题(Topics)的分类列表;

(2)敲入“help topic”,则得到该“topic”下的函数名(FunName)列表;

(3)敲入“help FunName”,则得到该具体函数的纯文本形式的具体用法说明;

(4)敲入“lookfor keyword”,例如“lookfor fourier”将搜寻H1行(M函数文件的第一注释行)包含关键词“fourier”的所有M函数文件名。

2)“导航、浏览器交互界面”帮助点击工具条的图标,或选中下拉菜单项【Desktop:Help】都可以引出导航、浏览器交互(Help Navigator/Browser)界面。该界面由帮助导航器和帮助浏览器两部分组成。构成这个子系统的文件全部存放在help子目录下。该帮助子系统对MATLAB功能的叙述最系统、丰富、详尽,而且界面十分友善。

3)PDF文件帮助

MATLAB把“帮助浏览器”中的部分内容制作成了PDF文件,分类存放在MATLAB\R2010b\help\pdf-doc中。阅读时需要Adobe Acrobat Reader软件支持。

4)演示帮助

MATLAB主包和各工具包都有设计很好的演示程序,由交互界面引导,操作非常方便。运行指令“demo”,可引出这组演示程序。运行这组程序,对照屏幕上的显示仔细研究实现演示的有关M文件,对新老用户都是十分有益的。

5)Web帮助

Math Works公司的技术支持网点提供相关书籍介绍、使用建议、常见问题解答等。

4.2.8 其他窗口

其他常用交互界面还有:工作空间浏览器、变量编辑器、M文件编辑/调试器、帮助导航/浏览器。

(1)变量编辑器Variable Editor——使用窗口界面,对一维或二维的数值数组、一维字符数组进行编辑,如修改数组大小、改变数组元素的值等。

(2)M文件编辑/调试器——编辑、调试M文件。

4.3 MATLAB的数值计算

数学计算分为数值计算和符号计算。这两种计算的区别是:数值计算的表达式、变量中不得包含未定义的自由变量,而符号计算中则允许。

MATLAB之所以成为最优秀的数学软件之一,其卓越的数值计算能力是一个决定性的因素。数值数组(Numeric Array)和数组运算(Array Operations)始终是MATLAB数值计算的核心内容,数组是MATLAB的基本计算单元

MATLAB精心设计数组和数组运算的目的在于:①使计算程序简单、易读,接近于数学计算公式;②提高程序的向量化程度,提高计算效率,节省计算机开销。

4.3.1 一维数组

(1)创建一维数组的常用方法:

①逐个元素输入法,例如:

x=[2 3 3+5i]       %采用逐个元素输入法构造数组

x=  2.0000 3.0000 3.0000+5.0000i

②冒号生成法,是通过“步长”设定,生成一维数组的方法,通用格式为:

x=a:inc:b

说明

a是数组的第一个元素;inc是采样点之间的间隔,即步长,省略时,其值为1。

(2)一维数组子数组的寻访:

设x为一维数组,x=1:2:9,则:

x(3)          %寻访数组x的第三个元素

x=([1 2 5])    %寻访数组x的第一、二、五这3个元素组成的子数组

ans=

    1.0000 3.0000 9.0000

x(2:4)            %寻访数组x的第二到第四这3个元素组成的子数组

x(4:-1:2)          %寻访数组x的第二到第四这3个元素倒排组成的子数组

x(find(x>4))         %寻访由大于4的元素组成的子数组

(3)一维数组子数组的赋值:

x(3)=0              %把x数组中第三个元素重新赋值为0

x=([2 5])=[1 2]      %把x数组中第二、第五个元素重新赋值为1、2

4.3.2 二维数组的创建

二维数组是由实数或复数排列成矩形而构成的。从数据结构上看,矩阵和二维数组没有区别。当二维数组带有线性变换含义时,该二维数组就是矩阵。

创建二维数组的常用方法有:

(1)对于较小数组,从键盘上直接输入最简便,此时必须:①整个输入数组必须以方括号“[]”为其首尾;②数组的行与行之间必须用分号“;”或回车键分隔;③数组元素必须用逗号或空格分隔。具体例子见例4-2。

(2)对于较大数组,利用M文件创建和保存数组。

例4-3 创建和保存数组A的MyMatrix.m文件。

①打开文件编辑调试器,并在空白填写框中输入以下内容:

%MyMatrix.m     Creation and preservation of matrix A A=[101,102,103,104,105,106,107,108,109;...

201,202,203,204,205,206,207,208,209];

②保存此文件,并命名为MyMatrix.m。

③以后只要在MATLAB指令窗中,运行MyMatrix.m文件,数组A就会自动生成到MATLAB内存中。

4.3.3 二维数组元素的标识

(1)“全下标”标识——对于二维数组来说,“全下标”标识由两个下标组成:行下标、列下标。如A(3,5)就表示在二维数组A中的“第3行第5列”的元素。

(2)“单下标”标识——只用一个下标来指明元素在数组中的位置,即要对二维数组中的所有元素进行“一维编号”:先设想把二维数组的所有列,按先左后右的次序,首尾相连排成“一维长列”;然后,自上往下对元素位置进行编号。

4.3.4 二维数组的子数组寻访和赋值

理解了4.3.1节中一维数组子数组的寻访,掌握了前一节中二维数组的元素标识,就容易理解和掌握二维数组的子数组寻访和赋值,具体内容可参看有关资料或联机帮助。

4.3.5 复杂数组的构建

1)标准数组生成函数

表4.6 标准数组生成函数

(2)数组操作函数

表4.7 常用数组操作函数

例4-4 diag与reshape的使用演示。

04

3)数组构建技法

为了生成比较复杂的数组,MATLAB针对数组提供了诸如反转、插入、提取、收缩、重组等操作,也可以对已生成的数组进行修改、扩展。

例4-5 数组的赋值扩展法。

限于篇幅,其他技法不再举例。实际上,借助于此类技法,复杂数组的构建是相当灵活的,

这对以后灵活使用MATLAB是有重要帮助的,读者应参看相关资料或联机帮助。

4.3.6 数组运算和矩阵运算

从外观形状和数据结构上看,二维数组和数学中的矩阵并没有区别。但是,矩阵作为一种变换或映射算子的体现,矩阵运算有着明确而严格的数学规则;而数组运算是MATLAB软件所定义的规则:无论在数组上施加什么运算,总认定那种运算对被运算数组中的每个元素(Element)平等地施加同样的操作,其目的是为了数据管理方便、操作简单、指令形式自然和执行计算的有效。

为更清晰地标出数组运算和矩阵运算的区别,现将两种运算指令形式和实质内涵的异同列于表4.8中。

表4.8 数组、矩阵运算指令形式和实质内容的异同表

续表4.8

说明

(1)数组“除、乘方、转置”运算符前的小黑点决不能遗漏,否则变成矩阵运算。(2)特别注意:在求“乘、除、乘方、三角和指数函数”时,两种运算有根本区别。

除上述基本运算外,MATLAB针对数组还提供了诸如三角、双曲、复数、圆整、求余、坐标变换等函数运算功能,具体细节可参看相关资料或联机帮助。

4.3.7 关系操作和逻辑操作

在程序流控制中,在逻辑、模糊逻辑推理中,都需要对一类是非问题左除“是真,是假”的回答。为此,MATLAB设计了关系操作、逻辑操作和一些相关函数。关系操作符见表4.9。

表4.9 关系操作符

说明

(1)标量可以与任何维数组进行比较。比较在此标量与数组的每个元素之间进行,因此比较结果将与被比较数组同维。

(2)当比较量中没有标量时,关系符两端进行比较的数组必须维数相同。比较在两数组相同位置上的元素之间进行,因此比较结果将与被比较数组同维。

前述为“简单关系”操作。逻辑操作的引入,将使复杂关系运算成为可能,MATLAB提供了三组逻辑操作:数组逻辑操作(Element-Wise Logical Operation)、二进数位逻辑操作(Bit-Wise Logical Operation)、先决逻辑操作(Short-Circuit Logical Operation),具体细节可参看相关资料或联机帮助。

4.3.8 数值计算举例

可见4.11节“MATLAB用于有限元分析的简例”中,采用MATLAB求解方程组。

4.4 字符串、细胞和构架数组

前一节介绍了数值数组,这是读者比较熟悉的数据类型。本节将简介另外三类数据:字符串数组(Character String Array)、细胞数组(Cell Array)和构架数组(Structure Array)。它们之间的基本差别见表4.10。

表4.10 四种数据类型基本构成比较表

4.4.1 字符串数组简介

与数值数组相比,串数组在MATLAB中的重要性较小,但它不可缺少。假如没有串数组及相应的操作,那么数据的可视化、构成MATLAB的宏指令等都将会遇到困难。

字符变量的创建方式是:在指令窗中,先把待建的字符放在“单引号对”中,再按【Enter】键。

例4-6 字符数组的简单操作。

MATLAB为串数组设计了一些串转换函数和串操作函数,为MATLAB的文字表达、复杂字符串的组织、宏功能的发挥等提供了强有力的支持。

串转换函数——实现字符串与其他类型数据之间的相互转换,包括ASCII码、十进制整数、浮点数、数值矩阵、双精度数值等。

串操作函数——诸如比较字符串、组合字符串、在一个字符串中查找另一个字符串、替换字符串、改变字符串的大小写等等。

4.4.2 细胞数组简介

细胞数组如同银行里的保险库一样,数组的基本组分细胞(Cell)相当于保险库的最小单位保险柜。保险柜中可以存放多种不同的贵重物品,而细胞中可以存放任何类型、任何大小的数据。每一个细胞本身在数组中是平等的,它们只能以下标区分;同一个细胞数组中各细胞的内容可以不同。

1)细胞标识寻访和内容编址寻访的不同

无论在数值数组还是在字符串数组里,由于同一数组各元素的数据类型都相同,因此对元素的寻访是直接的。如对于二维数组A来说,A(2,3)就表示数组A第2行第3列上的元素。

在细胞数组中,细胞和细胞里的内容是两个不同范畴的东西。因此,寻访细胞和寻访细胞

中的内容是两种不同的操作。为此,MATLAB设计了两种不同的操作:“细胞外标识(Cell Indexing)”和“细胞内编址(Content Addressing)”。以二维细胞数组A为例,A(2,3)就表示数组A第2行第3列细胞元素;而A{2,3}是指A细胞数组第2行第3列细胞中(所允许存或取)的内容。

例4-7 细胞数组的创建。

①直接创建法之一:“外标识细胞元素赋值法”

②直接创建法之二:“编址细胞元素内涵的直接赋值法”

B{1,1}=[1 4 3;0 5 8;7 2 9];

说明

(1)例题中,细胞数组A、B等价。

(2)显示细胞数组全部或部分内容的指令是“celldisp”。

(3)在指令窗中,若直接输入细胞数组名,除“单”元素细胞外,一般只能得到细胞所存内容的属性,而不显示细胞数组内容。

2)其他

细胞数组的扩充、收缩和重组的方法大致与数值数组情况相同。

可以通过转换函数将矩阵转换为细胞数组,或将一个适当的数组变换为单一的矩阵。

4.4.3 构架数组简介

构架数组的基本组分是构架(Structure)。数组中每个构架是平等的。但构架必须在划分“域”后才能使用:数据不是存放在构架上,而是存放在域中。这是与细胞数组不同的地方。从一定意义上讲,构架数组组织数据的能力比细胞数组更强、更富于变化。

4.5 数据的可视化及图形用户界面制作

人们很难直接从一大堆原始的离散数据中体会到它们的含义,用数据画出的图形却能使人们用视觉器官直接感受到数据的许多内在本质。因此,数据可视化是人们研究科学、认识世界所不可缺少的手段。

作为一个优秀的科技软件,MATLAB不仅在数值计算上独占鳌头,而且一向注重数据的图形表示,并不断地采用新技术改进和完备其可视化功能。MATLAB可以给出数据的二维、三维乃至四维的图形表现。通过对图形线型、立面、色彩、渲染、光线、视角等的控制,可把数据的特征表现得淋漓尽致。

MATLAB提供了两个层次的图形命令:一种是对图形句柄进行的低级图形命令;另一种是建立在低级命令之上的高级图形命令。

4.5.1 高级图形命令简介

MATLAB提供了很多高级图形命令,这些命令可以绘制一般科技图软件所能绘制的几乎所有图形,如曲线图、极点图、直方图、等高线图、网格图、表面图等。用户还可以控制图形的颜色、视角、坐标标注、阴影、着色、灯光照明、反射效果、材质表现、透明度处理渲染等与图形外观有关的因素。

MATLAB还能够显示和转换变址、灰度和真彩图像,读写各种标准图像格式文件。

MATLAB可以通过图形窗的交互操作对图形进行修饰、调整。

例4-8 采用高级图形命令,进行简单三维绘图,如图4.3所示。

图4.3 简单三维绘图(宝石项链)

4.5.2 低级图形(句柄图形)命令简介

前面提到的“plot3”等绘图命令都处于MATLAB图形系统的高层界面。MATLAB还提供了一组用于创建及操作线、面、文字、像等基本图形对象的低级函数。这组命令可以对图形各基本对象进行更为细致地修饰和控制。MATLAB的这个系统称为句柄图形(Handle Graphics)。各种MATLAB高级图形指令都是以句柄图像软件为基础写成的。

用户也可利用句柄图形的命令生成用户自己的图形命令。句柄图形是MATLAB的面向对象的图形系统。每个图形对象都有很多可以更改的属性。对于已经生成的图形,可以在命令窗口中键入相应的句柄图形命令来改变图形的外观。

低级指令使用起来,不像高级指令那样数学概念清晰、调用格式简明易懂。但低级指令直接操作基本绘图要素(Basic Drawing Elements),可更细致、更具个性地表现图形,更自然、贴切地展现应用场合的物理意义。

例4-9 利用函数“set”对三维图形属性进行修改。

图4.4 函数set对三维图形属性的设置

4.5.3 图形用户界面GUI制作简介

句柄图形命令还可以建立菜单、按钮、文本框以及其他的图形界面部件,可以开发图形界面。

图形用户界面(Graphical User Interfaces,GUI)是由窗口、光标、按键、菜单、文字说明等对象(Objects)构成的一个用户界面。用户通过一定的方法(如鼠标或键盘)选择、激活这些图形对象,使计算机产生某种动作或变化,比如实现计算、绘图等。

一个好的界面应遵循以下4个原则:①简单性——设计界面时,应力求简洁、直接、清晰地体现出界面的功能和特征;②一致性——开发的界面风格应尽量一致,新设计的界面风格与其他已有的界面风格不要截然相左;③熟悉性——设计新界面时,应尽量使用人们所熟悉的标志和符号;④动态交互性——要求界面能够迅速、连续地对操作做出反应,在很多情况下,还要求可以撤销操作。

用户可以采用MATLAB制作GUI界面的菜单:①可以采用MATLAB图形窗的标准菜单(有File、Edit、View、Insert、Tools、Window、Help等标准菜单项);②可以通过unimenu指令自制菜单,添加新的菜单项;③可以更改菜单的属性,如设置快捷键、修改菜单外观等;④制作由鼠标右键激活的、具体内容与鼠标所在现场位置有关的现场菜单等等。

用户还可以采用MATLAB制作用户控件。除菜单外,控件是另一种实现用户与计算机交互的主要途径。在MATLAB中,用户控件作为图形对象,有按键、互斥选项按键、文本框、编辑框、滚动条、检录框等十余种表现形式。

图形用户界面的设计、制作除了用户采用(多行)指令(编写文件)完成外,MATLAB提供了设计、修改用户界面的专用工作台(Layout Editor),如图4.5所示(用命令“guide”调用),相当于提供了一个模板,大大减轻用户制作常用GUI界面的工作量。

图4.5 界面设计工作台的结构和功能

4.6 M文件

4.6.1 简介

用MATLAB语言编写的,可在MATLAB中运行的程序,称为M文件。M文件包含两类:命令文件(又称脚本文件)和函数文件。两者的区别在于:①命令文件没有输入参数,也不返回输出参数,而函数文件可以有输入参数,也可以返回输出参数;②命令文件对工作空间中的变量进行操作,而函数文件的变量为局部变量,只有其输入、输出变量保留在工作空间中。

一般来说,命令文件用于把很多需在命令窗口输入的命令放在一起,以便于修改;而函数文件用于把重复的程序段落封装起来,使程序更加简洁。用任何文本编辑器都可以编写M文件。在MATLAB的命令窗口中可以运行M文件。无论函数文件还是命令文件都可以被别的程序调用。

4.6.2 M文件入门举例

1)命令文件举例

例4-10 编写命令文件,求解所有小于2000且为2的整数次幂的正整数。

①用任何文本文件编写以下内容:

②保存该文件为“t.m”。

③在MATLAB文件窗口键入文件名“t”,运行结束后,可在屏幕上看到以下内容:

说明

(1)符号“%”引导的行是注释行。

(2)t.m运行后,文件中的变量可用who和whos命令查看。

(2)函数文件举例

例4-11 编写函数文件,完成与上题同样的功能。

①用任何文本文件编写以下内容:

②保存该文件为“tt.m”。

③在MATLAB文件窗口键入以下命令,便可求所有小于2000的2的正整数次幂:

tt(2000)f=

2 4 8 16 32 64 128 256 512 1024

说明

(1)文件tt.m中的第一行为函数申明行(Function Declaration Line),作用是指明该文件为函数文件:定义函数名、输入参数、输出参数。函数名可以是任何合法的MATLAB变量名。输入和输出参数根据实际情况而定,参数类型可以是数值,也可以是字符串。在本例中,输入参数是“n”,输出参数是“f”。

(2)变量k对函数文件来讲是局部的。当该函数调用结束后,该变量不再存在。如果在调用函数tt前工作空间中就已存在变量k,函数调用后它不会受到影响。

(3)在M文件的头几行带有符号“%”,为注释行。注释行有两个作用:①随M文件全部显示或打印时,起注释作用;②供Help指令在线查询。Help命令运行后所显示的M文件的帮助信息为M文件中注释语句的第一个连续块。

3)文件的执行

当MATLAB遇到一个新的名称时,将采用如下顺序来鉴别:

(1)检查该名称是否为当前工作空间中的变量;

(2)检查该名称是否为子函数名(子函数为函数文件的内部函数);

(3)检查该名称是否为局部函数名(局部函数放在一个单独的目录下,只有其上面一层目录里的M文件可以调用这些函数);

(4)检查该名称是否为MATLAB搜索路径上的函数名(实际上是函数文件的文件名)。MATLAB调用按照搜索路径的先后顺序搜索到的第一个同名函数。

4.6.3 MATLAB控制流

计算机编程语言允许程序员根据某些判决结构来控制程序流的执行顺序。MATLAB提供了5种控制程序流的结构:for循环结构,while循环结构,if-else-end分支结构,switch-case结构以及try-catch结构。MATLAB提供的这5种控制指令用法与其他语言的十分类似,因此本书就不再赘述其细节。

4.6.4 其他

1)局部变量和全局变量

(1)局部(Local)变量

存在于函数空间内部的中间变量,产生于该函数的运行过程中,其影响范围仅限于该函数本身。

(2)全局(Global)变量

通过Global指令,MATLAB也允许几个不同的函数空间以及基本工作空间共享一个变量。这种被共享的变量称为全局变量。

2)子函数

MATLAB允许1个M函数文件包含多个函数的代码。其中,第一个出现的那个函数称为主函数(Primary Function),该文件中的其他函数则称为子函数(Subfuncion)。保存时所用函数文件名与主函数定义名相同。外部程序只对主函数进行调用,有如下性质:

(1)每个子函数的第1行是其自己的函数申明行。

(2)在M函数文件内,主函数的位置不可改变,但子函数的排列次序可以任意改变。

(3)子函数只能被处于同一文件的主函数或其他子函数调用。

(4)在M函数文件中,任何指令通过“名字”对函数进行调用时,子函数的优先级仅次于内装函数。

(5)同一文件的主函数、子函数的工作空间都是彼此独立的。各函数间的信息,或通过输入输出参数传递,或通过全局变量传递,或通过跨空间指令传递。

(6)help、look for等帮助指令都不能提供关于子函数的任何帮助信息。

3)私用函数

私用函数是指位于private目录上的M文件函数,它有如下性质:

(1)构造与普通M函数完全相同。

(2)私用函数只能被private直接父目录上的M文件所调用,而不能被其他目录上的任何M文件或MATLAB指令窗中的命令所调用。

(3)M文件中,任何指令通过“名字”对函数进行调用时,私用函数的优先级虽低于内装函数和子函数,但高于其他任何目录上的函数。

(4)help、look for等帮助指令都不能提供关于私用函数的任何帮助信息。

4)调试器的使用

MATLAB提供了指令式调试工具,以及使用更为简便的图形式调试器(Graphical Debugger)。图形式调试器与M文件编辑器集成为一体。调试器主要提供以下功能:断点设置(或清除)、单步执行、深入函数、跳出函数、连续执行、结束测试等。

4.7 符号计算

4.7.1 符号计算特点

符号计算的特点:①运算以推理解析的方式进行,因此不受计算误差积累问题困扰;②符号计算,或给出完全正确的封闭解,或给出任意精度的数值解(当封闭解不存在时);③符号计算指令的调用比较简单,与经典教科书公式相近;④计算所需时间较长。

4.7.2 MATLAB符号计算入门

1993年,MathWorks公司从加拿大Waterloo Maple公司购买了对Maple的使用权。随后MathWorks公司以Maple的内核作MATLAB符号计算的引擎,开发了实现符号计算的工具箱(Symbolic Math Toolbox)。MATLAB 6.5版开始启用MapleⅧ的计算引擎。

在MATLAB中,数值和数值变量用于数值的存储和各种数值计算。而符号常数、符号变量、符号函数、符号操作等则是用来形成符号表达式。MATLAB严格地按照代数、微积分等课程中的规则、公式进行运算,并尽可能地给出解析表达结果。

函数sym用于生成符号对象。

例4-12 将字符x变为符号对象(符号变量)y。

y=sym(′2*x′)y=

2x

例4-13 在上例基础上,求解z=y2(即z=4×x2)。

说明

最后一行的求解结果为经过符号运算后得到的代数表达式。

函数syms可用来一次生成多个符号变量,例如:

例4-14 用符号计算验证三角等式:

4.7.3 其他符号计算简介

MATLAB中的数学工具箱提供的主要符号数学计算功能见表4.11。

表4.11 MATLAB符号计算工具箱提供的数学计算分类

下面仅举例说明MATLAB的符号微分功能。

例4-15 生成表达式sinax,并分别对其中的x和a求导。

说明

上题中,事先没有对表达式中的独立符号变量进行定义,MATLAB软件自动检查哪些字符是软件的符号函数,哪些是符号变量,且总是把在英文字母表中离x最近的字母作为自变量。

4.8 Notebook

MATLAB Notebook成功地把Microsoft Word和MATLAB集成在一起,为用户营造融文字处理、科学计算、工程设计于一体的工作环境。在Notebook中的命令可随时修改、随时计算并画成图形。因此,它不仅拥有Microsoft Word的全部文字处理功能,而且具备MATLAB的数学解算能力和计算结果的可视化能力。它既可以看作解决各种计算问题的字处理软件,也可以看作具备完善文字编辑功能的科技应用软件。

4.8.1 安装

MATLAB 6.5版本的Notebook是在MATLAB环境下安装的,具体步骤为:

(1)在Windows上分别安装Microsoft Word和MATLAB 6.5;

(2)启动MATLAB,打开MATLAB指令窗;

(3)在指令窗中运行notebook-setup,Notebook就会自动安装直至完成。

4.8.2 启动

启动Notebook有以下两种情况:

1)在Word(以Word 2010为例)默认窗口(即Normal.dot)下创建M-book

(1)在Word窗口的【文件】下拉菜单中选择【新建】子项;

(2)在右边窗口中选择【我的模板】,在弹出的对话框中,选择“m-book.dot”模板,按【确定】键;

(3)假如此前MATLAB尚未启动,则MATLAB自动被启动;最后进入新的M-book文档窗口。

2)从MATLAB中启动Notebook

notebook           %打开一个新的M-book文档

notebook PathFileName     %打开已存在的M-book文档

说明

(1)以上指令在MATLAB命令窗口中运行。

(2)Path File Name是包括完整路径在内的所需打开的文件名。

4.8.3 输入细胞(群)的创建和运行

1)细胞群

在Notebook中,凡参与Word和MATLAB之间信息交换的部分,就称为“细胞(群)”(Cell or Cell Group)。由M-book送向MATLAB的指令,称为“输入”细胞(Input Cells);由MATLAB返回M-book的计算结果,称为“输出”细胞(Output Cells)。细胞和细胞群没有根本区别。

2)基本操作

(1)以普通文本形式输入的必须是MATLAB指令。其中,标点符号必须是在英文状态下输入的。

(2)不管文本形式的一条指令有多长,不管一行有多少条文本形式指令,不管有多少行文本形式指令,只要能有鼠标把它们同时“点亮”选中,那么就可以被创建、运行,具体如下:①如果“点亮”选中后,按组合键【Ctrl】+【Enter】,那么点亮部分就成为输入细胞(群),并在M-book中获得运行结果,即输出细胞;②如果“点亮”选中后,按组合键【Alt】+【D】,那么“点亮”的部分只是变成了输入细胞(群),但不运行,没有运行结果。

(3)在【Notebook】下拉菜单中,与组合键【Ctrl】+【Enter】等价的菜单项是【Evaluate Cell】。

4.8.4 计算区的创建和运行

计算区(Calc Zone)是M-book文档中连续的一块,即可以包含普通文字、数学公式、方块图以及若干个输入细胞群。此后,只需一次操作就可对该区中所有细胞群进行计算。

基本步骤如下:

(1)把需要的连续的一块的全部内容用鼠标“点亮”,然后选中下拉菜单【Notebook】下的【Define Calc Zone】选项。在屏幕上可以看到,整个计算区的前后有两对空白的“细胞区域符”(特殊的粗黑方括号),表明计算区已经定义成功。

(2)一旦计算区被定义以后,不管光标在计算区的什么地方(即不需要将全部内容“点亮”了),此时若再选中下拉菜单【Notebook】下的【Evaluate Calc Zone】,那么就会在每个输入细胞群后面以输出细胞形式给出相应的计算结果。

4.8.5 其他

(1)输出细胞的格式控制——输出细胞包含MATLAB的各种输出结果:数据、图形、错误信息等。其格式控制包括:数据的表示法、输出数据之间的空行的大小、绘图指令是否向MATLAB文档输出图形、输出的图形的大小、图形的背景色彩、图形打印输出的方式等。

(2)细胞的样式——与其他Word模板一样,M-book模板通过“样式”确定、修改各种细胞的字体、字号、字色。其中,输入细胞样式名为“Input”,输出细胞为“Output”,自初始化细胞为“AutoInit”,出错提示为“Error”。

4.9 MATLAB编译器(Compiler)

使用过MATLAB的科技人员,都能感受到该软件的简洁、便捷和功能的强大,同时也对MATLAB产生了新的期望:①希望程序能运行得更快;②希望获得可摆脱MATLAB环境而独立运行的可执行软件。MATLAB 2010b随带了4.14版的编译器,可以帮助用户达成以上目的。

4.9.1 编译器的功能

(1)产生C源码,并进而生成MEX文件。M文件、MEX文件都是在MATLAB命令解释器(MATLAB Interpreter)的操纵下进行的,不能脱离MATLAB系统环境。但M文件由ASCII码文件写成,而MEX文件由二进制码写成。这种MEX文件的优点是:①当程序变量为实数,或向量化程度较低,或含有循环结构时,采用该法可提高运行速度;②与M文件相比,MEX文件采用二进制代码,能更好地隐藏文件算法,使之免遭非法修改。

(2)产生C或C++源码,以便与其他C/C++模块结合形成独立的外部应用程序。运行所产生的应用程序,无需MATLAB环境的支持,但是往往需要MATLAB提供的C/C++数学库;如果调用了MATLAB绘图指令,则还需要MATLAB提供的C/C++图形库。

(3)产生C MEX的S函数,与simulink配合使用,以提高S函数的运行速度。

(4)产生C共享库(动态链接库、DLL)或C++静态库,它们的使用无需MATLAB环境的支持,但是需要MATLAB数学库。

4.9.2 由M文件创建外部应用程序基本步骤

(1)编写M函数文件,例如t2.m。

(2)把文件存放于用户自己的目录“d:\mywork”,并在MATLAB指令窗中运行检验。

(3)生成独立的外部可执行程序。在MATLAB指令窗中,运行如下指令:

mcc-m t2

得到外部应用程序t2.exe。

(4)在d:\mywork目录下,运行t2.exe,会打开DOS窗口,并获得到相应结果。

4.10 应用程序接口API

前面主要叙述MATLAB自身的各种功能和使用方法,本节主要介绍MATLAB与其他软件之间如何配合共同完成任务。

作为优秀软件,MATLAB不仅自身功能强大、环境友善、能十分有效地处理各种科学和工程问题,而且具有极好的开放性。这种开放性表现在两方面:①MATLAB适应各种科学、专业研究的需要,提供了各种专业性的工具包;②MATLAB为实现与外部应用程序的“无缝”结合,提供了专门的应用程序接口API,主要功能简述如下:

(1)编写C MEX源码程序,也就是为现有的C程序编写接口程序,使之成为MATLAB函数文件。运用这种技术,读者可以把积累的优秀的C程序改造成可在MATLAB中方便调用的指令。

(2)编写产生MAT数据文件的C源码程序,从而借助MAT文件实现MATLAB与外部应用程序的数据交换。

(3)借助MATLAB引擎技术,前台可以是各种外部应用程序编写的界面,而后台计算则可完全交由作为计算引擎(Computation Engine)的MATLAB进行。

(4)ActiveX是一种基于Microsoft Windows操作系统的组件集成协议。借助于ActiveX,开发商和终端用户就能把来自不同商家的ActiveX组件无缝地集成在自己的应用程序中,从而完成特定的目的,缩短了开发周期,有效地避免了低水平的重复开发。应用ActiveX可实现MATLAB与外部应用程序的通信。例如:①MATLAB可用作为客户,服务器是Excel;②o或者服务器是MATLAB,而客户是PowerPoint。由此产生的PPT文件,可以在放映过程中,实时地进行MATLAB调用。

(5)借助DDE技术在MATLAB与其他外部程序间进行通信。例如:①VB制作的界面借助DDE建立的对话通道调用服务器MATLAB进行计算和显示结果图形;②MATLAB以客户身份与服务器Excel建立DDE“热连接”,使MATLAB图形实时地跟随电子表格数据的改变而变化。

4.11 MATLAB用于有限元分析的简例

例4-16 一个台阶式杠杆上方固定后,在下方施以一个Y轴方向集中力,试以有限元法

求B点与C点的位移,如图4.6所示。弹性模量E1=E2=3.0×107模量单位,截面积A1=5.25面积单位和A2=3.75面积单位,长度为L1=L2=12长度单位,P=100力单位。

图4.6 问题示意

图4.7 分解示意

1)解题方法

(1)分解为两元素

我们可将台阶式杠杆先分成元素1和元素2,如图4.7所示。

(2)求元素1的刚度矩阵

〈元素1〉节点i=1,j=2╰╯3└ 2 

2┘╰╯3

2)MATLAB程序说明

(1)求元素1的刚度矩阵

(3)解出位移

(4)结论

经过MATLAB计算求解的结果,与式(4.11)的答案相符。

4.12 MATLAB用于振动台试验数据分析的简例

Fortran、Basic、C等语言在土木工程计算编程方面具有广泛的应用,但涉及矩阵理论、数值分析等问题时用上述语言编程较为繁琐。而这些问题正是MATLAB语言的强项,同时它还提供了一批功能强大的核心内部函数和工具箱函数,不需要高深的编程技巧,可以方便地解决上述问题。本节使用MATLAB语言为工具,对振动台试验数据进行处理,内容主要包括:由白噪声试验时程记录,求出振动模型各测点相对于台面的传递函数,从而得到模型的自振频率及振型;由地震波试验时程记录,经消除趋势项、滤波后,采用数值积分方法得到积分位移等,从而进一步显示MATLAB在土木工程领域的科学研究与工程计算中的价值。

4.12.1 用MATLAB求模型的传递函数

振动台试验中,通常利用白噪声试验来确定模型的自振特性。考虑到模型反馈可能使输入波信号发生畸变,因此均以层测点的白噪声反应信号对台面白噪声信号做传递函数。

传递函数又可称频率响应函数,是复数,其模等于输出振幅与输入振幅之比,表达了振动系统的幅频特性;其相角为输出与输入的相位差,表达了振动系统的相频特性。因此,利用传递函数即可作出模型加速度响应的幅频特性图和相频特性图。幅频特性图上的峰值点对应的频率为模型的自振频率;在幅频特性图上,采用半功率带宽法可确定该自振频率下的临界阻尼比;由模型各测点加速度反应幅频特性图中得到同一自振频率处各层的幅值比,再由相频特性图判断其相位,经归一化后,就可以得到该频率对应的振型曲线。

由此可见,得到模型的传递函数,是获得模型自振特性的关键。

本节采用MATLAB语言及其函数编制了求解传递函数并输出幅频、相频曲线的程序,根据作者所进行的振动台试验中白噪声试验记录,得到了试验模型的传递函数。程序如下:

该程序调用了MATLAB中的Signal Processing Toolbox中的tfe函数来求解模型的传递函数。现将此函数的输入参数按顺序作如下简要说明:①“x”为输入信号,本节中即为台面信号。②“y”为输出信号,本节中即为第七层的反应信号。③“2048”为FFT点数,可变。④“fs”为信号采用频率。⑤“2048”为窗函数的宽度。tfe函数中用的是Hanning窗(实际上,tfe函数是独立的m文件“tfe.m”,可以方便地根据需要对其进行修改,例如可以将窗函数改为Hamming窗甚至是矩形窗)。因为FFT是对有限长度内的时域信号进行计算的,意味着要对时域信号进行截断,加窗的目的是为了抑制对时域信号进行截断时造成的频率“泄露”现象,使在时域上截断信号两端的波形由突变变为光滑,在频域上压低旁瓣的高度。⑥“0”为样本混叠的点数,可变。因为一般情况下,白噪声信号的点数远大于FFT点数,此时tfe函数将信号分段,分别计算每段的自功率谱和互功率谱,最后求解传递函数时,将各段的功率谱相加。分段进行处理可以使频谱图变得平滑。若采用非零的样本混迭点数,可增加分段数,从而使频谱图变得更为平滑。⑦“mean”代表在tfe函数中调用的detrend函数将原始信号零均值化。

由上述程序得到的幅频和相频曲线如图4.8所示。

根据试验所用振动台的制造商——美国MTS公司提供的STEX 3.0程序计算所得的传递函数数据,画出的幅频和相频曲线如图4.9所示。

从图4.8和图4.9可以看出,幅频曲线两者完全类似,幅值峰值点对应的频率完全相同,峰值大小略有差异,而在经振型的归一化处理后,此差异的影响很小,具体可见表4.12。相频特性图两者有较大差异。后者计算时输入信号采用的是台面内部传感器测到的信号,作者未得到此数据,故本节程序采用的是布置在台面上的压电式传感器测到的信号。因相位与传感器工作性能、接线方向等有关,故相频特性的差异可能与此原因有关,但相频特性的差异并不影响求解振型,具体可见表4.12。

求出同一工况下其余楼层信号对台面信号的传递函数后,可以得到模型的自振特性。模型的自振周期及振型列于表4.12之中。

图4.8 由本文程序得到的幅频和相频曲线图

图4.9 根据STEX3.0计算所得传递函数数据画出的幅频、相频曲线

表4.12 模型自振周期及振型

表4.12中模型1、2层的幅值峰值点对应的相位较乱。如前所述,问题可能出在传感器工作性能、接线方向等方面。另一方面,由本节程序计算结果所得的相位变化趋势与STEX 3.0计算结果中的相位变化趋势一致。

由上述内容可认为,本节程序可用来计算传递函数,进行频谱分析,从而代替动态信号分析仪或专业软件的部分功能。

4.12.2 用MATLAB求积分位移

在振动台试验中,测量加速度比测量位移相对来说要好测一些。因此,根据模型加速度波形,求得积分位移波形,是了解模型位移反应的一个重要手段。

但是,由于仪器的误差,加速度记录波形会有一定的波形基线位移量。这对于积分运算的影响很大,使积分运算结果产生较大的偏差。因此,在用加速度波形通过二次积分求得位移波形时,必须做好消除趋势项和滤波处理。本节采用MATLAB语言及其函数编制了求解积分位移的程序,根据作者所进行的振动台试验中El Centro波作用下某一测点的加速度波形,得到了该测点的位移波形。程序如下:

该程序调用了MATLAB中的System Identification Toolbox的dtrend函数以及idfilt函数。dtrend函数用来进行数据的零均值化和消除趋势项。idfilt函数用来进行数据滤波,输入参数如下:①“dda1”为需进行滤波的数据;②“4”为滤波器的阶数;③“[0.0044 0.192]”为滤波后保留的频率的范围。该数值为标准化频率,即实际频率和采样频率的一半的比值。

由程序计算得到的积分速度和积分位移如图4.10所示。

图4.10 加速度记录、积分速度、积分位移曲线

4.12.3 小结

本节利用MATLAB为工具编写的两个程序,对振动台试验数据进行了处理,得到了模型传递函数和积分位移,可代替动态信号分析仪或专业软件的相应功能,并且可以进一步应用到其他动力试验中去。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈