控制系统建模与仿真-基于MATLABSimulink的分析与实现(第2版)课件全套 姜增如 第1-11讲 MATLAB2023a基本应用- MATLAB的建模应用_第1页
控制系统建模与仿真-基于MATLABSimulink的分析与实现(第2版)课件全套 姜增如 第1-11讲 MATLAB2023a基本应用- MATLAB的建模应用_第2页
控制系统建模与仿真-基于MATLABSimulink的分析与实现(第2版)课件全套 姜增如 第1-11讲 MATLAB2023a基本应用- MATLAB的建模应用_第3页
控制系统建模与仿真-基于MATLABSimulink的分析与实现(第2版)课件全套 姜增如 第1-11讲 MATLAB2023a基本应用- MATLAB的建模应用_第4页
控制系统建模与仿真-基于MATLABSimulink的分析与实现(第2版)课件全套 姜增如 第1-11讲 MATLAB2023a基本应用- MATLAB的建模应用_第5页
已阅读5页,还剩612页未读 继续免费阅读

下载本文档

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

文档简介

1第1讲

MATLAB2023a基本应用主讲内容2一、MATLAB系统概述二、MATLAB2023a工作界面三、MATLAB常用工具箱四、窗口操作一、MATLAB系统概述31、Matlab的特点Matlab名字由MATrix和LABoratory两词的前三个字母组合而成。MATLAB2023a版本是2023年的产品,主要包括代码编程和Simulink两大部分,它将数值与矩阵、科学数据可视化、非线性动态系统的建模、仿真和APP界面设计等诸多强大功能集成在一个窗口环境中。具有丰富的工具箱(ToolBox)。在高校中,Matlab已经成为数学,信息,控制等诸多学科有关课程的有效教学工具。2、Matlab主要功能MATLAB提供了脚本编辑器,通过命令或调用系统函数建立.m程序文件。使用App选项卡命令可编辑图形开发界面,包括常用的文本、下拉列表、组合框、按钮及坐标轴等控件,保存为.mlapp文件。使用APP可构建模拟工作台或可用来编写模拟仪器、仪表盘、菜单、对话框等图形化的用户界面。使用接口函数与其他多种语言程序链接与嵌入,完成数据交互。使用Simulink进行仿真:建立各种仿真模型。使用各种工具箱开发自己的应用程序。增加了深度学习的神经网络功能,且可实现图像中的像素区域分类和语义分割的功能。3、MATLAB的特点以矩阵为基础,每个变量代表矩阵且无须先定义,并可随时更改大小。语句使用简单、书写快捷,如同在稿纸中书写数学式子一样数学计算方便,使用函数即可替代键入复杂公式丰富的图形功能,使用函数即可绘制二维、三维图形。易扩展性能与多个软件相互交互。具有深度学习的神经网络功能。使用“空白模型”创建仿真框图得到结果在MATLAB命令窗口的“>>”的提示符下,可直接输入命令、表达式、函数、数组、计算公式,直接回车即可输出所有计算结果及错误信息。二、MATLAB2023a工作界面标题栏工具栏当前文件夹命令行窗口显示注释信息工作区栏脚本编辑器MATLAB2023a工具栏菜单“脚本”与【新建脚本】相同,用于编写程序文件;“实时脚本”:以扩展名为.mlx

的新文件格式存储在线脚本,可在编辑框查看代码和结果;“函数”:可搭建函数架构的函数文件;“实时函数”:展示一个函数示例;“类”:搭建一个类架构classdef…..end类文件“Systemobject”:搭建系统架构;“图形”:打开一个figure界面,用于绘图;“APP”:创建App界面的组件库分为常用、容器、图窗工具和仪器组件。“SimulinkModel”:创建仿真模型;“SimulinkProject”:创建仿真项目;,工具栏的帮助中心对话框MATLAB帮助中心Simulink帮助中心的实际应用案例信号处理工具箱(SignalProcessingToolbox)图象处理工具箱(ImageProcessingToolbox)通信工具箱(CommunicationToolbox)模糊逻辑控制工具箱(FuzzyLogicToolbox)小波工具箱(WaveletToolbox)系统辨识工具箱(SystemIdentificationToolbox)神经元网络工具箱(NeuralNetworkToolbox)财政金融工具箱(FinancialToolbox)三、MATLAB常用工具箱模型预测控制工具箱(ModelPredictiveControlToolbox)频域系统辨识工具箱(FrequencySystemIdentificationToolbox)优化工具箱(OptimizationToolbox)偏微分方程工具箱(PartialDifferentialEquationToolbox)统计工具箱(StatisticsToolbox)控制系统工具箱(ControlSystemToolbox)命令说明命令说明clc清除指令窗口dir查看文件夹和文件clf清除图形对象save保存任何指定文件clear清除所有变量,释放内存load将mat文件导入到工作区type显示指定文件的所有内容hold保持图形窗口不被刷新clearall清除所有变量和函数quit/exit退出MATLAB系统whos列出变量名、大小、类型close关闭指定窗口四、窗口操作1、常用操作命令who只列出变量名which列出文件所在文件夹what列出m和mat文件path启动搜索路径delete删除指定文件%注释语句help显示帮助信息cd显示当前文件夹命令说明命令说明例如:计算:>>y=(3*cos(pi/3)+12^3)/(1+sqrt(29))结果:y=270.8622说明:pi表示π,sqrt()求平方根函数,“^”表示求幂。快捷键说明快捷键说明Ctrl+Z返回上一项操作Ctrl+C中断正在执行的命令Ctrl+B光标向前移动一个字符Ctrl+K删除到行尾Ctrl+Q强行退出MATLAB系统和环境Ctrl+U清除光标所在行Ctrl+E光标移到行尾Ctrl+P调用打印窗口Home光标移动到行首End光标移动到行尾2、常用快捷键19第2讲

