Matlab编程及系统仿真调好.ppt_第1页
Matlab编程及系统仿真调好.ppt_第2页
Matlab编程及系统仿真调好.ppt_第3页
Matlab编程及系统仿真调好.ppt_第4页
Matlab编程及系统仿真调好.ppt_第5页
已阅读5页,还剩319页未读 继续免费阅读

下载本文档

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

文档简介

1,Matlab编程及系统仿真,华中科技大学文华学院 控制系 余愿 信息学部 B313,2,上课认真听讲 课后认真复习、加以实践 独立完成不定期课堂练习,不抄袭 上机是学习本课程的重要环节,珍惜上机的时间,学时安排:32(讲课)/8(实验) 成绩 = 平时成绩 + 考试成绩 30% 70%,3,MATLAB语言 控制系统计算机仿真 Simulink动态仿真集成环境 基于MATLAB的控制系统分析与设计,本书内容:,4,第一章 绪论,1.1系统建模与仿真,1.2 Matlab相关知识简介,5,1.1系统建模与仿真,1.1.1 系统、模型、仿真的基本概念 1.1.2 仿真软件的发展状况及应用,6,1.1.1系统、模型、仿真的基本概念,系统:系统是客观世界中实体与实体之间相互作用、相互依赖所构成的具有某种特定功能的有机体。 特点:系统作为一个整体存在,各个部分、元素之间相互联系、不可分割。,7,模型:系统模型是对实际系统的一种抽象,是对系统本质(或是系统的某种特性)的一种描述。模型可视为对真实世界中的物体或过程的信息进行形式化的结果。 特点:模型具有与系统相似的特性,可以以各种形式给出我们感兴趣的信息。 实体模型:与实物按一定比例制作的物理模型,如船模 数学模型: 原始系统数学模型:对系统的原始数学描述,如加速度、 概率密度函数等。 仿真系统数学模型:适合在计算机上演算的数学模型。主要是根据计算机的运算特点、仿真方式、计算方法、精度要求将原始数学模型转换为计算机程序。,1.1.1系统、模型、仿真的基本概念,8,1.1.1系统、模型、仿真的基本概念,仿真:以相似性原理、控制论、信息技术及相关领域的有关知识为基础,以计算机和各种专用物理设备为工具,借助系统模型对真实系统进行试验研究的一门综合性技术。,9,仿真的作用: 仿真技术具有很高的科学研究价值和巨大的经济利益。由于仿真技术的特殊功效,特别是安全性和经济性,使得仿真技术得到广泛的应用。首先由于仿真技术在应用上的安全性,使得航空、航天、核电站等成为方技术最早的和最主要的应用领域。,1.1.1系统、模型、仿真的基本概念,10,1.1.2 仿真软件的发展状况及应用,仿真软件: 仿真软件是一类面向仿真用途的专业软件,它可能是面向通用的仿真,也可以是面向某个领域的仿真。功能如下: (1)为仿真提供算法支持。 (2)模型描述,用来建立计算机仿真模型。 (3)仿真实验的执行和控制。 (4)仿真数据的显示、记录和分析。 (5)对模型、实验数据、文档资料和其他仿真信息的存储、检索和管理(即用于仿真数据信息管理的数据库系统)。,11,1.1.2 仿真软件的发展状况及应用,根据软件功能,仿真软件可分为以下三个层次: (1)仿真程序库:有一组完成特定功能的程序组成的集合,专门面向某一问题或某一领域。它可能是用通用的语言(C+、FORTRAN等)开发的程序软件包,也可能是依附于某种集成仿真环境的函数库或模块库。 (2)仿真语言:多属于面向专门问题的高级语言,它是针对仿真问题,在高级语言的基础上研制的。 (3)集成仿真环境:它是一组用于仿真的软件工具的集合,包括设计、分析、编制系统模型、编写仿真程序、创建仿真模型,运行、控制、观察仿真实验,记录仿真数据,分析仿真结果,校验仿真模型等。,12,1.1.2 仿真软件的发展状况及应用,计算机仿真的一般过程: 第一步:根据仿真目的确定仿真方案 根据仿真目的确定相应的仿真结构和方法,规定仿真的边界条件与约束条件。 第二步:建立系统的数学模型 根据系统的先验知识、实验数据及机理研究,按照物理原理或者采用系统辨识的方法,确定模型的类型、结构及参数。要确保模型的准确性和经济性。,13,第三步:建立仿真模型 根据数学模型的形式、计算机类型、采用的高级语言或其它仿真工具,将数学模型转换为能在计算机上运行的程序或其它类型,获得系统的仿真模型。 第四步:实验 设定实验环境、条件和记录数据,进行实验,并记录数据。 第五步:进行仿真实验并输出仿真结果 通过实验对仿真系统模型及程序进行校验和修改,然后按系统仿真的要求输出仿真结果。,1.1.2 仿真软件的发展状况及应用,14,15,计算机仿真技术发展阶段: 1.硬件发展,1.1.2 仿真软件的发展状况及应用,模拟计算机 - 数字计算机 - 使用基于数字计算机的仿真软件,说明:模拟计算机即模拟电子计算机,其各个主要部件的输入量及输出量都是连续变化着的电压、电流等物理量。模拟计算机由若干种作用及数量不同的积分器、加法器、乘法器、函数发生器等部件组成、按照待研究问题的数学模型把一个部件的输出端与另一个或几个部件的输入端连接起来,用整个计算机的输出量与输入量之间的数学关系模拟所研究问题的客观过程。,1.硬件发展,16,2.软件发展,1.1.2 仿真软件的发展状况及应用,软件包(software package) 类似windows或MATLAB工具箱中的文件夹。包括一个或一个系列具有一定功能的程序。软件包由一个基本配置和若干可选部件构成。,早期的数学软件包:针对数值计算 连续系统仿真语言CSSL(Continuous System Simulation Langusge) 连续系统建模语言CSMP( Continuous System Modeling Program) 微分分析器置换语言DARE(Differential Analyzer Replacement),17,1.1.2 仿真软件的发展状况及应用,ACSL仿真语言 需模型文件 提供命令进行仿真、分析 直接调用FORTRAN 提供系统模块,MATLAB/SIMULINK 免费高功能仿真软件,18,1.2 Matlab相关知识简介,1.2.1 Matlab的发展历程 1.2.2 Matlab语言的特色 1.2.3 Matlab的安装 1.2.4 Matlab基础操作,19,Cleve Moler和John Litter等人成立了一个名叫The MathWorks的公司,于1984年推出了第一个MATLAB的商业版,该版本已经用C语言作出了修改。,1.2.1 MATLAB的发展历程,1980年,美国新墨西哥州大学计算机主任Cleve Moler在讲授线性代数课程时,发现了用其他高级编程语言编程极为不便,便构思开发了MATLAB(即Matrix Laboratory ,意为“矩阵实验室”),用Fortran语言编写了集命令翻译、科学计算于一身的一套交互式软件系统。,早期只能做矩阵运算,内部数十个函数,简单的绘图功能。其后又增添了丰富多彩的图形图像处理、多媒体功能、符号运算和它与其他流行软件的接口功能,使得 Matlab 的功能越来越强大。,20,Matlab的发展 1984年,Matlab 1.0版 (DOS版,182K,20来个函数) 1992年,Matlab 4.0版(93年推出Windows版本) 1994年,Matlab 4.2, 1999年,Matlab 5.3 2000年,Matlab 6.0, 2002年,Matlab 6.5 2004年,Matlab 7.0, 2006年,Matlab2006a 2007年,Matlab2007a、b 2008年,Matlab2008a、b 最新版Matlab2011b(7.12),目前,Matlab 已经成为国际上最流行的科学与工程计算的软件工具,它已经不仅仅是一个“矩阵实验室”了,而成为了一种具有广泛应用前景的全新的计算机高级编程语言了,有人称它为“第四代”计算机语言。 就影响而言,至今仍然没有一个别的计算软件可与 Matlab 匹敌。,21,Matlab是一种广泛应用于工程计算及数值分析领域的新型高级语言,自1984年由美国 MathWorks 公司推向市场以来,历经二十多年的发展与竞争,现已成为国际公认的最优秀的工程应用开发环境。Matlab功能强大、简单易学、编程效率高,深受广大科技工作者的欢迎。,在欧美各高等院校,Matlab已经成为线性代数、自动控制理论、数字信号处理、时间序列分析、动态系统仿真、图像处理等课程的基本教学工具,成为本科生、硕士生以及博士生必须掌握的基本技能。,22,数值计算功能,Matlab是一个交互式软件系统 给出一条命令,立即就可以得出该命令的结果,Matlab以矩阵作为基本单位,但无需预先指定维数(动态定维) 按照IEEE的数值计算标准进行计算 提供十分丰富的数值计算函数,方便计算,提高效率 Matlab命令与数学中的符号、公式非常接近,可读性强,容易掌握,符号运算功能,和著名的 Maple 相结合,使得 Matlab 具有强大的符号计算功能,绘图功能,Matlab 提供了丰富的绘图命令,能实现一系列的可视化操作,1.2.2 Matlab的语言特色,23,24,1.2.3 Matlab的安装,硬件要求 x86: 软件要求 Windows: Linux: Adobe acrobat reader,25,学习途径,参考书目: 基于MATLAB、Simulik的系统仿真技术与应用 薛定宇 学习网站: 1.Matlab官方网站: 2.Matlab中国:/ 3.MATLAB中文爱好者论坛:/(推荐) 4.Matlab中文论坛:/,26,命令窗口,当前工作目录,当前工作空间,输入命令的历史记录,命令 提示符,27,1.2.4 Matlab基础操作,一、MATLAB语言的显著特点 1、具有强大的矩阵运算能力:Matrix Laboratory(矩阵实验室),使得矩阵运算非常简单。 2、是一种演算式语言 MATLAB的基本数据单元是既不需要指定维数,也不 需要说明数据类型的矩阵(向量和标量为矩阵的特例), 而且数学表达式和运算规则与通常的习惯相同。 因此MATLAB语言编程简单,使用方便。 例 exp2_1.m,28,二、MATLAB命令窗口 1、启动MATLAB命令窗口 计算机安装好MATLAB之后,双击MATLAB图标,就可以进入命令窗口,此时意味着系统处于准备接受命令的状态,可以在命令窗口中直接输入命令语句。 MATLAB语句形式 变量表达式; 通过等于符号将表达式的值赋予变量。当键入回车键时,该语句被执行。语句执行之后,窗口自动显示出语句执行的结果。如果希望结果不被显示,则只要在语句之后加上一个分号(;)即可。此时尽管结果没有显示,但它依然被赋值并在MATLAB工作空间中分配了内存。,29,2、命令行编辑器 (1)方向键和控制键可以编辑修改已输入的命令 :回调上一行命令 :回调下一行命令 (2)多行命令() 如果命令语句超过一行或者太长希望分行输入,则可以使用多行命令继续输入。 S=1-12+13+4+ 9-4-18;,30,三、简单的数学运算(例exp2_2.m) 1、常用的数学运算符 ,*(乘),/(右除),(左除),(幂) 在运算式中,MATLAB通常不需要考虑空格;多条命令可以放在一行中,它们之间需要用分号隔开;逗号告诉MATLAB显示结果,而分号则禁止结果显示。 2、常用数学函数 abs,sin,cos,tan,asin,acos,atan,sqrt,exp, imag,real,sign,log,log10,conj等 教材P16见表1-3,31,四、MATLAB的工作空间 1、MATLAB的工作空间包含了一组可以在命令窗口中调整(调用)的参数 who:显示当前工作空间中所有变量的一个简单列表 例如:who 得到结果: your variable are: a ans b c d whos:则列出变量的大小、数据格式等详细信息 clc:清屏,清除命令窗口中的内容,不能删除变量,32,clear :清除工作空间中所有的变量 clear 变量名:清除指定的变量,2、退出工作空间 quit 或 exit,33,五、文件管理 文件管理的命令,包括列文件名、显示或删除文件、显示或改变当前目录等。(what、dir、type、delete、cd、which) what:显示当前目录下所有与matlab相关的文件及它们的路径。 dir:显示当前目录下所有的文件 which:显示某个文件的路径 cd path:由当前目录进入path目录 cd :返回上一级目录 cd:显示当前目录 type filename:在命令窗口中显示文件filename delete filename:删除文件filename,34,六、使用帮助 1、help命令,在命令窗口中显示 MATLAB的所有函数都是以逻辑群组方式进行组织的,而MATLAB的目录结构就是以这些群组方式来编排的。 help matfun :矩阵函数数值线性代数 help general:通用命令 help graphics:通用图形函数 help elfun:基本的数学函数 help elmat:基本矩阵和矩阵操作 help datafun:数据分析和傅立叶变换函数 help ops:操作符和特殊字符,35,help polyfun:多项式和内插函数 help lang:语言结构和调试 help strfun:字符串函数 help control:控制系统工具箱函数 2、helpwin:帮助窗口 3、helpdesk:帮助桌面,浏览器模式 4、lookfor命令:返回包含指定关键词的那些项 5、demo:打开示例窗口,36,第二章 Matlab基础,37,2.1 数值计算 2.2 符号运算 2.3 绘图功能 2.4 程序设计,38,2.1 数值计算,2.1.1 数值类型 变量命名 数据显示 复数和复数矩阵 2.1.2 矩阵运算 创建矩阵 矩阵操作 矩阵运算 向量运算 多项式处理 2.1.3 数据分析与统计 2.1.4 函数方程 2.1.5 MATLAB解方程,39,变量命名 (1)基本的命名规则: 变量名必须是不包含有空格的单个词; 变量名最多不超过19个字符,第19个字符之后的字符将被忽略; 变量名必须以字母打头,之后可以是任意字符、数字或下划线; 变量名区分大小写。 M-book1 1_a M inute,2.1.1 数值类型,40,(2)变量操作 在命令窗口中,同时存储着输入的命令和创建的所有变量值,它们可以在任何需要的时候被调用。如要察看变量a的值,只需要在命令窗口中输入变量的名称即可: a (3)特殊变量,2.1.1 数值类型,41,Matlab中的特殊变量,42,MATLAB命令语句能即时执行,它不是输入完全部MATLAB命令语句经过编译、连接形成可执行文件后才开始执行,而是每输入完一条命令,MATLAB就立即对其处理,并得出中间结果,完成了MATLAB所有命令语句的输入,也就完成了它的执行,直接便可得到最终结果。例如 a=5; b=6; c=a*b,结果显示 c= 30,43,MATLAB语句的间隔符:分号 间隔符的作用:当有多个命令输入时,不立即显示运行的中间结果 MATLAB语句的结束符:逗号或回车 结束符的作用:立即显示本条命令的结果,44,任何MATLAB的语句的执行结果都可以在屏幕上显示,同时赋值给指定的变量,没有指定变量时,赋值给一个特殊的变量ans,数据的显示格式由format命令控制。 format只是影响结果的显示,不影响其计算与存储;MATLAB总是以双字长浮点数(双精度)来执行所有的运算。 format命令调用格式: format 控制参数,数值显示格式,45,format命令的控制参数,46,复数和复数矩阵,MATLAB的矩阵元素可以是复数或复数表达式,在matlab 中,用i或j字元来表示虚部。 x=1-2*i 注意是2*i而不是2i real(x) 列出实部 imag(x) 列出虚部 conj(x) 计算共轭复数 abs(x) 计算复数大小 angle(x) 计算复数向量的夹角(弧度表示) y=exp(x) 以指数方式表示一个复数,47,2.1.2 矩阵运算,创建矩阵 1直接输入法 最简单的建立矩阵的方法是从键盘直接输入矩阵的元素。具体方法如下:将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分隔,不同行的元素之间用分号分隔。 2利用M文件建立矩阵 对于比较大且比较复杂的矩阵,可以为它专门建立一个M文件。后面会通过一个简单例子来说明如何利用M文件创建矩阵。,48,矩阵生成不但可以使用纯数字(含复数),也可以使用变量(或者说采用一个表达式)。,y=2,4,5; 3 6 8 y= 2 4 5 3 6 8,a=1; b=2; c=3; x=5 b c; a*b a+c c/b x= 5.0000 2.0000 3.0000 2.0000 4.0000 1.5000,例2-1 在命令窗口中直接输入矩阵,z=1,4,1+2*i z= 1.0000 4.0000 1.0000+2.0000*i,49,例2-2 利用M文件建立mymatrix矩阵。 启动有关编辑程序或MATLAB文本编辑器,并输入待建矩阵: 把输入的内容以纯文本方式存盘(设文件名为mymatrix.m)。 在MATLAB命令窗口中输入mymatrix,即运行该M文件,就会自动建立一个矩阵,可供以后使用。,50,3建立大矩阵 大矩阵可由方括号中的小矩阵或向量建立起来。 4利用冒号表达式建立一个向量 冒号表达式可以产生一个行向量,一般格式是 e1:e2:e3 其中,e1为初始值,e2为步长(可以为负数),e3为终止值。 例如:a=1:2:10 a= 1 3 5 7 9,51,5. 使用函数产生矩阵 用linspace函数产生行向量 其调用格式为: linspace(a,b,n) 其中,a和b是生成向量的第一个和最后一个元素,n是元素总数,缺省值为100。 例如:a=linspace(1,10,10) a= 1 2 3 4 5 6 7 8 9 10 显然,linspace(a,b,n)与a:(b-a)/(n-1):b等价。,52,用logspace函数产生行向量 其调用格式为: a=logspace(a,b,n) 在对数空间上,行矢量的值从10a到10b,数据个数为n,缺省n为50。这个指令为建立为对数频域轴坐标提供了方便。 例如:a=logspace(1,3,3) a= 10 100 1000,53,一些常用的特殊矩阵 单位矩阵:eye(m,n); eye(m) 零矩阵:zeros(m,n); zeros(m) 一矩阵:ones(m,n); ones(m) 对角矩阵:对角元素向量 V=a1,a2,an A=diag(V) 随机矩阵:rand(m,n)产生一个mn的0,1均匀分布的随 机矩阵 伴随矩阵:compan(p),其中p=1,a1,a2,an为多项式 系数组成的向量 上三角矩阵:triu(A) 下三角矩阵:tril(A),54,空矩阵 当一操作无结果时, Matlab常返回一个空矩 阵,空矩阵大小为0,但 是确实存在于工作空间 中,可以用变量名访问。 x=1:6; y=find(x6) size(y),随机矩阵 如:在区间20,50内均匀分布的5阶随机矩阵; 命令如下: x=20+(50-20)*rand(5),魔方矩阵 magic(3),零矩阵 zeros(2,3) zeros(3),全1矩阵 ones(2,3) ones(2),单位矩阵 eye(3) eye(2,3),对角矩阵 提取向量元素构成方阵的对角元素。 V=5 7 2; A=diag(V),伴随矩阵 P为多项式的系数向量 p=1,0,-7,6; compan(p),55,矩阵操作 1、矩阵下标,A(m,n):提取第m行,第n列元素 A(:,n):提取第n列元素 A(m,:):提取第m行元素 A(m1:m2,n1:n2):提取第m1行到第m2行和第n1列到第n2列的所有元素(提取子矩阵)。 A(:):得到一个长列矢量,该矢量的元素按矩阵的列进行排列。,56,实例 A=1,2,3 ;4,5,6 ;7,8,9; C=A(:); A(2,3)=5; B=A(2,1:3); A=A B; A(:,2)=;,结果: A=1,3,4 ;4,5,5 ;7,9,5 B=4,5,5 C=1;4;7;2;5;8;3;6;9,57,矩阵扩展:如果在原矩阵中一个不存在的地址位置上设定一个数(赋值),则该矩阵会自动扩展行列数,并在该位置上添加这个数,而且在其他没有指定的位置补零。 例如: a=1,2,3;4,5,6; a(3,1)=9; 结果为: a= 1 2 3 4 5 6 9 0 0,58,2、矩阵的大小 m,n=size(A):返回矩阵的行列数m与n, size(A,x):当x=1,则只返回行数m,当x=2,则只返回列数n。 x为向量时,length(x):返回值为向量元素x的个数。 length(A)或max(size(A):返回行数或列数的最大值。,a=1 2 3;3 4 5; m,n=size(a) m = 2 n = 3,length(a) ans = 3 max(size(a) ans = 3,59,3、矩阵操作函数:flipud;fliplr;rot90,rot90 矩阵旋转函数 rot90(A,k) 将矩阵A旋转90的k倍,当k=1的时候可以忽略,flipud矩阵上下翻转函数,fliplr矩阵左右翻转函数,例如: a=1,2,3;4,5,6; rot90(a) 结果为: a= 3 6 2 5 1 4,60,1、矩阵的转置 对于实矩阵用()符号或(.)求转置结果是一样的;然而对于含复数的矩阵,则()将同时对复数进行共轭处理,而 (.)则只是将其排列形式进行转置。,矩阵的运算,(1)基本运算,61,a=1 2 3;4 5 6 a = 1 4 2 5 3 6,a=1 2 3;4 5 6. a = 1 4 2 5 3 6,b=1+2i 2-7i b = 1.0000 - 2.0000i 2.0000 + 7.0000i b=1+2i 2-7i. b = 1.0000 + 2.0000i 2.0000 - 7.0000i,62,2、矩阵的加和减,矩阵的加减法的运算符为“”和“”。矩阵 只有同阶方可进行加减运算,标量可以和矩阵 进行加减运算但应对矩阵的每个元素施加运算。 例如 A=1 2 3;4 5 6; B=A+1 B= 2 3 4 5 6 7 a=1 2 3;4 5 6;b=0 1 2;3 4 5;a-b ans= 1 1 1 1 1 1,63,3、矩阵的乘法,矩阵的乘法运算符为“*”。 当两个矩阵中前一矩阵的列数和后一矩阵的行数相同时,可以进行乘法进行运算,这与数学上的形式是一致的。 例如: CA*B; 在MATLAB中还可进行矩阵和标量相乘,其结果为标量与矩阵中的每个元素分别相乘。,64,矩阵的除法有两种运算符“”和“/”,分别表示左除和右除。 x= AB是A*x=B的解, x=B/A是x*A=B的解, 通常ABB/A, 而AB=inv(A)*B, B/A= B*inv(A)。,4、矩阵的除法,65,矩阵的乘方运算符为“”。 一个方阵的乘方运算可以用AP来表示 。P为正整数,则A的P次幂即为A矩阵自乘P次。如果P为负整数,则可以将A自乘 P次,然后对结果进行求逆运算,就可得出该乘方结果。如果P是一个分数,例如Pmn,其中n和m均为整数,则首先应该将A矩阵自乘n次,然后对结果再开m次方。 例如:A=1,2,3;4,5,6;7,8,9; A2; %等效于A*A A-2; %等效于inv(A*A),5、矩阵的乘方,66,4、了解矩阵超越函数 在MATLAB中exp、sqrt等命令也可以作用到矩阵上,但这种运算是定义在矩阵的单个元素上的,即分别对矩阵的每一个元素进行计算。 超越数学函数可以在函数后加上m而成为矩阵的超越函数,例如expm(A),sqrtm(A),logm(A)分别为矩阵指数、矩阵开方和矩阵对数。 矩阵的超越函数要求运算矩阵为方阵。,67,(2)矩阵的特殊运算,1、方阵行列式:det(A) 2、方阵的逆:inv(A) 3、矩阵的迹矩阵的对角线元素之和,也等于矩阵的特征值之和:trace(A) 4、矩阵的秩矩阵线性无关的行数(列数):rank(A) 5、矩阵的三角分解(LU分解)目的是将一个矩阵A分解成一个下三角矩阵L和一个上三角矩阵U的乘积,亦即可以写成AL*U形式:L,U=lu(A),矩阵的特殊运算包括以下内容。,矩阵的运算,68,6、矩阵的奇异值分解:cond(A) 7、矩阵的特征值与特征向量:eig(A) x= eig(A),求矩阵A的全部的特征值构成向量x; V,D=eig(A),求矩阵A的全部特征值构成对角阵 D,并求A的特征向量构成V的列向量。 8、矩阵的特征多项式、特征方程和特征根: p=poly(A),p为矩阵A的特征多项式系数组成的行向量 V=roots(p),根据矩阵的特征多项式求特征根,69,例2-4 求矩阵A=1 2 3;4 5 6;7 8 9的特征多项式及特征根。 程序如下: A=1 2 3;4 5 6;7 8 9; p=poly(A),V=roots(p) 结果: p=1.0000 -15.0000 -18.0000 -0.0000 V= 16.1168 -1.1168 -0.0000 也可直接用eig(A)求矩阵特征根,得到一样的结果V,70,向量运算,虽然在MATLAB中向量和矩阵在形式上有很多的一致性,但它们实际上遵循着不同的运算规则。MATLAB向量运算符由矩阵运算符前面加一点“.”表示,如“.*”、“./”和“.”等。,1. 向量的加减 向量的加、减运算与矩阵的运算相同,所以“”和“”既可被向量接收又可被矩阵接收。,71,2. 向量的乘法 向量乘法的操作符为“.*”。如果x,y两向量具有相同的维数,则x.*y表示x和y单个对应元素之间的对应相乘。例如 x=1 2 3; y=4 5 6;z=x.*y z=4 10 18 可见向量的输入和输出与矩阵具有相同的格式,但它们的运算规则不同,例如,如果x是一个向量,则求取函数x平方时不能直接写成x*x,而必须写成x.* x,否则将给出错误信息。,72,但是对于矩阵可以使用向量运算符号,此时相当于把矩阵看成了向量进行运算。例如对于两个维数相同的A,B矩阵,A.*B表示A和B矩阵的相应元素之间直接进行乘法运算把这种运算称为矩阵的点积运算。 例如 A=1 2 3;4 5 6;7 8 9; B=2 3 4;5 6 7;8 9 0; C=A.*B;D=A*B; 结果:C= D= 2 6 12 36 42 18 20 30 42 81 96 51 56 72 0 126 150 84,73,3. 向量的除法 向量除法的操作符为“./ ”或“. ”。它们的运算结果一样。 x=1 2 3; y=4 5 6; z=y./ x z=4.0000 2.5000 2.0000 对于向量x.y和y./x一样,将得到相同的结果,这与矩阵的左、右除是不一样的,因向量的运算是它们对应元素间的运算。 对于矩阵也可使用向量的除法操作符,这时就相当于把矩阵看成向量进行运算。,74,4. 向量的乘方 向量乘方的运算符为“.”。向量的乘方是对应元素的乘方,在这种底与指数均为向量的情况下,要求它们的维数必须相同。例如 x=1 2 3; y=4 5 6; z= x.y z= 1 32 729 它相当于 z=1 2 3.4 5 6=14 25 36,75,在MATLAB中,多项式使用降幂系数的行向量表示,如:,p=poly(r) p = 1 -12 -0 25 116,(1)多项式的建立与表示方法,r=roots(p) r = 11.7473 2.7028 -1.2251 + 1.4672i -1.2251 - 1.4672i,表示为:p=1 -12 0 25 116,使用函数roots可以求出多项式等于0的根,根用列向量表示。若已知多项式等于0的根,函数poly可以求出相应多项式。,多项式处理,76,将多项式的系数向量表示成相应多项式的习惯表示形式的MATLAB函数为poly2str( ),函数的调用格式为f=poly2str(p,s ) 其中,p为多项式的系数向量,s为变量名,f为相应的多项式,例: p= 1 2 3 0 4; y=poly2str(p,x ) y = x4 + 2 x3 + 3 x2 + 4,77,(2)多项式的运算,相加、减 f(x)=x4+5x3+3x+2,g(x)=x2+6x+5的命令: p1=1 5 0 3 2;p2=0 0 2 6 5;p=p1+p2 相乘conv a=1 2 3 ; b=1 2 c=conv(a,b)=1 4 7 6 conv指令可以嵌套使用,如conv(conv(a,b),c) 相除deconv q,r=deconv(c,b) q=1 2 3 整除多项式 r=0 0 0 余数多项式,78,求多项式函数值polyval(p,n):将值n代入多项式求解。 a=1 2 3 ;polyval(a,2)=11 多项式求导数函数polyder k=polyder(p)可得到多项式的导数 例如:p=5 1 8 5; y=poly2str(p, x) y= 5 x3 + x2 + 8 x + 5 k=polyder(p) k= 15 2 8,79,例2-5 求多项式 的展开式, p=conv(1 1,conv(1 1,1 6 5); y=poly2str(p,x) y = x4 + 8 x3 + 18 x2 + 16 x + 5,例2-6 求多项式 在点x=5,7,9处的值 p=3 2 1; f=polyval(p,5,7,9) f= 86 162 262,80,多项式的拟合 多项式拟合又称为曲线拟合,其目的就是在众多的样本点中进行拟合,找出满足样本点分布的多项式。这在分析实验数据,将实验数据做解析描述时非常有用。 命令格式:p=polyfit(x,y,n),其中x和y为样本点向量,n为所拟合的多项式的阶数,p为求出的多项式。 例exp2_15.m 多项式插值 多项式插值是指根据给定的有限个样本点,产生另外的估计点以达到数据更为平滑的效果。该技巧在信号处理与图像处理上应用广泛。,81,所用指令有一维的interp1、二维的interp2、三维的interp3。这些指令分别有不同的方法(method),设计者可以根据需要选择适当的方法,以满足系统属性的要求。help polyfun可以得到更详细的内容。 yi=interp1(x,y,xi,method) 在有限样本点向量x与y中,插值产生向量xi和yi,所用方法定义在method中,有4种选择: nearest:执行速度最快,输出结果为直角转折 linear:默认值,在样本点上斜率变化很大 cubic:最占内存,输出结果与spline差不多 spline:最花时间,但输出结果也最平滑,82,例: x=-2 1 5 10 20; y=1 9 11 20 24; xi=3; yi=interp1(x,y,xi, linear) yi= 10 例:exp2_16.m,83,2.1.3数据分析与统计,随机数 最大值和最小值 求和与求积 平均值和均值 累加和和累加积 标准差与方差 排序,84,随机数 rand(n,m)在0,1上产生一个nm的矩阵 randn(n,m) 生成一个nm的均值为0、标准差为1的正态分布的随机矩阵 例: randn(2,3) ans = -0.4326 0.1253 -1.1465 -1.6656 0.2877 1.1909,85,最大值和最小值 1求向量的最大值和最小值 y=max(X):返回向量X的最大值存入y,如果X中包含复数元素,则按模取最大值。 y,i=max(X):返回向量X的最大值存入y,最大值的序号存入i,如果X中包含复数元素,则按模取最大值。 求向量X的最小值的函数是min(X),用法和max(X)完全相同。,86,例2-7 求向量x的最大值。 命令如下: x=-43,72,9,16,23,47; y=max(x) %求向量x中的最大值 y,i=max(x) %求向量x中的最大值及其该 元素的位置 结果:y=72 y=72 i=2,87,2求矩阵的最大值和最小值 求矩阵A的最大值的函数有3种调用格式,分别是: (1) max(A):返回一个行向量,向量的第i个元素是矩阵A的第i列上的最大值。 (2) Y,U=max(A):返回行向量Y和U,Y向量记录A的每列的最大值,U向量记录每列最大值的行号。 (3) max(A,dim):dim取1或2。dim取1时,该函数和max(A)完全相同;dim取2时,该函数返回一个列向量,其第i个元素是A矩阵的第i行上的最大值。 求最小值的函数是min,其用法和max完全相同。,88,例2-8:分别求34矩阵x中各行和各列元素中的最大值和最小元素,并求整个矩阵的最大值和最小值。,A=rand(3,4); max(A,2) min (A,2) max(A) min(A) max(max(A) min(min(A) ),89,3两个向量或矩阵对应元素的比较 函数max和min还能对两个同型的向量或矩阵进行比较,调用格式为: (1) U=max(A,B):A,B是两个同型的向量或矩阵,结果U是与A,B同型的向量或矩阵,U的每个元素等于A,B对应元素的较大者。 (2) U=max(A,n):n是一个标量,结果U是与A同型的向量或矩阵,U的每个元素等于A对应元素和n中的较大者。 min函数的用法和max完全相同。 例 求两个23矩阵x, y所有同一位置上的较大元素构成的新矩阵p。,p=max(x,y),90,求和与求积 设X是一个向量,A是一个矩阵,函数的调用格式为: sum(X):返回向量X各元素的和。 prod(X):返回向量X各元素的乘积。 sum(A):返回一个行向量,其第i个元素是A的第i列元素和。 prod(A):返回一个行向量,其第i个元素是A的第i列的元素乘积。 sum(A,dim):当dim为1时,该函数等同于sum(A);当dim为2时,返回一个列向量,其第i个元素是A的第i行的各元素之和。 prod(A,dim):当dim为1时,该函数等同于prod(A);当dim为2时,返回一个列向量,其第i个元素是A的第i行的各元素乘积。,91,例 求矩阵A的每行元素的乘积和全部元素的乘积。,M=prod(A,2); prod(M);,92,平均值和中值 mean(X):返回向量X的算术平均值。 median(X):返回向量X的中值。 mean(A):返回一个行向量,其第i个元素是A的第i列的算术平均值。 median(A):返回一个行向量,其第i个元素是A的第i列的中值。 mean(A,dim):当dim为1时,该函数等同于mean(A);当dim为2时,返回一个列向量,其第i个元素是A的第i行的算术平均值。 median(A,dim):当dim为1时,该函数等同于median(A);当dim为2时,返回一个列向量,其第i个元素是A的第i行的中值。,93,累加和与累乘积 cumsum(X):返回向量X累加和向量。 cumprod(X):返回向量X累乘积向量。 cumsum(A):返回一个矩阵,其第i列是A的第i列的累加和向量。 cumprod(A):返回一个矩阵,其第i列是A的第i列的累乘积向量。 cumsum(A,dim):当dim为1时,该函数等同于cumsum(A);当dim为2时,返回一个矩阵,其第i行是A的第i行的累加和向量。 cumprod(A,dim):当dim为1时,该函数等同于cumprod(A);当dim为2时,返回一个向量,其第i行是A的第i行的累乘积向量。 例 求向量X=(1!,2!,,10!)的值。,X=cumprod(1:10),94,95,标准差与方差 1求标准差 std(X):对于向量X,返回一个标准差。 std(A):对于矩阵A,返回一个行向量,它的各个元素便是矩阵A各列的标准差。 std(A, dim):当dim=1时,求各列元素的标准差;当dim=2时,则求各行元素的标准差。 2方差 var(X):对于向量X,返回一个方差。 var(A):对于矩阵A,返回一个行向量,它的各个元素便是矩阵A各列的方差。 var(A, dim):当dim=1时,求各列元素的方差;当dim=2时,则求各行元素的方差。,96,排序 sort(X):返回一个对X向量中的元素按升序排列的新向量。 sort(A,dim):若dim=1,则按列排;若dim=2,则按行排。,97,1.代数方程组求解 2.微分方程组求解 3.函数积分 4.函数绘图,2.1.4 函数方程,98,1、代数方程组求解,利用MATLAB中求函数f(.) =0的函数fzero()和fsolve(),可以很方便地求得非线性方程组的解,调用格式分别为 x=fzero(fun,x0) x=fsolve(fun,x0),前者针对一元方程求解,后者是对多元方程求解; fun表示函数名,x0表示函数的初值。x0为标量时,该命令在它两侧寻找一个与之最靠近的解;x0为区间a,b时,在此区间内寻找一个解。,99,例 试求函数 的零点,命令如下: f=fzero(sin(x),0,pi),例 求f(x)=x-10x+2=0在x0=0.5附近的根。 直接求根方法:z=fzero(x-10x+2,0.5) 用建立函数方法: (1) 建立函数文件funx.m。 function fx=funx(x) fx=x-10x+2; (2) 调用fzero函数求根。 z=fzero(funx,0.5) z = 0.3758,100,MATLAB拥有大量的库函数,也允许用户自定义 函数,能同库函数一样使用,但不能像M文件一 样,在命令窗口键入文件名来运行,必须由其他语 句调用,且允许有多个输入和输出。基本格式: function f1,f2,f3,=fun(x,y,z,) 函数体语句 其中,x,y,z,是形式输入参数, f1,f2,f3,是返回的形 式输出参数,fun是函数名。 函数的调用格式与该函数一致: y1, y2, y3,=fun(a,b,c,) a,b,c,是实际输入参数, y1,y2,y3,是相应的实际输 出参数。,自定义函数,101,例:编写一个自定义函数 1.打开M-file编辑窗口,输入函数 function w=f(x,y,z) w=x.3-2*y.2-2.*z+5; 2.保存文件,命名为f.m 3.在命令窗口中输入q=f(1,2,3),按enter键,则结果为q=-8 注意:函数名必须和保存的文本文件名相同。,102,例 试求一下非线性方程组的解,x,y,z初值均为1,解:根据方程编写函数exp2_19.m function q=exp2_19(p) q(1)=sin(p(1)+p(2)2+log(p(3)-7; q(2)=3*p(1)+2*p(2)-p(3)3+1; q(3)=p(1)+p(2)+p(3)-5;,调用f=fsolve(exp2_19,1 1 1),103,例 求下列非线性方程组在(0.5,0.5) 附近的数值解。 (1) 建立函数文件myfun.m。 function q=myfun(p) q(1)=p(1)-0.6*sin(p(1)-0.3*cos(p(2); q(2)=p(2)-0.6*cos(p(1)+0.3*sin(p(2); (2) 在给定的初值x0=0.5,y0=0.5下,调用fsolve函数求方程的根。 x=fsolve(myfun,0.5,0.5) x = 0.6354 0.3734,104,将求得的解代回原方程,可以检验结果是否正确,命令如下: q=myfun(x) q = 1.0e-009 * 0.2375 0.2957 可见得到了较高精度的结果。,105,函数极值 MATLAB提供了基于单纯形算法求解函数极值的函数fminsearch ,用于单变量函数的最小值,其调用格式为: x=fminsearch(fname,x1,x2) x=fminsearch (fname,x0) 这两个函数的调用格式相似。其中fminsearch函数用于求单变量函数的最小值点。fname是被最小化的目标函数名,x1和x2限定自变量的取值范围,x0是求解的初始值向量。,106,MATLAB没有专门提供求函数最大值的函数,但只要注意 到-f(x)在区间(a,b)上的最小值就是f(x)在(a,b)的最大值,所以 fminsearch(-f,x1,x2)返回函数f(x)在区间(x1,x2)上的最大值。,例 求f(x)=x3-2x-5在0,5内的最小值点。 (1) 建立函数文件mymin.m。 function fx=mymin(x) fx=x3-2*x-5; (2) 调用fminsearch函数求最小值点。 x= fminsearch(mymin,0,5) x= 0.8165,107,2、微分方程组求解,求解常微分方程的函数ode45( ),调用格式为: x=ode45(fun,t0,tf,x0,tol) fun为函数名, t0,tf为求解区间,x0为微分方程的初值, tol为指定的误差精度,默认值为10-3,例 求下列微分方程在初始条件 下的解,108,首先将微分方程写成一阶微分方程组 令,得,根据上述方程组编写函数exp2_20.m function dx=exp2_20(t,x) dx=x(2);(1-x(

温馨提示

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

评论

0/150

提交评论