MATLAB在测量数据处理中的应用.doc_第1页
MATLAB在测量数据处理中的应用.doc_第2页
MATLAB在测量数据处理中的应用.doc_第3页
MATLAB在测量数据处理中的应用.doc_第4页
MATLAB在测量数据处理中的应用.doc_第5页
免费预览已结束,剩余55页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MATLAB在测量数据处理中的应用周 娅摘要 简要介绍了MATLAB软件,结合测量数据处理介绍了平差处理中所用到的基本知识,结合自由网平差与变形分析论述了秩亏自由网和拟稳平差的原理以及几种解法的数学模型,并在MATLAB平台的基础上编写出了这几种方法的源程序。关键词 MATLAB;数据处理;秩亏自由网;拟稳平差; MATLAB in data processing of surveyingZhou YaAbstract It introduces the software named MATLAB, introduces the base knowledge of adjustment integrating data processing of surveying, discusses the principle numerical model of rank defect adjustment and quasi-stable adjustmentrank defect adjustment fromadjustment of control network and deformation analyzing writes some programs according to these methods in MATLAB.Key words MATLAB;data processing;rank defect control network;quasi-stable adjustment;目 录引言 (1)第一章 MATLAB概述 (2)1.1 MATLAB语言简介 (2)1.2 MATLAB6的特点 (4)1.3 启动方法(7)1.4 桌面平台(8)1.5 MATLAB6.5的帮助系统 (10)第二章 MATLAB程序设计基础 (11)2.1 数据类型 (11)2.1.1 常量和变量 (11)2.1.2 数字变量 (12)2.1.3 字符串 (13)2.1.4 矩阵的建立 (14)2.1.5 单元型数据 (16)2.1.6 结构型数据 (18)2.2 数值计算功能 (19)2.2.1 矩阵的基本数学运算 (19)2.2.2 矩阵的函数运算 (22)2.3 M文件 (22)2.3.1 M文件介绍 (22)2.3.2 M文件的特点 (23)2.3.3 M文件的形式 (23)2.3.4 M文件的调试 (24)2.4 MATLAB流程控制语句 (24)2.4.1 for语句 (25)2.4.2 while语句 (25)2.4.3 if-else-end语句 (26)2.4.4 switch-case语句 (27)2.5 MATLAB应用接口程序 (28)2.5.1 MEX文件 (28)2.5.2 MATLAB计算引擎 (29)2.5.3 MAT文件 (29)第三章 测量平差的方法 (30)3.1 平差计算概述 (30)3.1.1 测量数据的特性 (30)3.1.2 平差计算的数学模型 (30)3.2 秩亏自由网平差 (31)3.2.1 秩亏自由网平差原理 (31)3.2.2 伪观测法 (31)3.2.3 秩亏法方程的最小范数解 (32)3.2.4 附加条件法 (34)3.2.5 直接解法 (35)3.2.6 消去条件法 (36)3.3 自由网拟稳平差 (38)3.3.1 自由网拟稳平差原理 (38)3.3.2 拟稳平差最小范数法 (40)3.3.3 拟稳平差附加条件法 (41)3.4 位移分析 (42)3.5 变形分析 (46)3.5.1 监测网位移的参考基准 (46)3.5.2 变形分析的几个具体问题 (46)3.5.3 自由网基准解 (47)第四章 MATLAB的平差程序设计 (50)4.1 秩亏自由网水准平差 (50)4.1.1 最小范数法 (50)4.1.2 伪观测法 (53)4.1.3 附加条件法 (54)4.1.4 直接解法 (55)4.1.5 消去条件法 (57)4.2 水准网拟稳平差 (58)4.2.1 最小范数法 (59)4.2.2 附加条件法 (61)结束语(63)参考文献(64)引 言MATLAB是美国Math Work公司从1984年开始推出的一种简便的工程计算语言,是集数学、图形处理和程序语言设计与一体的著名数学软件。MATLAB已经成为线性代数、数理统计、数字信号处理、时间序列分析和动态系统仿真等高级课程的基本数学工具,已经成为一种必须掌握的基本编程语言。而在国外的研究设计单位和工业部门中MATLAB已经成为研究和解决工程问题的软件。在我国现阶段,MATLAB在仿真领域以及神经网络中的应用较为广泛。现在MATLAB已成为公认的优秀数学应用软件之一。本课题的重点亦在采用MATLAB为平台,研究该软件在测量数据处理中的应用,使其优点能为我们所利用,更好地为我们测量行业服务。结合测量平差理论做一个测量数据处理软件。其中的测量数据处理主要包括秩亏自由网平差的几种经典解法(最小范数法、伪观测法、附加条件法、直接解法、消去条件法)和自由网拟稳平差的解法(附加条件法、最小范数法)。在这些数据平差的过程中有大量的矩阵运算,采用MATLAB的程序设计语言对此类测量数据进行处理,其语言编程效率较高。1 MATLAB概述MATLAB(MATrix LABoratory)是Mathworks公司开发的一种集数值计算、符号计算和图形可视化三大基本功能于一体的,功能强大、操作简单的语言,它是为满足工程计算的要求应运而生的,经过不断的发展,目前已成为国际公认的优秀的数学应用软件之一。MATLAB系统由MATLAB内核和辅助工具箱组成。本章将从介绍MATLAB的基本构成及其工作环境的构成和使用方法开始,结合MATLAB6的数值计算和程序设计功能进行讨论,使读者对MATLAB有一个概括的认识。1.1 MATLAB语言简介如今,计算机技术已被广泛应用于各行各业,科研和工程计算领域也不例外。对于经常需要对大量数据进行分析处理或者对复杂问题进行计算求解的科研工作者和工程技术人员来说,计算机技术的引入大大降低了工作强度,使原本繁杂的工作变得简单,从而极大地提高了工作效率。随着科学研究的不断深入,以及工程应用不断地朝着专业化、精确化方向发展,科研工作者及工程技术人员对计算机技术的要求也越来越高。为了减轻科技工作者的压力,使工作人员将时间和精力尽可能多地投入到建立模型等关键性工作中,许多软件公司相继开发了一系列的数学应用软件。其中Mathworks公司发布的MATLAB软件以其强大的功能和极高的编程效率吸引了众多的用户。MATLAB是一种高度集成化的科学计算环境,是集数值计算和图形处理等功能于一体的工程计算应用软件。MATLAB不仅可以处理代数问题和数值分析问题,而且还具有强大的图形处理及仿真模拟等功能。MATLAB能够很好地帮助工程师及科学家解决实际的技术问题。MATLAB经过近16年的不断改进和完善,逐渐从众多的数学工具软件中脱颖而出,已成为公认的优秀的数学应用软件之一。首先,MATLAB具有丰富的应用功能,大量实用的辅助工具箱适合具有不同专业研究方向及工程应用需求的用户使用。其次,MATLAB的程序设计语言编程效率较高,由于MATLAB程序设计语言以矩阵作为其语言系统的最基本要素,从而极大地简化了线性运算,而线性运算是整个数值计算的基础,所以以矩阵作为基本语言要素可以提高数值计算的编程效率。MATLAB本身拥有丰富的库函数,并具有结构化的流程控制语句和运算符,用户在使用过程中能够方便自如地应用。此外,MATLAB还有较强的图形控制和处理功能,同时该软件带有的API(Application Program Interface,应用程序接口)使得用户可以方便地在MATLAB与C、Fortran等其他的程序设计语言之间建立数据通信。当然,任何事物都不是十全十美的。与C、Fortran 等传统的程序设计语言相比,MATLAB 的程序设计语言的一个显著的缺点就是循环代码执行效率较低,这是与其执行方式直接相关的,MATLAB 编写的程序在应用过程中为解释执行,即不需要编译也不生成可执行文件,而是解释一句,执行一句,其速度是可想而知的了。当然这个问题也不是不可以解决的,在下文中将看到,由于MATLAB以矩阵作为基本的程序设计语言要素,对于在C、Fortran等程序设计语言中需要使用循环来解决的问题,在MATLAB程序设计语言中巧妙地利用矩阵的特点,就可以避免使用循环代码。所以,通过对MATLAB的深入学习,提高编程技巧,完全可以做到扬长避短,并充分发挥MATLAB语言的强大功能作为一种数学应用软件,MATLAB的发展与数值计算的发展密切相关。在20世纪70年代中期,数值计算成为工程技术和科研的有效手段之一,为了适应科学技术发展的要求,美国的Cleve Moler博士及其同事共同开发了基于Fortran语言的EISPACK和LINPACK的函数库,以支持数值计算,其中EISPACK函数库是针对求解矩阵特征值问题的,而LINPACK 函数库则是针对线性方程组求解问题的,这两个函数库代表了同时代矩阵计算的最高水平,并为许多科研及工程计算人员所使用。到了20世纪70年代末,Cleve Moler博士发现在使用 和 函数库的过程中大量时间被放在了接口程序设计上,为了减少工作量,Cleve Moler博士亲自编写了EISPACK和LINPACK函数库的接口程序,并以MATLAB作为该接口程序的名字,意为矩阵实验室(Matrix Laboratory),这就是MATLAB的雏形。20世纪80年代初期,Cleve Moler与John Little等利用 语言开发了新一代的MATLAB语言,此时的MATLAB语言已同时具备了数值计算功能和简单的图形处理功能。1984年,为了推广MATLAB在实际数值计算中的应用,Cleve Moler与John Little等正式成立了Mathworks公司,把MATLAB语言推向市场,并开始了对MATLAB工具箱等的开发设计。1993年,Mathworks公司推出了基于个人计算机的MATLAB4.0版本,1995年推出了MATLAB4.2c版本,到了1997年又推出了MATLAB5.x版本(Release11),并在2000年又推出了最新的MATLAB6版本(Release 12),现在应用较为普遍的是2002年发行的MATLAB6.5版本(Release 13)。1.2 MATLAB6的特点1.开发环境与MATLAB5.x相比,MATLAB6改进了原有的系统结构,将各种对MATLAB应用提供支持的系统集成为全新的MATLAB开发环境。其中最为明显的就是集各种对MATLAB文件以及数据变量进行操作的工具以及MATLAB自身的辅助工具为一体的MATLAB桌面系统。从开始应用MATLAB到退出MATLAB,几乎所有的操作都将在桌面系统内完成。在开发环境中,MATLAB6提供了更为强大的帮助功能,几乎所有的帮助功能都以在线帮助的形式出现,同时提供了一种全新的帮助浏览器,使用户能更加方便地获得所需要的信息。当在网上使用MATLAB时,用户可以通过MATLAB6提供的工具箱路径缓存功能加快MATLAB的启动速度。为了方便数据的读取,MATLAB6提供了数据读取编辑器,以完成从MATLAB外部便捷地读取数据的功能,通过该编辑器可以实现多种数据类型的转换。为了配合新的开发环境,MATLAB6提供了一些新的函数以协助工作,如:helpbrowser、filebrowser等,同时改变了一些函数的功能,如doc、pathtool等。2.数学处理(Mathematics Features) MATLAB6在数学处理上也进行了许多新的改进,不仅增加了许多新的数学函数,也调整了部分函数的功能。 首先,MATLAB6的矩阵运算是基于LAPACK(一种大型的线性代数Fortran函数库)的,LAPACK扩展了MATLAB的计算能力,也加快了MATLAB进行大规模计算的速度。同时在MATLAB6中几乎所有的矩阵运算都会附带出计算的截断误差。 具体而言,MATLAB6增加了许多矩阵运算细节的处理,比如细化了特征值的求解,增加了一种最新的矩阵分解方法(qz)等。 对于稀疏矩阵的运算,MATLAB6提供了全新的处理方法,并对原有函数作了适当的优化,以提高其运算效率及运算能力。如增加了symmlq、minres、lsqr等函数用于迭代求解对称正定问题以及最小二乘问题,对eigs、svds等函数也做了适当的修改,使其能够调用Fortran的ARPACK函数库加快求解速度。 其次,MATLAB6通过新的基于Qhall的函数扩展了Delaunay型函数系的功能,即在MIT的FFTW函数库的基础之上重新构建了快速傅立叶变化(FFT),并且增加了许多新的微分方程的求解函数,如bvp4c、pdepe等,对于一维插值算法也做了适当的优化。同时,MATLAB6改进了quad函数的算法,并引进了新的正交化函数quadl,该函数能够更为快速、准确、稳定地处理正交问题,同时较好地处理了正交化过程中的奇异问题。在数学处理中,MATLAB6更为重要的改进是扩展了函数调用的功能,同时引入了曲线拟合以及数据统计界面,供用户在解决具体问题时使用。3.程序及数据结构(Programming and Data Types Features) 与旧的版本相比,在程序处理中, MATLAB6的一个重要的变化就是引入了函数句柄( Function Handles )的数据类型。用户可以为任何MATLAB函数创建函数句柄,并以该函数句柄作为相应函数的参照,从而方便对函数的操作。相应的,MATLAB6也提供了一系列的函数以针对函数句柄进行操作。 在程序流程控制中,MATLAB6增补了continue函数,以协助for或while语句进行循环的操作。 MATLAB6中也提供了许多程序设计的辅助函数,如beep、iskeyword、isvarname等。同时对MATLAB的类型数据作了进一步的扩充,并且取消了对M文件编辑行长的限制。 更为有意义的是MATLAB6中提供了在执行M文件之前对其进行句法分析的方法,这样可以使用户在完成程序设计之前对程序中的句法问题加以改正,从而大大地提高了M文件的编辑效率。4.图形处理(Graphics Features) MATLAB6中有一个新的对图形句柄对象属性进行设置的用户图形界面属性编辑器,该属性编辑器比MATLAB5.3中的属性编辑器功能更为全面,操作也更为方便。 MATLAB6对图形的输出也做了适当的改进,提供了更为丰富的设置属性,以提高图形输出的效果。5.三维视图(3D Visualization Features) 首先,MATLAB6对部分函数做了修改,同时也提供了一些新的图形函数,以增强MATLAB的图形处理能力,如contourslice、curf等。 其次,在MATLAB6中可以对表面(surface)、实体(path)以及图像(image)的穿透性加以设置,其穿透性范围可以从完全穿透(completely transparent)到完全不穿透(completely opaque)。 此外,MATLAB6对图形的动画处理等也做了较大的改进。6.应用程序接口(External Interfaces/API Features) 应用程序接口方面最重要的改进就是在MATLAB6中增加了与Java的接口,并为实现两者的数据交换提供了相应的函数库。 对原有的应用程序接口,MATLAB6也进行了适当的修改。7.用户图形界面(Creating Graphical User Interfaces Features) MATLAB6的用户图形界面(GUI)的设计更为灵活,对GUI编辑工具也做了相应的改进。1.3 启动方法MATLAB6.x的启动有多种方式,最常用的方法是双击系统桌面的MATLAB6.x图标,也可以在开始菜单的程序选项中选择MATLAB6.x快捷方式,还可以在MATLAB6.x的安装路径的bin子目录中双击可执行文件matlab.exe。初次启动MATLAB6.5后,将进入MATLAB6.5默认设置的桌面平台,如图:1.4 桌面平台默认设置情况下的桌面平台包括5个窗口,分别是MATLAB主窗口、命令窗口、历史窗口、当前目录窗口和工作间管理窗口。主窗口包含了其它的窗口,它不能进行任何计算任务的操作,只用来进行一些整体的环境参数的设置。它主要包括6个下拉菜单和10个按钮控件。 新建或打开一个MATLAB文件; 剪切、复制或粘贴已选中的对象; 撤销或恢复上一次操作; 打开Simulink主窗口; 打开MATLAB帮助系统; 设置当前路径。命令窗口中“”为运算提示符,表示MATLAB正处在准备状态。当在提示符后输入一段运算式并按Enter键后,MATLAB将给出计算结果,然后再次进入准备状态。历史窗口在默认设置下,保留自安装起所有命令的历史记录,并表明使用时间,这方便了使用者的查询。而且双击某一行命令,即在命令窗口中执行该行命令。在当前目录窗口中,可显示或改变当前目录,还可以显示当前目录下的文件并提供搜索功能。工作间管理窗口中显示了目前内存中的MATLAB变量的变量名、数学结构、字节数以及类型等信息并可以在此对变量进行编辑。1.5 MATLAB6.5的帮助系统MATLAB的帮助系统相当的完善,它大致可分为三大类:1、联机帮助系统通过主窗口中的按钮,或help下拉菜单前四个选项中的一个,或在命令行中执行helpwin、helpdesk或doc命令都可以进入联机帮助系统。这是一个类似于windows操作系统帮助文件的帮助系统,用户可以选择、搜索相关的主题。2、命令窗口查询帮助系统用户可以使用命令窗口查询帮助,主要的帮助命令有:help:会显示帮助系统的所有项目;help+函数(类)名:可以辅助用户深入学习函数及用法;lookfor:用于查询根据关键字搜索道的相关函数;exist:变量的检验函数;what:目录中文件列表;who:内存变量列表;whos:内存变量的详细信息;which:确定文件位置。3、联机演示系统单击help菜单中的Demos选项,或在命令窗口中输入 demos可进入MATLAB的演示界面。用户可以在左侧项目栏中选择要演示的内容来运行。2 MATLAB程序设计基础2.1 MATLAB数据类型MATLAB的数据类型中我们比较常用的主要包括:数字、字符串、矩阵(数组)、单元型数组和结构型数据等。2.1.1 常量和变量1.常量常量是程序设计的基本元素,MATLAB语言也可以定义常量。值得注意的是MATLAB预定义了一些常量,在定义常量或变量时应注意避免与常量名相同,以免改变这些常量的值。这些常量有:常量名常量值常量名常量值I,j虚数单位,定义为Realmin最小浮点数,Pi圆周率Realmax最大浮点数,Eps浮点运算相对精度Inf无穷大NaN表示不定植2.变量与常规的程序设计语言不同,MATLAB语言不要求对所使用变量事先声明和指定变量类型,它会自动根据赋值和变量进行的操作确定变量的类型,并当变量重复时以新值代替旧值。变量命名时区分大小写,且必须以字母开头,变量名中可包含字母、数字、下划线,但长度不能超过31位。MATLAB的变量也存在作用域的问题,在一般情况下,MATLAB把所有变量视为局部变量,若要定义全局变量需在变量前加关键字global。2.1.2 数字变量1. 数字运算MATLAB是以矩阵为基本运算单元的,而构成数值矩阵的基本单位是数字。对于简单的数字运算,可以直接在命令窗口中以平常惯用的形式输入。例如258和369的乘积计算时可直接输入: 258*369ans = 95202这里ans是当前的计算结果,若用户没有对表达式设定变量,MATLAB将当前结果赋给ans变量。用户也可以输入: x=258*369x = 95202此时MATLAB把计算结果赋给了指定的变量x。对于复杂的数字运算,最好的办法是先定义变量,再由变量表达式计算得到结果。2. 数字的输入输出格式MATLAB语言中数值有多种显示形式。在缺省情况下,若数据为整数,则就以整型表示;若为实数,则以保留小数点后4位的浮点数表示。在MATLAB语言中所有的数据均按由IEEE浮点标准规定的长型格式存储,数值的有效范围为10-30810308。MATLAB的输出格式可由format命令控制。但要注意的是,format命令只是影响在屏幕上的显示结果,而不影响其在内部的存储和运算,而MATLAB的数据存储和运算总是以双精度进行的。下面以为例来具体展示各种不同格式对显示的影响。Short 1.4142Long 1.41421356237310Hex 3ff6a09e667f3bcdBank 1.41+ +Short e 1.4142e+000Long e 1.414213562373095e+000Short g 1.4142Long g 1.4142135623731Rational 1393/985说明:对于长型格式显示而言,15位后的显示数字不一定正确,但这只是对于显示而言的,数据在计算机内部的二进制存储是准确的。对于短格式输出时,若数值大于100000000或小于0.001时,MATLAB会自动加上比例因子。例如: x=0.000991x = 9.909999999999999e-0042.1.3 字符串 字符和字符串运算是各种高级语言必不可少的部分,MATLAB作为一种高级的数学计算语言,字符串运算功能同样是很丰富的,特别是在MATLAB增加了自己的符号运算工具箱(Symbolic toolbox)之后,字符串函数的功能进一步得到增强。在MATLAB中,字符串是用单引号输入和赋值,字符串的每个字符(包括空格)都是字符数组(或矩阵)中的一个元素,字符串和字符数组(或矩阵)基本上是等价的。例如,我们定义字符串s为“Hello world!”: s=Hello world!s =Hello world! size(s) %size()函数返回数组或矩阵的维数ans = 1 12 %s将s视为112的矩阵2.1.4 矩阵的建立1. 一般矩阵从结构上讲,矩阵(数组)是MATLAB数据存储的基本单元;但从运算的角度看,矩阵形式的数据还可以有多种运算形式,例如向量运算、矩阵运算及数组运算等。从键盘上直接输入矩阵是最方便、最常用和最好的创建数值矩阵的方法,尤其适合较小的简单矩阵。输入矩阵时要以“ ”为标识,即矩阵的元素应在“ ”内部,此时MATLAB才将其识别为矩阵。矩阵的同行元素之间可由空格或“,”分隔,行与行之间要用“;”或回车符分隔。矩阵大小可不预先定义。矩阵元素可为运算表达式。若不想获得中间结果,可以“;”结束。无任何元素的空矩阵亦合法。例如:生成矩阵,我们可直接输入: A=1 2,3;4 5 6;7,8,9A = 1 2 3 4 5 6 7 8 9当矩阵的规模比较大,直接输入法就显得笨拙,出现差错也不易修改。为了解决此问题,可以利用M文件的特点将所要输入的矩阵按格式先写入到一个文本文件中,并将此文件以m为其扩展名,即为M文件。在MATLAB命令窗中输入M文件,则所要输入的大型矩阵就被输入到内存中。例如:编制一名为eg1.m的M文件,内容如下。%eg1.m%创建一个M文件,假设一个矩阵A=1 2,3;4 5 6;7,8,9在MATLAB命令窗口中输入: eg1A=1 2,3;4 5 6;7,8,9A = 1 2 3 4 5 6 7 8 9Size(A)ands = 3 3说明: 在M文件中%符号后面的内容只起注释作用,将不被执行。例中的size函数为求矩阵的维数函数,结果表明矩阵为33阶的矩阵。2. 特殊矩阵MATLAB语言中内置了许多特殊的矩阵生成函数,通过这些函数,可以自动生成一些具有某种特殊性质的矩阵。其中一部分特殊矩阵是在数学上有特殊性质的矩阵,如下表:MATLAB语言的数学特殊矩阵特殊矩阵函数名特殊矩阵名特点company友矩阵多项式的特阵矩阵galleryHigham试验矩阵多种测试矩阵hankelHankel矩阵一种对称阵magic魔方阵各方向元素值和相等的方阵vanderVandermonde阵Vandermonde行列式wilkinsonWilkinson 阵一种特征值测试矩阵2.1.5 单元型数据单元型变量是MATLAB语言中较为特殊的一种数据类型。从本质上讲,单元型变量实际上是一种以任意形式的数组为元素的多维数组。单元型变量的定义可以有两种方式,一种是用赋值语句直接定义,另一种是由cell函数预先分配存储空间,然后,对单元元素逐个赋值。在赋值过程中,与在矩阵的定义中使用中括号不同,单元型变量的定义需要使用大括号,而元素之间由逗号隔开。例如: A=1, 2; 3, 4; B=1:4, A,abcdB = 1x4 double 2x2 double abcdMATLAB语言会根据显示的需要决定,是否将单元元素完全显示,还是只显示存储量来代替。此外,可以对单元的元素直接赋值,即将单元型变量的下标用大括号索引,上面例中的单元型变量B还可以由以下方式定义。例如: B1, 1=1:4; B1, 2=A; B1, 3=abcd;单元型变量的引用应当采用大括号作为下标的标识,而小括号作为下标标识时将只显示该元素的压缩形式。例如: B2ans = 1 2 3 4 B(2)ans = 2x2 double另外,单元型变量的元素不是以指针方式保存的,如上例中,改变其元素原变量矩阵A的值并不等于改变单元型变量B的第二个元素的值。单元型变量与矩阵的另一区别就是,单元型变量自身可以嵌套,也就是说单元型变量的元素还可以是单元型变量,而一般情况下,矩阵的元素不能是矩阵。例如: C=1:4, A, BC = 1x4 double 2x2 double 1x3 cell C33 %嵌套型单元型变量元素的引用ans =abcd2.1.6 结构型数据结构型变量是另一种可以将不同类型数据结合在一起的MATLAB语言数据类型。与单元型变量的不同在于结构型变量是以指针方式来传递数据的。结构型变量的作用相当于数据库中的记录,可以存储一系列相关的数据。结构型变量在MATLAB中的定义有两种方法,其一是直接赋值定义,另一种是由函数struct定义。直接赋值时,应当指出结构中的属性名,并以指针操作符“.”来连接结构型变量名与属性名。对该属性直接赋值,MATLAB语言会自动生成结构型变量,并使该结构型变量包含所定义的属性。结构型变量也可以构成数组,即结构型数组它是对给定变量下标赋值。在同一结构型数组里,不同的元素可以赋以不同类型的值,也就是说结构型数组对元素属性不要求完全一致,这与其他的程序设计语言是不同的,也正显示了MATLAB语言的灵活性。当结构型变量元素多于一个时,键入变量名将不能完全显示各元素相应的值,而只能够反映该结构型数组的属性结构,即显示各属性名。结构型数组赋值时,也可以只对部分元素赋值,这时未赋值的元素将被赋以空矩阵,并可以随时对该数组加以修改或添加。在MATLAB语言中用函数struct来定义结构型变量,其调用格式如下:结构型变量名=struct(元素名1,元素值1,元素名2,元素值2,)例如以下是结构体A的定义: A.a1=abcd; A.a2=15; A.a3=1 2;3 4; AA = a1: abcd a2: 15 a3: 2x2 double使用该函数将会定义结构型变量的各元素,并相应的赋以元素值。另外,与单元型变量相似,结构型变量也可以嵌套定义。结构型变量的相关函数如下表:函数名说明函数名说明struct创建或转换结构型变量rmfield删除结构型变量中的属性getfield得到结构型变量的属性值isfield判断是否为结构型变量的属性setfield设定结构型变量的属性值isstruct判断变量是否为结构型变量2.2 数值计算功能2.2.1 矩阵的基本数学运算矩阵的基本数学运算包括矩阵的四则运算、与常数的运算、逆运算、行列式运算、幂运算、指数运算、对数运算和开方运算等。1.矩阵与常数间运算常数与矩阵的运算即是同此矩阵的各元素之间进行运算,如数加是指每个元素都加上此常数,数乘即是每个元素都与此数相乘。但当进行数除时,常数通常只能做除数。2.矩阵的四则运算MATLAB是以(复)矩阵为运算单元的,因此,矩阵的四则运算格式与数字的运算是相同的,在具体的运算中还有一些具体的要求。矩阵的加减法使用“+”、“-”运算符,格式与数字运算完全相同,但要求加减的两矩阵是同阶的。矩阵的乘法使用运算符“*”,要求相乘的双方要有相邻公共维,即若A为ij阶,则B必须为jk阶时,A和B才可以相乘。例如: A=1 2,3;4 5 6;7,8,9; B=2 3 4 6 ;5 3 4 8; 7 5 9 6; C=A*B+BC = 35 27 43 46 80 60 94 108 124 95 150 166矩阵的除法可以有两种形式:左除“”和右除“/”,在传统的MATLAB算法中,右除是要先计算矩阵的逆再做矩阵的乘法,而左除则不需要计算矩阵的逆而直接进行除运算。通常右除要快一点,但左除可以避免被除矩阵的奇异性所带来的麻烦。在MATLAB6.0中两者的区别不太大。3.矩阵的逆运算矩阵的逆运算是矩阵运算中很重要的一种运算。它在线性代数及计算方法中都有很多的论述。而在MATLAB中众多的复杂理论只变成了一个简单的函数inv。例如: A=1 0 2;4 2 1;3 1 2; inv(A)ans = -3 -2 4 5 4 -7 2 1 -2对于奇异矩阵,求其广义逆的函数为pinv。例如: C=2 -1 -1;-1 2 -1;-1 -1 2; pinv(C)ans = 0.2222 -0.1111 -0.1111 -0.1111 0.2222 -0.1111 -0.1111 -0.1111 0.22224.矩阵的行列式运算矩阵的行列式的值可由det函数计算得出。例如: C=2 -1 -1;-1 2 -1;-1 -1 2; det(C)ans = 05.矩阵的幂运算、指数运算、对数及开方运算矩阵的幂运算的形式同数字的幂运算的形式相同,即用算符“”来完成。矩阵的幂运算在计算过程中与矩阵某种分解有关,计算所得值并非是矩阵每个元素的幂值。例如: C=2 -1 -1;-1 2 -1;-1 -1 2; C2ans = 6 -3 -3 -3 6 -3 -3 -3 6矩阵的指数运算的最常用的命令为expm,其他的命令还有expm1、expm2和expm3。其中expm1是由Pade近似计算矩阵指数,expm2是由Taylor级数计算矩阵指数,expm3是由特征值法计算矩阵指数。而expm函数使用的方法与expm1相同。矩阵的对数运算由函数logm实现。矩阵的开方运算函数为sqrtm。这些函数的用法与幂运算相同。2.2.2 矩阵的函数运算矩阵的函数运算是矩阵运算中最实用的部分,它主要包括特征值的计算、奇异值的计算、条件数、各类范数、矩阵的秩与迹的计算和矩阵的空间运算等。数值特征值函数eig函数,此函数是算法自适应的,它会根据不同的已知条件选择合适的算法计算。例如:e=eig(X) 返回方阵X的特征值向量e=eig(A,B) 返回一个包括矩阵A和B的广义特征值的向量下面列举出了在MATLAB中的一部分函数函数名说明函数名说明norm矩阵及向量的范数函数trace矩阵的迹函数inv矩阵求逆函数pinv伪逆函数svd奇异值分解函数eigs局部特征值函数lscov最小二乘法函数cond矩阵的条件数函数2.3 M文件2.3.1 M文件介绍所谓的M文件就是由MATLAB语言编写的可在MATLAB语言环境下运行的程序源代码文件。在M文件中,按照MATLAB语言规则将命令及MATLAB内置函数有机地组合在一起,从而实现强大的功能。MATLAB语言中的M文件可以分为脚本文件和函数文件两种,M文件不仅可以在MATLAB的程序编辑器中编写,也可以在其他的文本编辑器中编写,并以“.m”为扩展名加以存储。2.3.2 M文件的特点MATLABM实质上是一种解释性语言,就MATLAB(MATLAB.exe)本身来说,它并不能做任何事情,它就像DOS操作系统的一样,本身没有实现功能而只对用户发出的指令起解释执行的作用。用户可以把所要实现的指令罗列编制成文件即M文件,在统一送入MATLAB系统中解释运行。也就是说,M文件其实是一个像命令集一样的ASCII(纯文本)码文件。因此,M文件语法简单,调试容易,人机交互性强。用户可以使用任何字处理软件对其进行编写和修改。正是M文件的这个特点造就了MATLAB强大的可开发性和可扩展性。2.3.3 M文件的形式M文件有两种形式,命令式(Script)和函数式(Function)。命令式文件就是命令行的简单叠加,MATLAB会自动按顺序执行文件中的命令,它解决了用户在命令窗中运行许多命令的麻烦,避免了用户做许多重复性的工作。命令式文件的运行相当于在命令窗口中逐行输入并运行命令,因此,用户在编制此类文件时,需要把所要执行的命令按行编辑到指定的文件中,且变量不需预先定义,也不存在文件名对应问题。但需要注意以下几点:标点符号的运用要恰到好处。建立好的书写风格,保持程序的可读性。不要忘记m为文件的扩展名,在低版本的MATLAB中,还要注意文件名不可超过8位,否则调用时可能会出现问题。函数式文件主要用以解决参数传递和函数调用的问题,它的第一句以function语句为引导。需要注意的是命令式M文件在运行过程中可以调用MATLAB工作域内所有的数据,而且,所产生的所有变量均为全局变量,除特殊声明的变量。2.3.4 M文件的调试在MATLAB的程序编辑器中也提供相应的程序调试功能。M文件一般有语法错误和执行错误两种。语法错误发生在M文件程序代码的解释过程中,一般是由函数参数输入类型有误或者矩阵运算阶数不符等造成的。执行错误则是由于在程序运行过程中出现溢出或死循环等造成的,这些错误均与程序本身有关,并且较难发现和解决。一般来讲,在程序设计过程中应当避免出现NaN、Inf或空矩阵等,这些是程序运行中最容易出现问题的地方,避免的方法就是在可能出现上述异常数值的地方提供控制语句来识别,并采用其他的方法来处理。语法错误较好识别,因为MATLAB会给出相应的错误信息,以方便用户的检查和定位。利用调试菜单对M文件进行调试。主要的调试函数由dbstatus、dbstop、dbtype、以及dbstack等。函数dbstop用于在M文件中设置断点,其调用格式为:dbstop inat函数dbstatus的作用是显示断点信息,函数dbtype作用是显示M文件文本(包括行号),函数dbstep的作用是从断点执行M文件,函数dbstack的作用是显示M文件执行时调用的堆栈等,通过dbup/dbdown函数可以实现工作空间的切换。、btupeus2.4 MATLAB流程控制语句如其他的程序设计语言一样,MATLAB语言也给出了丰富的流程控制语句,以实现具体的程序设计。MATLAB语言的流程控制语句主要有for、while、if-else-end及switch-case等4种语句。2.4.1 for语句for循环语句是流程控制语句中的基础,使用该循环语句可以以指定的次数重复执行循环体内的语句。for循环语句的调用形式为:for循环控制变量=循环体end例如:for i=1:1:12 s=s+1;end在上例中,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论