MATLAB的基本运算

20一、常量与变量的使用二、矩阵的建立方法三、矩阵运算四、MATLAB常用数学函数五、MATLAB数组表示六、矩阵集合运算七、多项式运算与符号运算主讲内容命令功

能pi圆周率

的双精度浮点表示Inf无穷大,

写成Inf,-

为–InfNaN不定式,代表“非数值量”,通常由0/0或Inf/Inf运算得出eps正的极小值,eps=2-32大约是2.22

10-16realmin最小正实数;realmax为最大正实数i、j若i和j不被定义,则它们表示纯虚数量,,即i=sqrt(-1)ans默认表达式的运算结果变量一、常量与变量的使用1、常量的使用变量名必须用英文字母开头,后面可包含数字、字母和下划线;要避免与系统预定义的变量名、函数名、保留字同名;变量名不能包含空格、标点符号和特色字符;变量名长度不能大于63个字符;若运算结果没有赋于任何变量,系统将其赋于ans特殊变量,它只保留最新值。符号变量必须定义,中间变量可以不预先定义。矩阵变量可直接定义赋值。2、变量的使用1)命名规则2)变量的存储将变量保存到mat文件中,可同时保存多个变量,各变量之间用空格隔开。save将所有变量保存到文件matlab.mat中savefnamesavefname.mat

将所有变量保存到文件fname.mat

中savefname

变量将指定变量保存到文件fname.mat

例如x=2:8;A=magic(3);a=2.4;save('mydata','x','a','A');clear;loadmydata;从mat文件中读取变量loadfname读取fname.mat

中的所有变量loadfname

变量从fname.mat

中读取指定的变量3)MATLAB数据类型矩阵(数组)逻辑类字符类字符串数值类单元(细胞数组)结构类型函数句柄int8,uint8int16,uint16int32,uint32int64,uint64singledouble整数类型的取值范围和类型转化函数数据类型种类取值范围函数表示有符号8位整数int8有符号16位整数int16有符号32位整数int32有符号64位整数int64无符号8位整数uint8无符号16位整数uint16无符号32位整数uint32无符号64位整数uint644)整数型MATLAB中有4种有符号整数类型,4种无符号整数类型。浮点包括单精度和双精度,分别用single和double表示,单精度需要加single命令建立变量,接输入变量值创建的是double类型,属于默认类型。可以使用whos和class命令查看文件类型例如:x=35;y=single(-26);a=class(x);b=class(y)结果:a=doubleb=singlewhos('x','y')NameSizeBytesClassx1x18doublearrayy1x14singlearrayGrandtotalis2elementsusing12bytes5)浮点类型在M编辑器中输入程序命令,运行后查看并保存。>>a1=int8(10);a2=int16(-20);a3=int32(-30);a4=int64(40)>>b1=uint8(50);b2=uint16(60);b3=uint32(70);b4=uint64(80)>>c1=single(-90.99);d1=double(3.14159);f1=’Hello’>>=’jiang’;h1=@sind;i1=true;j1{2,1}=100;例1:NameSizeBytesClassAttributesa11x11int8a21x12int16a31x14int32a41x18int64ans1x18doubleb11x11uint8b21x12uint16b31x14uint32b41x18uint64c11x14singled11x18doublef11x510charg11x1186structh11x132function_handlei11x11logicalj12x1128cell键入:whos查看变量结果:>>y1=2*sin(0.3*pi)/(1+sqrt(5))结果:y1=0.5000y2=0.3633>>y2=2*cos(0.3*pi)/(1+sqrt(5))计算例2:6)数据的常用计算>>a=single(3.14)>>b=int16(23)>>a+b出错Errorusing==>plus30浮点数参与运算时,返回值的类型依赖于参与运算中的数据类型。当双精度与逻辑型、字符型进行运算时,返回结果为双精度,而与整数型进行运算时返回结果为相应的整数类型,与单精度型运算时返回单精度型;单精度与逻辑型、字符型进行运算时,返回结果是单精度浮点型。注意:单精度浮点型不能和整数型进行算术运算。名称符号功能空格用于输入变量之间的分隔符以及数组行元素之间的分隔符。逗号,用于要显示计算结果的命令之间的分隔符;用于输入变量之间的分隔符;用于数组行元素之间的分隔符。点号.用于数值中的小数点。分号;用于不显示计算结果命令行的结尾;用于不显示计算结果命令之间的分隔符;用于数组元素行之间的分隔符。冒号:用于生成一维数值数组,表示一维数组的全部元素或多维数组的某一维的全部元素。百分号%用于注释的前面,在它后面的命令不需要执行。单引号‘’用于括住字符串。圆括号()用于引用数组元素;用于函数输入变量列表;用于确定算术运算的先后次序。方括号[]用于构成向量和矩阵;用于函数输出列表。花括号{}用于构成元胞数组。下划线-用于一个变量、函数或文件名中的连字符。续行号…用于把后面的行与该行连接以构成一个较长的命令。“At”号@用于放在函数名前形成函数句柄;用于放在目录名前形成用户对象类目录。1)常用标点符号的功能3、表达式2)复数MATLAB表示复数时,可用字母i或j表示虚部,创建复数可直接输入或利用函数complex(a,b)。例如:创建复数。在命令窗输入:>>a=2-3i运行结果:a=2.0000-3.0000i或:>>a=2,b=-3,complex(a,b)运行结果:a=2b=-3ans=2.0000-3.0000i复数运算MATLAB把复数作为一个整体,象计算实数一样计算复数。复数z1=3+4i,z2=1+2i,z3=计算

