matlab基础知识.doc_第1页
matlab基础知识.doc_第2页
matlab基础知识.doc_第3页
matlab基础知识.doc_第4页
matlab基础知识.doc_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

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

文档简介

第2章 基础知识本章着重介绍MATLAB的一些基础知识,包括数据类型、基本矩阵操作、运算符和字符串处理函数。本章是MATLAB编程的基础。2.1 数据类型MATLAB中定义了很多种数据类型,包括字符、数值、单元、结构、java类、函数句柄等类型,用户还可以自己定义数据类型。在MATLAB中有15种基本数据类型,每种基本数据类型均以数组/矩阵的形式出现,该矩阵可以是最小的0*0矩阵到任意大小的n维矩阵。1数值类型数值类型包含整数、浮点数和复数3种类型。另外MATLAB还定义了Inf和NaN两个特殊数值。(1)整数类型MATLAB支持1、2、4和8字节的有符号整数和无符号整数。这8种数据类型的名称、表示范围、转换函数如表2-1所示,其中转换函数可以把其它数据类型的数值强制转换为对应的整数类型。尽可能使用字节少的数据类型,这样可以节约存储空间和提高运算速度。表2-1 整数类型名称范围转换函数名称范围转换函数有符号1字节整数int8()无符号1字节整数uint8()有符号2字节整数int16()无符号2字节整数uint16()有符号4字节整数int32()无符号4字节整数uint32()有符号8字节整数int64()无符号8字节整数uint64()(2)浮点数类型MATLAB有单精度和双精度两种浮点数,其中双精度浮点数为MATLAB默认的数据类型。这2种数据类型的名称、存储空间、表示范围和转换函数如表2-2所示。表2-2 浮点数类型名称存储空间表示范围转换函数单精度浮点数4字节single()双精度浮点数8字节double()(3)复数类型复数包含实部和虚部。在MATLAB中可以用i或j来表示虚部。例如:在命令窗口中用赋值语句产生复数5+10i,代码如下:A=5+10i例如:在命令窗口用函数complex()产生复数5+10i,具体代码如下:X=5;Y=10;z=complex(x,y)(4)Inf和NaN在MATLAB中用Inf和-Inf分别表示正无穷大和负无穷大。除法运算中除数为0或者运算结果溢出都会导致inf或-inf的运行结果。在MATLAB中用NaN(not a number)来表示一个既不是实数也不是复数的数值。类似0/0、inf/inf等运算产生的结果均为NaN。2.逻辑类型在MATLAB中逻辑类型包括true和false,分别由1和0表示。在MATLAB中用函数logical()将任何非零的数值转换为true(即1),将数值0转换为false(即0)。3.字符和字符串类型在MATLAB中,数据类型(char)表示一个字符。一个char类型的1*n数组称为字符串string。用单引号对表示字符串。例如:str=I am a great person也可以用char()函数构造字符串。例如:str=char(65 66)4.结构体类型结构体类型是一种由若干属性(field)组成的MATLAB数组,其中的每个属性可以是任意数据类型。例如:personel结构体,包括3个属性(Name、Score和Salary),其中Name是一个字符串,Score是一个数值,Salary是一个1*5的向量。(1)结构体数组的构造构造一个结构体(数组)有如下两种方法。利用赋值语句通过赋值语句为结构体中的每个指定属性赋值,从而构造结构体。例如:建立Clayton、98.5、工资为4500 5100 5600 5200 4800的结构体。Personel.Name=Clayton;Personel.Score=98.5;personel.Salary=4500 5100 5600 5200 4800;personelpersonel(2).Name=dana;personel(2).Score=100;personel(2).Salary=6700 9000;personel利用函数struct()在MATLAB中,函数struct()的具体用法如下:StrArray=struct(field1,val1,field2,val2,)例如:Personel=struct(Name,Clayton,Dana,John,Score,98.5,100,Salary,4500 5100 5600 5200 4800,6700 9000,)(2)结构体数组的访问通过结构体数组的下标引用,可以访问任意元素的所有属性,同时可以对属性进行赋值。2.2 基本矩阵操作在MATLAB中,所有的数据均以二维、三维或高维矩阵的形式存储,每个矩阵的单元可以是数值类型、逻辑类型、字符类型或者其他任何数据类型。对于标量,可以用1*1矩阵来表示,对于一组n个数据,可以用1*n矩阵来表示;对于多维数组,可以用多维矩阵来表示。在MATLAB中,可以用whos来显示数据的类型、存储空间等信息。2.2.1 矩阵的构造1.简单矩阵构造最简单的方法是采用矩阵构造符。构造1*n矩阵(行向量)时,可以将各元素依次放入矩阵构造符内,并以空格或者逗号分隔;构造m*n矩阵时,每行如上处理,并且行与行之间用分号分隔。例如:a=1 2 3 4 或者 a=1,2,3,4例如:b=1 2 3; 4 5 6 或者 b=1,2,3;4,5,62.特殊矩阵构造在MATLAB中还提供了一些函数用来构造特殊矩阵。ones(n)或ones(m,n):产生矩阵元素全为1的矩阵。zeros(n)或zeros(m,n):产生矩阵元素全为0的矩阵。eye(n):产生单位矩阵,即主对角线上的元素为1,其他元素全为0。diag(v):将向量转化为对角矩阵。magic(n):产生魔方矩阵.rand(n)或rand(m,n):产生01均匀分布的随机数。randn(n)或randn(m,n):产生均值为0且方差为1的高斯分布随机数。randperm(n):产生整数1n的随机排列。3.向量构造最简单的方法是采用向量构造符:,其常用的用法如下。(1)a:b 返回以a为起点,以1为步长,且所有取值在a与b之间的向量。如果b值小于a值,则MATLAB返回一个空矩阵。(2)a:s:b 返回以a为起点,以s为步长,且所有值在a与b之间的向量。构造向量还可以采用函数linspace()、logspace()等,如函数linspace()用于创建指定范围和步长的等距向量。例如:a=linspace(-6,6,4)2.2.2 矩阵大小的改变1.矩阵的合并矩阵的合并就是把两个或两个以上的矩阵连接成一个新矩阵。前面介绍的矩阵构造符不仅可以用于构造矩阵,还可以作为一个矩阵合并操作符。表达式C=A B在水平方向合并矩阵A和B,而表达式C=A;B在竖直方向合并矩阵A和B。注意:矩阵合并时要符合维数的约束。如果水平方向合并,则两个矩阵行数必须相同;如果竖直方向合并,则两个矩阵列数必须相同。矩阵合并除了使用合并符外,还可以使用矩阵合并函数。矩阵合并函数的描述和基本调用格式如表2-4所示。表2-4 矩阵合并函数函数名函数描述函数调用格式cat在指定的方向合并矩阵cat(1,a,b) 与A;B一致cat(2,a,b) 与A B一致horzcat在水平方向合并矩阵Horzcat(a,b)vertcat在竖直方向合并矩阵Vertcat(a,b)repmat通过复制矩阵来构造新矩阵Repmat(A,M,N)得到m*n块矩阵,其中每块都是Ablkdiag用已知矩阵来构造块对角化矩阵Blkdiag(A,B) 得到以矩阵A和B为对角块的矩阵2.矩阵行列的删除要删除矩阵的某一行或者某一列,只需将该行或该列赋予一个空矩阵即可。例如:A=magic(3); A(2,:)=;2.2.3 矩阵下标引用通过矩阵下标来存取元素值的方法,包括访问单个元素、先行引用元素和访问多个元素等。1. 访问单个元素若A是二维矩阵,可以用A(i,j)来表示第i行第j列的元素。若A是多维矩阵,可以通过指定多个下标来实现对其访问。2. 线性引用元素对于矩阵A,线性引用元素的格式为A(k)。通常这样的引用用于行向量或列向量,但也可用于二维矩阵。Matlab按列优先排列的一个长列向量格式来存储矩阵元素,并不是按其命令行输出格式来存储的。按照长列向量格式存取元素值就是线性引用元素。如矩阵A=2 6 9 ;4 2 8;3 5 1,在内存中是被存储成以2、4、3、6、2、5、9、8、1排列的一个列向量。它第3行第2列的元素,也就是内存中的第6个元素,其值为5。要访问这个元素既可以用A(3,2),也可以用A(6)。一般地,设矩阵A是一个M*N的矩阵,矩阵元素A(i,j)等同于A(j-1)*M+i)。如上,A(3,2)=A((2-1)*3+3)=A(6)。3. 访问多个元素操作符:可以用来表示矩阵的多个元素。若A是二维矩阵,其主要用法如下:A(:,:) 返回矩阵A的所有元素。A(i,: ) 返回矩阵A的第i行的所有元素。A(i,k1:k2) 返回矩阵A的第i行的自k1到k2列的所有元素。A(:,j) 返回矩阵A的第j列的所有元素。A(k1:k2,j) 返回矩阵A的第j列的自k1到k2行的所有元素。若A是多维矩阵,也可以通过类似的方法实现对其访问。操作符:也是向量构造符,可以用它来表示非相邻的多个元素。例如:读取矩阵A第1,4,7列的元素,其中A=1:8,具体代码如下:A=1:8B=A(1:3:7)2.2.4 矩阵信息的获取矩阵的信息包括矩阵的尺寸、元素的数据类型和矩阵的数据结构等。1.矩阵的尺寸信息矩阵的尺寸函数可以得到矩阵的形状和大小信息,这些函数如表2-5所示。表2-5 矩阵尺寸函数函数名函数描述基本调用格式Size矩阵各方向的长度D=size(x)M=size(x,dim)返回各方向的长度,以向量方式存储。返回指定方向的长度Length矩阵各方向中的最长长度N=length(x)相当于max(size(x)Ndims矩阵的维数N=ndims(A)矩阵的维数Numel矩阵的元素个数N=numel(A)矩阵的元素个数2.元素的数据类型查询元素数据类型信息的部分函数如表2-6所示。函数名函数描述基本调用格式Class返回输入数据的数据类型Isa判段输入数据是否是指定数据类型Ischar判断输入数据是否为字符串Isfloat判断输入数据是否为浮点数Isinteger判断输入数据是否为整数Islogical判断输入数据是否为逻辑型Isnumeric判断输入数据是否为数值型Isreal判断输入数据是否为实数Isstruct判断输入数据是否为结构体3.矩阵的数据结构判断矩阵是否为某种指定数据结构的函数如表2-7所示。函数名函数描述基本调用格式Isempty判断矩阵是否为空矩阵Isscalar判断矩阵是否为标量Issparse判断矩阵是否为稀疏矩阵Isvector判断矩阵是否为矢量2.2.5 矩阵结构的改变改变矩阵结构的函数如表2-8所示。表2-8 改变矩阵结构的函数函数名函数描述基本调用格式Reshape按照长列向量的顺序重排元素Rot90旋转矩阵Fliplr以竖直方向为轴做镜像Flipud以水平方向为轴做镜像Flipdim以指定的轴做镜像B=flipdim(A,dim) dim=1 以水平方向为轴Dim=2 以竖直方向为轴做镜像Transpose矩阵的转置Ctranspose矩阵的共轭转置2.2.6 稀疏矩阵在Matlab中,可以用两种方式来存储矩阵,即满矩阵存储方式和稀疏矩阵存储方式。Matlab默认的是满矩阵存储方式。若一个矩阵只有少数个元素非零,称为稀疏矩阵。如果稀疏矩阵采用满矩阵存储方式,会浪费很多存储空间,有时还会降低计算速度。在Matlab中引入了稀疏矩阵存储方式解决上述问题,即以非零元素及其对应的下标来表示。用户可以创建双精度、复数和逻辑等类型的稀疏矩阵,所有matlab自带的数学函数、逻辑函数和引用操作均可以使用在稀疏矩阵上。1.稀疏矩阵的创建在matlab中,用函数sparse()实现满矩阵到稀疏矩阵的转换。在matlab中,用函数full()实现稀疏矩阵到满矩阵的转换。在matlab中,可以用函数sparse()直接创建稀疏矩阵,具体做法如下:S=sparse(i,j,s,m,n),其中,i和j分别是稀疏矩阵非零元素的行和列下标,s为相应的非零元素的值,m和n分别是矩阵的行数和列数。例如:创建稀疏矩阵A=0 0 1 0;0 2 0 0;3 0 0 0;0 0 4 0,具体代码如下:s=sparse(3,2,1,4,1,2,3,3,3,2,1,4,4,4)a=full(s)即可说明:3,2,1,4是元素所在行,1,2,3,3是元素所在列,3,2,1,4是元素值,4,4是矩阵的行数和列数。Matlab还提供了一些函数用于创建特殊稀疏矩阵,这些函数如表2-9所示。函数名函数描述基本调用格式Speye创建单位稀疏矩阵。Spones创建非零元素为1的稀疏矩阵。Sprand创建随机稀疏矩阵,其中非零元素为均匀分布的随机数。Sprandn创建随机稀疏矩阵,其中非零元素为高斯分布的随机数。2.查看稀疏矩阵Matlab提供一些函数用于查看稀疏矩阵信息。如表2-10所示函数名函数描述基本调用格式Nnz返回非零值的个数Nonzeros返回非零值Nzmax返回用于存储非零值的空间长度Matlab自带的稀疏矩阵we

温馨提示

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

评论

0/150

提交评论