>>z1=3+4*i,z2=1+2*i,z3=2*exp(i*pi/6),z=z1*z2/z3>>z_real=real(z),z_image=imag(z)>>z_angle=angle(z),z_length=abs(z)例3:并计算Z的实部、虚部、模和复角。字符串3)字符型利用strcat函数也可将多个字符串串接到一起,创建字符数组。创建字符数组>>c1='China';>>whosc1>>a=‘Beijing';>>b='University';>>c2=strcat(a,b)运行结果:

NameSizeBytesClassc11x510chararrayGrandtotalis5elementsusing10bytesc2=BeijingUniversityuchar无符号字符schar带符号字符例4:逻辑类型逻辑类型的变量有两种取值,逻辑真和逻辑假,分别用“1”和“0”表示。可直接创建逻辑数组,例如:4)逻辑数>>x=[true,false,true,false]>>y=[7,2,9]>5x=1010y=101运行结果:逻辑数主要用在条件语句和数组索引中。>>A=rand(3)>>A<0.5结果:A=0.41030.35290.13890.89360.81320.20280.05790.00990.1987ans=111001111例5:>>A=[102030;456;7-10]>>B=[1+2i,2+5i;3+7i,5+9i;i,8i]结果:A=1020304567-10B=1.0000+2.0000i2.0000+5.0000i3.0000+7.0000i5.0000+9.0000i0.0000+1.0000i0.0000+8.0000iA=102030567-10B=1+2i2+5i3+7i5+9iI8i例6:输入实数A和复数阵B。二、矩阵的建立方法1、矩阵的建立函数名含

义函数名含

义zeros(m,n)m×n零矩阵company(m,n)m×n伴随矩阵zeros(m)m×m零矩阵pascal(n)n×n帕斯卡三角矩阵eye(m,n)m×n单位阵magic(n)n×n魔方阵eye(m)m×m单位矩阵diag(V)以V为对角元素对角阵ones(m,n)m×n全一阵tril(A)矩阵A的下三角阵ones(m)m×m全一矩阵triu(A)矩阵A的上三角阵rand(m,n)m×n的均匀分布的随机矩阵rot90(A)旋转90度A矩阵2、特殊矩阵Y=ones(3,4)%3×4的全一阵>>Z=rand(4,5)%4×5的均匀分布的随机矩阵>>W=triu(Z)%上三角阵>>K=magic(4)%魔方阵必须是方阵>>L=pascal(4)%杨辉三角阵必须是方阵结果:Y=111111111111Z=0.81470.63240.95750.95720.42180.90580.09750.96490.48540.91570.12700.27850.15760.80030.79220.91340.54690.97060.14190.9595例7:W=0.81470.63240.95750.95720.421800.09750.96490.48540.9157000.15760.80030.79220000.14190.9595K=16231351110897612414151L=11111234136101410201)利用冒号表达式获得子矩阵

A(:,j)表示取A矩阵的第j列全部元素;A(i,:)表示A矩阵第i行的全部元素;A(i,j)表示取A矩阵第i行、第j列的元素。

A(i:i+m,:)表示取A矩阵第i~i+m行的全部元素;A(:,k:k+m)表示取A矩阵第k~k+m列的全部元素,A(i:i+m,k:k+m)表示取A矩阵第i~i+m行内,并在第k~k+m列中的所有元素。

2)利用空矩阵删除矩阵的元素

在MATLAB中,定义[]为空矩阵。给变量X赋空矩阵的语句为X=[]。注意,X=[]与clearX不同,clear是将X从工作空间中删除,而空矩阵则存在于工作空间中,只是维数为0。3、矩阵拆分建立A为3维魔方阵,要求:(1)返回的是矩阵A中大于5的坐标;(2)查找第2列中等于5的元素;(3)查找矩阵A中=9的坐标。>>A=magic(3);>>[m,n]=find(A>5)%查找大于5的坐标>>find(A(:,2)==5)%查找第2列中等于5的元素>>[m1,n1]=find(A==9)%查找等于9的坐标例8:A=816357492A中大于5的元素坐标:m=n=11321323A阵第2列中等于5的元素坐标ans=2A阵等于9的坐标m1=3n1=2结果:A=0.81430.35000.61600.83080.24350.19660.47330.58530.92930.25110.35170.5497m1=0.35000.19660.2511m2=0.24350.19660.47330.5853A=rand(3,4)m1=A(:,2)m2=A(2,:)结果:例9:4、稀疏矩阵

若矩阵中非零元素的个数远远小于矩阵元素的总数,且非零元素的分布没有规律,则称该矩阵为稀疏矩阵(sparsematrix)。稀疏矩阵存储特点是所占内存少,运算速度快。创建稀疏矩阵语法格式:(1)S=sparse(A)

%将矩阵A中任何0元素去除,非零元素及其列组成矩阵S。(2)S=full(

A)%显示m*n矩阵的所有元素(3)S=spdiags(A,d,m,n)

%创建大小为m×n且元素在对角线上的矩阵

S。使用A

阵的j列元素填充

d

指定的对角线基于稀疏矩阵的对角线元素创建稀疏矩阵是一种常用操作。S=69539677286365534244340329526811026453171611587创建一个对角的5×5的稀疏矩阵。例10:S1=(1,1)69(1,2)65(2,2)63(2,3)40(3,3)3(3,4)81(4,4)6(4,5)71(5,5)31>>A=rand(5);>>S=floor(100*A)>>S1=spdiags(S,[01],5,5);>>S2=full(S1)S2=69650000634000003810000671000031(1)上三角矩阵

求矩阵A的上三角阵是triu(A)。triu(A)函数也有另一种形式triu(A,k),其功能是求矩阵A的第k条对角线以上的元素。

(2)下三角矩阵

下三角矩阵的函数是tril(A)和tril(A,k),其用法与提取上三角矩阵的函数triu(A)和triu(A,k)完全相同。(3)转置矩阵例如:B=A’(4)矩阵的旋转:rot90(A,k)将矩阵A旋转90º的k倍,当k为1时可省略。(5)矩阵翻转:对矩阵A实施左右翻转的函数是fliplr(A)。

对矩阵A实施上下翻转的函数是flipud(A)。5、三角矩阵及变换A=rand(3,4)m1=tril(A)m2=triu(A)结果:m1=0.91720000.28580.3804000.75720.56780.53080m2=0.91720.75370.07590.779200.38040.05400.9340000.53080.1299上三角阵,即矩阵的对角线以下的元素全为0的一种矩阵,而下三角阵则是对角线以上的元素全为0的一种矩阵。例11:例如:A=123456789B=A'B=147258369rot90(A)ans=369258147a=rand%产生一个0~1之间的随机数b=randi(100)%产生一个0~100之间的随机数c=randi(30,3,4)%产生3行4列30以内的随机数d=rand(2,3)%产生2行3列0~1之间的随机数e=randn(3)%产生3行3列高斯白噪声f=randperm(5)%产生0~5的随机序列数g=normrnd(1,3,2,4)%产生均值为1、方差为3大小为2×4的随机矩阵例12:随机函数的使用。a=0.5688b=82c=2211239151982356286d=0.89090.54720.14930.95930.13860.2575e=2.3505-0.1924-1.4023-0.61560.8886-1.42240.7481-0.76480.4882f=42153g=3.50531.6470-2.44393.16680.2689-2.49751.31468.7565结果:1)矩阵加、减运算A+B或A-B,要求A、B必须具有同阶次2)矩阵的乘、除运算

乘法:假定有两个矩阵A和B,若A为m×n矩阵,B为n×p矩阵,则C=A*B为m×p矩阵。除法:\和/,分别表示左除和右除。A\B等效于A的逆左乘B矩阵,也就是inv(A)*B,而B/A等效于A矩阵的逆右乘B矩阵,也就是B*inv(A)。3)矩阵的乘方运算

一个矩阵的乘方运算可以表示成A^x,要求A为方阵,x为标量。

三、MATLAB矩阵运算1、矩阵算术运算5)点运算

在MATLAB中,有一种特殊的运算,因为其运算符是在有关算术运算符前面加点,所以叫点运算。点运算符有.*、./、.\和.^。两矩阵进行点运算是指它们的对应元素进行相关运算。其运算符如下:运算符说明运算符说明‘+’矩阵相加‘\’矩阵左除‘-’矩阵相减‘.\’点左除‘*’矩阵相乘‘./’点右除‘.*’点乘‘^’^乘方‘/’矩阵右除‘.^’点乘方6)关系运算

操作符说明‘<’小于‘<=’小于或等于‘>’大于‘>=’大于或等于‘==’等于‘~=’不等于逻辑操作符说明‘&’与‘|’或‘~’非7)逻辑运算结果的逻辑真用1表示,假用0表示。例如:已经建立了矩阵A,BA+B,A-B矩阵的加、减运算A*B,A/B矩阵的乘除运算A.*B,A./B矩阵的点乘和点除运算A^k,A.^k矩阵乘方及点乘方运算A\B,A.\B左除及左点除运算1)定义:若A·B=B·A=E,则称A和B互为逆矩阵。2)运算函数:inv(A)使用逆矩阵求解下列线性方程组的解2、矩阵的逆运算2x+3y+5z=5x+4y+8z=-1x+3y+27z=6结果:x=4.8113-1.98110.2642因为:Ax=BX=A-1B则:>>A=[235;148;1327]>>B=[5-16]’>>x=inv(A)*B例13:3、矩阵特征值和特征向量计算

矩阵的特征值与特征向量是线性代数中的重要概念。对于一个n阶方阵A,若存在非零n维向量x与常数λ,使得λx=Ax,则称λ是A的一个特征值,x是属于特征值λ的特征向量。我们可以使用|λE-A|=0先求解出A的特征值,再代入等量关系求解特征向量(不唯一)。语法格式:E=eig(A)%求矩阵A的全部特征值,构成向量E[vd]=eig(A)%求矩阵A的全部特征值,构成对角阵d,并求A的特征向量构成v的列向量。已知A=[1234;6789;11121314;0121713]矩阵,求出对角阵D及特征向量列向量V。>>A=[1234;6789;11121314;0121713];>>[V,D]=eig(A)结果:V=-0.1465+0.0000i0.1107+0.2881i0.1107-0.2881i0.2512+0.0000i-0.3923+0.0000i0.2826+0.0574i0.2826-0.0574i-0.6977+0.0000i-0.6381+0.0000i0.4546-0.1732i0.4546+0.1732i0.6419+0.0000i-0.6461+0.0000i-0.7648+0.0000i-0.7648+0.0000i-0.1954+0.0000iD=37.0763+0.0000i0.0000+0.0000i0.0000+0.0000i0.0000+0.0000i0.0000+0.0000i-1.5382+2.9483i0.0000+0.0000i0.0000+0.0000i0.0000+0.0000i0.0000+0.0000i-1.5382-2.9483i0.0000+0.0000i0.0000+0.0000i0.0000+0.0000i0.0000+0.0000i0.0000+0.0000i例14:例如:fix(-1.3)=-1;fix(1.3)=1;

floor(-1.3)=-2;floor(1.3)=1;

ceil(-1.3)=-1;ceil(1.3)=2;

round(-1.3)=-1;round(-1.52)=-2;round(1.3)=1;round(1.52)=257四、MATLAB常用数学函数函数名含

义函数名含

义round(x)四舍五入至最近整数floor(x)舍去正小数至最近整数fix(x)舍去小数至最近整数ceil(x)加入正小数至最近整数1、取整函数函数名含

义函数名含

义abs(x)绝对值(复数的模)max(x)求每列最大值min(x)求每列最小值sum(x)元素的总和size(x)矩阵最大元素数mean(x)各元素的平均sqrt(x)求平方根exp(x)以e为底的指数log(x)自然对数log10(x)以10为底的对数log2(x)以2为底的对数pow2(x)2的指数sort(x)对x阵按列排序prod(x)按列求矩阵x积rank(x)求矩阵的秩inv(x)求矩阵的逆det(x)求行列式值length(x)向量阵的长度(维数)real(z)求复数z的实部imag(z)求复数z的虚部angle(z)复数z的相角conj(z)复数z的共轭复数rem(x,y)求x除以y的馀数gcd(x,y)x和y的最大公因数nnz(x)非零元素个数ndims(x)矩阵的维数trace(x)

矩阵对角元素的和pinv(x)求伪逆矩阵lcm(x,y)x和y最小公倍数sign(x)符号函数2、算术函数59计算矩阵对角元素和函数:trace(A):A=[123;456;789]trace(A)ans=15使用符号函数:sign(x)

当x<0时,sign(x)=-1;

当x=0时,sign(x)=0;

当x>0时,sign(x)=1。求最小公倍数函数:rem(x,y)x=76;y=16R=rem(x,y)R=12例15:3、三角函数>>a=sin(30*pi/180)%度需要乘以π/180变成弧度>>b=acos(1)*180/pi%弧度需要乘以180/π变成度>>c=atan(1)*180/pi结果:a=0.5000b=60c=45sin(x)正弦函数asin(x)反正弦函数cos(x)余弦函数acos(x)反余弦函数tan(x)正切函数atan(x)反正切函数cot(x)余切函数acot(x)反余切函数sec(x)正割函数asec(x)反正割函数csc(x)余割函数acsc(x)反余割函数例16:614、转换函数函数名含

义函数名含

义str2num字符串转换为数值str2double字符串转换为双精度num2str数值转换为字符串int2str整数转换为字符串str2mat字符串转换为矩阵setstrAscii转换为字符串dec2bin十进制到二进制dec2hex十进制到十六进制dec2base十进制到X进制base2decX进制到十进制bin2dec二进制转换为十进制sprintf输出格式转换lower字符串转换成小写upper字符串转换成大写625、文件函数函数名含

义函数名含

义fclose关闭文件fscanf读取文件格式化数据fopen打开文件feof测试文件是否结束fread从文件中读入二进制数据ferror测试文件输入输出错误fwrite把二进制数据写入文件fseek设置文件位置指针fgetl逐行从文件中读取数据sprintf输出格式化字符串fgets读取文件行保留换行符sscanf用格式控制读取字符串常见的打开方式fid=fopen(文件名,打开方式)'r'只读,文件必须存在(缺省的打开方式)'w'写文件,若文件已存在则原内容将被覆盖;若文件不存在则新建一个'a'在文件末尾添加,文件若不存在则新建一个'r+'可读可写,文件必须存在'w+'可读可写,若文件已存在则原内容将被覆盖;若文件不存在则新建一个'a+'可读可写可添加,文件若不存在则新建一个1)文件的打开和关闭其中文件名用字符串形式表示(可以带路径名)文件有两种格式:二进制文件(b)和文本文件(t)。在Windows下,打开文件的默认是二进制格式,如果要以文本方式打开,则必须在打方式中加上字符't'。fid=fopen(‘output.txt’,‘wt+’);%表示以文本方式打开文件output.txt。其中:fid

为所要关闭的文件的句柄,status

为关闭文件的返回代码,若关闭成功则为0,否则为-1。status=fclose(fid);文件的关闭:例如:[A,count]=fread(fid,size,precision)Inf读取整个文件(缺省)读取N个数据到一个列向量[m,n]读取m

n个数据到一个m

n矩阵中,按列存放2)二进制文件的读写

A用来存放读取的数据count返回读取数据的个数,可选项fid为文件句柄precision代表读取的数据的类型,

size为可选项,缺省为读取整个文件,若给出,则取值可以是:Nfid=fopen('output.dat','r');A=fread(fid,100,'double');status=fclose(fid);fid=fopen('output.dat','r');[A,count]=fread(fid,[100,100],'double');status=fclose(fid);读取“output.dat”二进制文件。先要打开该文件,如果句柄值大于0,则表示文件打开成功;若打开失败,fid的返回值为-1,读取100列和读取100行,100列的方法为:按指定的数据类型将魔方矩阵A中的元素写入到文件中。使用count返回写入数据元素个数。count=fwrite(fid,A,precision)A=magic(5);fid=fopen('magic5.dat','w');fwrite(fid,A,'int8');fclose(fid);fid=fopen('magic5.dat','r');[B,count]=fread(fid,[4,inf],'int8');fclose(fid);3)二进制文件的写入例17:

A用来存放读取的数据count返回读取数据的个数,为可选项fid为文件句柄size为可选项,缺省为读取整个文件,若给出,则取值可以是:[A,count]=fscanf(fid,format,size)4)文本文件的读取N读取N个数据到一个列向量Inf读取整个文件[m,n]读取m

n个数据到一个m

n矩阵中,按列存放6、字符串操作字符串的比较函数:strcmp()字符串的查找和替换s函数:strrep()strrep(s,'A','a')strcmp(a,b)例如:函数名含

义函数名含

义deblank去掉字符串末尾的空格blanks(n)

创建有n个空格组成的字符串

findstr在字符串中查找字符串strcat字符串横向连接组合strrep字符串的寻找和替代strvcat字符串竖向连接组合strcmp字符串比较upper小写转换为大写strcmpi字符串比较(忽略大小写)lower大写转换为小写strncmp比较字符串的前n个字符strjust调整字符串排列位置strmatch寻找符合条件的行strtok寻找字符串第一个空字符前边字符串7、判断函数命令操作whosx显示数据类型xtype=class(x)将x的数据类型赋给另一个变量isnumeric(x)判断x是否为数值类型isa(x,'integer')判断x是否为引号中指定的数值类型(包括其它数值类型)isreal(x)判断x是否为实数isnum(x)判断x是否为非数isinf(x)判断x是否为无穷isfinine(x)判断x是否为有限数函数句柄8、函数句柄在已有函数名前加符号@,即可创建函数句柄;创建一个函数句柄fun1:fun1=@functionname也可提供匿名函数创建一个函数句柄。提供了一种间接访问函数的方式,既可以用函数functionname实现功能,也可使用句柄实现同样的功能sqr=@(x)x.^2a=sqr(5)fun3=@(x,y)x.^2+y.^2;b=fun3(2,3)运行结果:a=25,b=13调用格式:fun1(arg1,arg2,…,argn)例18:结构类型五、MATLAB数组表示结构数组用于不同类型的数据集合。利用赋值语句创建结构>>student(1).name='LiMing';>>student(1).course=[1013510096];>>student(1).score=[8792]结果:student=name:'LiMing'course:[1013510096]score:[8792]1、结构数组例19:1)利用创建赋值语句继续扩展。继续在命令窗输入:>>student(2).name='ZhangLi';>>student(2).course=[1013510096];>>student(2).score=[8276];结果:student=1x2structarraywithfields:namecoursescore2)利用结构函数创建结构struct函数可以创建结构,其调用格式为:strArray=struct('field1',val1,'field2',val2,…)'field'和val为字段和对应值。字段值可以是单一值或单元数组,但是必须保证它们具有相同的尺寸。利用结构函数创建结构。>>stu=struct('n','WangFang','c',[1056810063],'s',[7682])结果:stu=n:'WangFang'c:[1056810063]s:[7682]例20:结果:stu=1x2structarraywithfields:ncs继续在命令窗输入:>>stu(2)查看结构stu(2)的字段内容结果:ans=n:'ZhaoYun'c:[1056810063]s:[9287]继续在命令窗输入:>>stu(2)=struct('n','ZhaoYun','c',[1056810063],'s',[9287])student(1).name='LiMing'student(1).course=[1013510096];student(1).score=[8792]student(2).name='ZhangLi';student(2).course=[1013510096]student(2).score=[8276]s1=student(1).namec1=student(1).courseg1=student(1).score结果:s1=ZhangLic1=1013510096g1=8792例21:>>student(1).sex='male'>>student(1)删除结构的字段3)添加和删除结构字段ans=name:'LiMing'course:[1013510096]score:[8792]sex:'male'>>rmfield(student,‘score')ans=1x2structarraywithfields:namecoursesex增加结构的字段2、细胞数组类型(单元数组)细胞数组是MATLAB特有的一种数据类型,组成它的元素是细胞,细胞是用来存储不同类型数据的单元,如图所示2×2细胞数组结构图。细胞数组中每个细胞存储一种类型的MATLAB数组,此数组中的数据可以是任何一种MATLAB数据类型或用户自定义的类型,其大小也可以是任意的。相同的数组的第二个细胞的类型与大小可以和第一个细胞完全不同。细胞数组结构图细胞数组细胞数组可以将不同类型或不同尺寸的数据存储到同一个数组当中。访问单元数组的方法与矩阵索引方法基本相同,区别在于单元数组索引时,需要用{}将下标置于其中。1)创建单元数组创建单元数组与创建矩阵基本相同,区别在于矩阵用[],单元数组用{}。例如:创建单元数组(一维)。在命令窗输入:>>a={[247;396;185],'LiMing',2+3i,1:2:10}a=[3x3double]'LiMing'[2.0000+3.0000i][1x5double]2)单元数组的删除对单元数组向量下标赋空值即可删除单元数组的行或列。例:删除单元数组的列。接上例继续在命令窗输入:>>a(:,2)=[]a=[3x3double][2.0000+3.0000i][1x5double]利用索引可以对单元数组进行函数或运算符操作。单元求和。k{1,1}=rand(3)k1=sum(k{1,1})结果

k=1×1cell数组

{3×3double}k1=1.91221.73490.27918例22:直接在命令窗输入单元数组名,可显示单元数组的构成单元,显示单元内容可使用celldisp函数。显示单元数组。在命令窗输入:>>celldisp(A)结果:A{1}=2573A{2}=0.44470.92180.40570.61540.73820.93550.79190.17630.9169例23:六、矩阵集合运算1、

交运算交运算的结果是属于矩阵A也属性矩阵B。若矩阵A中的元素在B中都不存在,则结果为空矩阵:0×1。语法格式:intersect(A,B)%求A与B的交集矩阵,结果显示为列2、

差运算矩阵A减矩阵B的差矩阵称为矩阵差运算。若矩阵A中的元素都在B中存在,则结果为空矩阵:0×1。语法格式:setdiff(A,B)

%A与B的差集3、

并运算矩阵的并运算可以将多个矩阵合并成一个列序列集。若矩阵A中的元素都在B中存在,则结果按照A矩阵或B矩阵的值大小依次按列排列。语法格式:union(A,B)%计算A与B的并运算。4、异或运算矩阵的异或运算是属于A或属于B,但不同时属于A和B的元素的集合称为A和B的对称差,即A和B的异或运算。若矩阵A中的元素都在B中存在,则结果为空矩阵:0×1。语法格式:setxor(A,B);%异或运算已知矩阵A和B,求它们的交、差、并及异或运算。>>A=[123;456;789]>>B=[012;3069;21223]>>a=intersect(A,B)>>b=setdiff(A,B)>>c=union(A,B)>>d=setxor(A,B)例24:结果:A=123456789B=012306921223a=12369b=4578c=0123456789212230d=04578212230七、多项式运算与符号运算MATLAB语言把多项式表达成一个行向量,该向量中的元素是按多项式降幂排列的。例如:

f(x)=Anxn+an-1xn-1+……+a0

可用行向量p=[anan-1

……a1+a0]表示1)poly产生特征多项式系数向量特征多项式一定是n+1维的特征多项式第一个元素一定是12)roots产生特征多项式特征值1、多项式表示已知:p(x)=x4+5x3-16x2-28x+19,列出多项式的特征值并表示。p=[15-16-2819]r=roots(p)p2=poly(r)p1=poly2str(p2,‘x’)%多项式到字符表示

结果:r=-6.70102.9386-1.77970.5422p2=1.00-6.00-72.00-27.00p1=x^4+5x^3-16x^2-28x+19多项式系数向量用行向量表示,一组根用列向量表示。例25:2、多项式乘运算>>A=[123];>>B=[456];>>C=conv(A,B)或>>conv([123],[456])1)多项式乘运算使用conv(A,B),convs(A,B)命令,其中A,B表示多项式。结果:C=4.0013.0028.0027.0018.00p=poly2str(C,'x')p=4x^4+13x^3+28x^2+27x+18已知:A=x2+2x+3;B=4x2+5x+6;

求:C=A×B例26:2)

多项式除运算[d,r]=deconv(c,a)余数c除a后的整数3)多项式微分运算polyder(p):求p的微分polyder(a,b):求多项式a,b乘积的微分[p,q]=polyder(a,b):求多项式a,b商的微分例:a=[123];c=[4.0013.0028.0027.0018.00];[d,r]=deconv(c,a)结果:d=456r=00000%除尽语法格式:语法格式:y1=[12345];y2=[369];a=poly2str(y1,'x')b=poly2str(y2,'x')k=polyder(y1,y2)K=poly2str(k,'x')求y=(x4+2x3+3x2+4x+5)(3x^2+6x+9)乘积的微分及微分表达式。a=x^4+2x^3+3x^2+4x+5b=3x^2+6x+9k=186012014413266K=18x^5+60x^4+120x^3+144x^2+132x+66结果:例27:在数学表达式中,一般排前面的作为变量的系数,后面的字母符号表示变量。例如:f=ax2+bx+c表达式中的a,b,c通常被认为是常数,用作变量的系数;而将x看作自变量。f=‘sin(x)+5x‘%f为符号变量名,''为符号标识,sin(x)+5x为符号表达式。符号表达式一定要用''单引号括起来MATLAB才能识别。''内容可是符号表达式,也可是符号方程。

f1=‘ax^2+bx+c‘%表示二次三项式

f2=‘ax^2+bx+c=0%表示方程

f3=‘Dy+y^2=1’%表示微分方程

3、符号表达式说明1)sym函数

sym函数的主要功能是创建符号变量,以便进行符号运算,也可以用于创建符号表达式或符号矩阵。用sym函数创建符号变量的一般格式为:sym(‘x’)%x是符号变量sym(‘a’)%定义符号变量b=sym(4/5)%定义符号常量class(b)结果:ans='sym'例如:2)syms函数syms函数的功能与sym函数类似。syms函数可以在一个语句中同时定义多个符号变量,其一般格式为:

symsarg1arg2…argN用于将arg1,arg2,…,argN等变量创建为符号型变量。各变量间须用空格分开。4、创建符号表达式和矩阵用sym命令创建符号表达式:

f=sym(a*x+b)先使用syms定义符号变量,再建符号表达式:

symsaxb;=a*x+b例如:symsabxyC

=[a,b;x,y]A=sym('[1+x,sin(x);5,exp(x)]')结果:C=[a,b][x,y]A=[x+1,sin(x)][5,exp(x)]5、符号表达式基本运算结果:fxy=(a*x^2+b*y^2)/c^2生成符号函数:Z1=[x11*y11+x12*y21,x11*y12+x12*y22,x11*y13+x12*y23][x21*y11+x22*y21,x21*y12+x22*y22,x21*y13+x22*y23][x31*y11+x32*y21,x31*y12+x32*y22,x31*y13+x32*y23]Z2=[x11*y11,x21*y12,x31*y13][x12*y21,x22*y22,x32*y23]例如:X=sym('[x11,x12;x21,x22;x31,x32]');Y=sym('[y11,y12,y13;y21,y22,y23]');Z1=X*YZ2=X.*Y结果:symsabcxy;fxy=(a*x^2+b*y^2)/c^2例28:1)因式分解函数factorfactor(f)%对f进行因式分解,也可用于正整数symsxy=factor(x^9-1)a=(x-1)*(x^2+x+1)*(x^6+x^3+1);b=2010;c=factor(b)d=factor(sym(a))y=[x-1,x^2+x+1,x^6+x^3+1]c=23567d=[x-1,x^6+x^3+1,x^2+x+1]结果:语法格式:6、符号表达式操作函数例29:2)扩展函数expandexpand(f)%函数展开symsx

y;f1=(x+1)^6;F1=expand(f)f2=sin(x+y);F2=expand(f)F1=x^6+6*x^5+15*x^4+20*x^3+15*x^2+6*x+1

F2=cos(x)*sin(y)+cos(y)*sin(x)结果:语法格式:例30:3)合并同类项函数collectcollect(f,v):%按指定变量

v

进行合并collect(f):%按默认变量进行合并symsxy;f=x^2*y+y*x-x^2+2*x;f1=collect(f)f2=collect(f,y)f3=sym(‘x^3+2*x^2*y+4*x*y+6’)f4=collect(f,y)f5=(2*x^2+4*x)*y+x^3+6f1=(y-1)*x^2+(y+2)*xf2=(x^2+x)*y-x^2+2*xf3=x^3+2*y*x^2+4*y*x+6f4=(x^2+x)*y-x^2+2*xf5=y*(2*x^2+4*x)+x^3+6结果语法格式:例31:4)化简多项式函数simplifyclear;clc;symsabcx;f1=sin(x)^2+cos(x)^2;f2=exp(c*log(sqrt(a+b)));y1=simplify(f1)y2=simplify(f2)y1=1y2=(a+b)^(c/2)结果:语法格式:y=simplify(f):%对符号表达式进行化简例32:5)化简函数simpley=simple(f):

f

尝试多种不同的算法(包括simplify)进行简化,返回其中最简短的形式[R,How]=simple(f):

How中记录的为简化过程中使用的方法。fRHOW2*cos(x)^2-sin(x)^23*cos(x)^2-1simplify(x+1)*x*(x-1)x^3-xcombi

温馨提示

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

评论

0/150

提交评论