MATLAB程序设计与应用

文章目录

  • MATLAB程序设计与应用
    • 2. 第2章 MATLAB数据及其运算
      • 2.1 MATLAB数值数据
        • 2.1.1 数值数据类型的分类
        • 2.1.2 数据的输出格式
      • 2.2 MATLAB矩阵的表示
        • 2.2.1 矩阵的建立
        • 2.2.2 冒号表达式
        • 2.2.3 矩阵元素的引用
      • 2.3 变量及其操作
        • 2.3.1 变量与赋值语句
        • 2.3.2 预定义变量
        • 2.3.3 变量的管理

2. 第2章 MATLAB数据及其运算

MATLAB数据类型较为丰富,既有数值型、字符串等基本数据类型,又有结构(Structure)、单元(Cell)等复杂的数据类型。在MATLAB中,没有专门的逻辑型数据,而以数值1(非零)表示“真”,以数值0表示“假”。数据类型的多样性增强了 MATLAB的数据表达能力,给实际应用带来方便。

MATLAB各种数据类型都以矩阵形式存在,所以矩阵是MATLAB最基本的数据对象形式。

2.1 MATLAB数值数据

MATLAB数值数据是最基本的一种数据类型,有整型、浮点型和复数型。系统给每种数据类型分配不同个数字节的内存单元,由此决定了数据的表示范围。

2.1.1 数值数据类型的分类
  1. 整型

    整型数据是不带小数的数,有带符号整数和无符号整数之分。

    类型 取值范围 转换函数 类型 取值范围 转换函数
    无符号8位整型 0~2^8 - 1 uint8 无符号16位整型 0~2^16 - 1 uint16
    无符号32位整型 0~2^32 - 1 uint32 无符号64位整型 0~2^64 - 1 uint64
    带符号8位整型 -2^7 ~ 2^7 - 1 int8 带符号16位整型 -215~215-1 int16
    带符号32位整型 -231~231-1 int32 带符号64位整型 -263~263-1 int64
    >> x = int8(129)x =int8127>> x = int16(129)x =int16129
    

    带符号8位整型数据的最大值是127, int8函数转换时只输出最大值。

  2. 浮点型

    浮点型数据有单精度(single)和双精度(double)之分,单精度型实数在内存中占用4个字节,双精度型实数在内存中占用8个字节,双精度型的数据精度更高。在MATLAB 中,数据默认为双精度型。single函数可以将其他类型的数据转换为单精度型,double 函数可以将其他类型的数据转换为双精度型。

  3. 复型

    复型数据包括实部和虚部两个部分,实部和虚部默认为双精度型。在 MATLAB 中,虚数单位用i或j表示。例如,6+5i与6+5j表示的是同一个复数,也可以写成6+5*i或6+5*j,这里将i或j看作一个运算量参与表达式的运算。

    如果构成一个复数的实部或虚部不是常量,则使用 complex 函数生成复数。例如,complex(2,x)生成一个复数,其实部为2,虚部为x。可以使用real 函数求复数的实部,imag 函数求复数的虚部,abs 函数求复数的模,angle函数求复数的幅角,conj函数求复数的共辄复数。

    >> x = 3;
    >> y = complex(2 , x)y =2.0000 + 3.0000i>> real(y)ans =2>> conj(y)ans =2.0000 - 3.0000i
    
  4. 使用class函数获取数据的类型

    >> class(9)ans ='double'
    

    MATLAB数值数据类型默认为双精度型

2.1.2 数据的输出格式

MATLAB 用十进制数表示一个常数,具体可采用日常记数法和科学记数法两种表示方法。

  • 日常记数法:3.1415926 、 -9.259i 、 3 + 5i【常数】
  • 科学记数法:1.78029e2 、 6.732E2i 、 1234e - 3 - 5i 【e E表示以10为底的指数】

在一般情况下,MATLAB内部每一个数据元素都是用双精度数来表示和存储的。数据输出时用户可以用format命令设置或改变数据输出格式。

format 格式符
格式符 含义
short 输出小数点后4位,最多不超过7位有效数字。对于大于1000的实数,用5位有效数字的科学记数形式输出
long 15位有效数字形式输出
short e 5位有效数字的科学记数形式输出
long e 15位有效数字的科学记数形式输出
short g 从 short和short e中自动选择最佳输出方式
long g 从 long和 long e中自动选择最佳输出方式
rat 近似有理数表示
hex 十六进制表示
+ 正数、负数、零分别用+、-、空格表示
bank 银行格式,用元、角、分表示
compact 输出变量之间没有空行
loose 输出变量之间有空行

format 命令只影响数据输出格式,而不影响数据的计算和存储。

如果输出矩阵的每个元素都是纯整数,MATLAB 就用不加小数点的纯整数格式显示结果。只要矩阵中有一个元素不是纯整数,MATLAB将按当前的输出格式显示计算结果。如果 format命令后面不加格式符,则回到默认输出格式。默认的输出格式是 short格式。

>> x = 4 / 3;
>> format short
>> xx =1.3333>> format short e;
>> xx =1.3333e+00>> format long;
>> xx =1.333333333333333>> format long e;
>> xx =1.333333333333333e+00>> format bank;
>> xx =1.33>> format hex;
>> xx =3ff5555555555555>> format +;
>> xx =+

hex输出格式是把计算机内部表示的数据用十六进制数输出。

单精度浮点数在内存中占32个二进制位,其中1位为数据的符号位(以0代表正数,1代表负数),8位为指数部分,23位为尾数部分。指数部分表示2的多少次幂,存储时加上127,也就是说2^0用127(即二进制数1111111)表示。尾数部分是二进制小数,其所占的23位是小数点后面的部分,小数点前面还有一个隐含的1并不存储。

双精度浮点数占64位二进制,其中1位为符号位,11位指数位,52位尾数位。

>> format hex
>> single(-4.25)ans =singlec0880000

2.2 MATLAB矩阵的表示

矩阵是MATLAB 最基本的数据对象,MATLAB的大部分运算或命令都是在矩阵运算的意义下执行的。在MATLAB 中,不需要对矩阵的维数、大小和类型进行说明,MATLAB会根据用户所输入的内容自动进行配置。

2.2.1 矩阵的建立
  1. 直接输入法建立矩阵

    最简单的建立矩阵的方法是从键盘直接输入矩阵的元素。具体方法是,将矩阵的元素用中括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用逗号或空格分隔,不同行的元素之间用分号分隔。

    >> A = [1,2,3;4,5,6;7,8,9]A =1     2     34     5     67     8     9>> B = [2+3i,5;3-5j,6j]B =2.0000 + 3.0000i   5.0000 + 0.0000i3.0000 - 5.0000i   0.0000 + 6.0000i
    
  2. 利用已建好的矩阵建立更大的矩阵

    大矩阵可由已建好的小矩阵拼接而成。

    >> A = [1,2,3;4,5,6;7,8,9];
    >> B = [-1,-2,-3;-4,-5,-6;-7,-8,-9];
    >> C = [A,B;B,A]C =1     2     3    -1    -2    -34     5     6    -4    -5    -67     8     9    -7    -8    -9-1    -2    -3     1     2     3-4    -5    -6     4     5     6-7    -8    -9     7     8     9
    

    使用实部矩阵和虚部矩阵构成复数矩阵

    >> R = [1,2,3;4,5,6];
    >> I = [6,7,8;9,10,11];
    >> ri = R + i * Iri =1.0000 + 6.0000i   2.0000 + 7.0000i   3.0000 + 8.0000i4.0000 + 9.0000i   5.0000 +10.0000i   6.0000 +11.0000i
2.2.2 冒号表达式

在MATLAB中,利用冒号表达式可以产生行向量,一般格式如下:

e1:e2:e3
% e1为初始值 , e2为步长 , e3为终止值
>> t = 0:1:5t =0     1     2     3     4     5

在冒号表达式中如果省略e2不写,则步长为1。例如,=0:5与t=0:1:5等价。

在 MATLAB中,还可以用 linspace函数产生行向量,其调用格式如下:

linspace(a,b,n)
% a 和 b 是生成向量的第1个和最后一个元素,n是元素总数。n省略时,自动产生100个
% 显然,linspace(a,b,n)与a:(b-a)/(n-1):b等价。
>> x = linspace(0,pi,6)x =0    0.6283    1.2566    1.8850    2.5133    3.1416
2.2.3 矩阵元素的引用
  1. 矩阵元素的引用方式

    在很多情况下,需要对矩阵的单个元素进行操作。矩阵元素可以通过下标 (Subscript)来引用,下标必须为正整数。例如,A(3,2)表示A矩阵第3行第2列的元素。

    >> AA =1     2     34     5     67     8     9>> A(3,2) = 200A =1     2     34     5     67   200     9
    

    这时将只改变该元素的值,而不影响其他元素的值。如果给出的行下标或列下标大于原来矩阵的行数和列数,则MATLAB将自动扩展原来的矩阵,并将扩展后未赋值的矩阵元素置为0。

    
    >> A = [1,2,3;4,5,6];
    >> A(4,5)=10A =1     2     3     0     04     5     6     0     00     0     0     0     00     0     0     0    10
    

    也可以采用矩阵元素的序号(Index)来引用矩阵元素。矩阵元素的序号就是相应元素在内存中的排列顺序,即线性索引号。在 MATLAB 中,矩阵元素按列存储,即首先存储矩阵的第一列元素,然后存储第二列元素,……y一直到矩阵的最后一列元素。

    >> A = [1,2,3;4,5,6];
    >> AA =1     2     34     5     6>> A(3)ans =2
    

    显然,序号和下标一一对应。以m×n矩阵A为例,矩阵元素A(i,j)的序号为(j-1)*m+i。

    矩阵元素的序号与下标可以利用sub2ind和 ind2sub函数实现相互转换。

    sub2ind函数将矩阵中指定元素的行、列下标转换成存储的序号,其调用格式如下:

    Dsub2ind(S,I,J)
    % S表示要转换矩阵的行数和列数,是行数和列数组成的向量,通常用size()函数获取
    % I 是要转换矩阵的行下标
    % J 是要转换矩阵的列标% I J的行列数必须相同,D为对应下标元素的序号,其行列数与I J相同
    
    >> A = [1:3;4:6]A =1     2     34     5     6>> D = sub2ind(size(A),[1,2;2,2],[1,1;3,2])D =1     26     4
    % 命令中的size(A)函数返回包含两个元素的向量,分别是A矩阵的行数和列数。从执行结果可以看出,A(1,1)的序号为1, A(2,1)的序号为2, A(2,3)的序号6, A(2,2)的序号为4。
    

    ind2sub 函数用于把矩阵元素的序号转换成对应的下标,其调用格式如下:

    [I,J]=ind2sub(S, D)%其中,S表示要转换的矩阵的行数和列数;D是序号,返回值为序号所对应元素的行下标和列下标。
    
    >> [I , J] = ind2sub([3,3],[1,3,5])I =1     3     2J =1     1     2
    % 命令执行结果表明,3×3矩阵的第1、3、5个元素的下标分别为(1,1)、(3,1)、(2,2)。
    

    有关求矩阵大小的函数还有:

    length(A),给出矩阵A最长维的长度;

    ndims(A),给出矩阵A的维数;

    numel(A),给出矩阵A元素的个数。

  2. 利用冒号表达式获得子矩阵

    子矩阵是指由矩阵中的一部分元素构成的矩阵。若用冒号表达式作为引用矩阵时的下标,这时就可以获得一个子矩阵。也可以直接用单个的冒号来作为行下标或列下标,它代表全部行或全部列。

    A(ij)表示A矩阵第i行、第j列的元素,A(i,:)表示A矩阵第i行的全部元素,A(:j)表示A矩阵第j列的全部元素。同样,A(i:i+m,k:k+m)表示A矩阵第 i~社m行内且在第k~k+m 列中的所有元素,A(i:i+m,:)表示A矩阵第i一m行的全部元素,A(:,k:k+m)表示A矩阵第k~k+m列的全部元素。

    >> A = [1:5;6:10;11:15;16:20]A =1     2     3     4     56     7     8     9    1011    12    13    14    1516    17    18    19    20>> A(1,:) %取A第一行
    ans =1     2     3     4     5>> A(:,2:4) %取A第2、3、4列ans =2     3     47     8     912    13    1417    18    19
    >> A(2:3,4:5) %取A第2、3行,第4、5列ans =9    1014    15
    >> A(2:3,[1,3,5]) %取A第2、3行,第1、3、5列ans =6     8    1011    13    15
    

    利用一般向量和 end运算符来表示矩阵下标,从而获得子矩阵。end 表示某维的末尾元素下标。

    >> A = [1:5;6:10;11:15;16:20];
    >> A(end,:) %取A最后一行ans =16    17    18    19    20>> A([1,4],3:end) %取A第1、4两行中第3列到最后一列的元素ans =3     4     518    19    20
    
  3. 利用空矩阵删除矩阵的元素

    空矩阵是指没有任何元素的矩阵,即在建立矩阵时,中括号中为空。

    X = []
    
    >> A = [1,2,3,0,0;7,0,9,2,6;1,4,-1,1,8]A =1     2     3     0     07     0     9     2     61     4    -1     1     8>> A(:,[2,4]) = [] %删除A的第2列和第4列的元素A =1     3     07     9     61    -1     8
    
  4. 改变矩阵的形状

    reshape(A,m,n)函数在矩阵总元素保持不变的前提下,将矩阵A重新排成m×n的二维矩阵。

    >> x = [23,45,65,34,65,34,98,45,78,65,43,76]; %12个元素的行向量
    >> y = reshape(x , 3 , 4)y =23    34    98    6545    65    45    4365    34    78    76>> z = reshape(y , 2, 6)z =23    65    65    98    78    4345    34    34    45    65    76
    

    reshape函数只是改变原矩阵的行数和列数,即改变其逻辑结构,但并不改变原矩阵元素个数及其存储顺序。

    A(:)将矩阵A的每一列元素堆叠起来,成为一个列向量,从而改变了矩阵的形状。

    >> A = [-45,65,71;27,35,91]A =-45    65    7127    35    91>> B = A(:)B =-452765357191
    %等价于 reshape(A,6,1)
    

2.3 变量及其操作

2.3.1 变量与赋值语句

在 MATLAB中,变量名是以字母开头,后接字母、数字或下画线的字符序列,最多63个字符。

在MATLAB中,变量名区分字母的大小写。

注意:MATLAB 提供的标准函数名以及命令名必须用小写字母。

MATLAB两种赋值语句格式:

  • 变量 = 表达式
  • 表达式

表达式是用运算符将有关运算量连接起来的式子,其结果是一个矩阵。

第一种形式的赋值语句执行时,MATLAB将右边表达式的值赋给左边的变量,而第二种形式的赋值语句执行时,将表达式的值赋给MATLAB的预定义变量ans.一般地,运算结果在命令行窗口中显示出来。

示例

>> x = sqrt(7) - 2i;
>> y = exp(pi / 2);
>> z = (5 + cos(47 * pi / 180)) / (1 + abs(x - y))z =1.4395
2.3.2 预定义变量

系统本身定义的变量。

预定义变量 含义 预定义变量 含义
ans 计算结果的默认赋值变量 nargin 函数输入参数个数
eps 机器零阈值 nargout 函数输出参数个数
pi 圆周率π的近似值 realmax 最大正实数
i,j 虚数单位 realmin 最小正实数
inf ,Inf 无穷大,如1/0的结果 lasterr 存放最新的错误信息
NaN,nan 非数,如0/0,inf/inf的结果 lastwarn 存放最新的警告信息

使用时尽量避免对这些变量重新赋值

2.3.3 变量的管理
  1. 内存变量的删除与修改

    MATLAB 工作区窗口专门用于内存变量的管理。在工作区窗口中可以显示所有内存变量的属性。当选中某些变量后,选择右键快捷菜单中的“删除”命令,就能清除这些变量。

    clear命令用于删除 MATLAB 工作空间中的变量。who和 whos 这两个命令用于显示在MATLAB工作空间中已经驻留的变量名清单。who命令只显示出驻留变量的名称,whos 在给出变量名的同时,还给出它们的大小、所占字节数及数据类型等信息。

    >> who您的变量为:A    B    C    D    I    J    R    ans  ri   t    x    y    z    >> whosName      Size            Bytes  Class     AttributesA         2x3                48  double              B         6x1                48  double              C         6x6               288  double              D         2x2                32  double              I         1x3                24  double              J         1x3                24  double              R         2x3                48  double              ans       2x3                48  double              ri        2x3                96  double    complex   t         1x6                48  double              x         1x1                16  double    complex   y         1x1                 8  double              z         1x1                 8  double
    
  2. 内存变量文件

    利用MAT 文件可以把当前MATLAB工作区中的一些有用变量长久地保留下来。MAT文件是 MATLAB 保存数据的一种标准的二进制格式文件,扩展名一定是.mat。MAT 文件的生成和装入由save和 load命令来完成。

    save 文件名 [变量名表] [-append][-ascii]
    load 文件名 [变量名表] [-ascii]
    

    其中,文件名可以带路径,但不需要带扩展名.mat,命令默认对MAT 文件进行操作。

    变量名表中的变量个数不限,只要内存或文件中存在即可,变量名之间以空格分隔。当变量名表省略时,保存或装入全部变量。-ascii选项使文件以 ASCII格式处理,省略该选项时文件将以二进制格式处理。save命令中的-append选项控制将变量追加到MAT 文件中。

MATLAB程序设计与应用 2. 第2章 MATLAB数据及其运算 2.1 MATLAB数值数据 2.2 MATLAB矩阵的表示 2.3 变量及其操作相关推荐

  1. MATLAB程序设计与应用 4.1 M文件

    MATLAB程序设计与应用 文章目录 MATLAB程序设计与应用 4. 第4章 MATLAB程序流程控制 4.1 M文件 4.1.1 M文件的建立与打开 4.1.2 M文件的分类 4. 第4章 MAT ...

  2. MATLAB程序设计与应用 3.1 特殊矩阵

    MATLAB程序设计与应用 文章目录 MATLAB程序设计与应用 3. 第3章 MATLAB矩阵处理 3.1 特殊矩阵 3.1.1 通用的特殊矩阵 3.1.2 用于专门学科的特殊矩阵 3. 第3章 M ...

  3. MATLAB程序设计与应用 4.2 程序控制结构

    MATLAB程序设计与应用 4. 第4章 MATLAB程序流程控制 文章目录 MATLAB程序设计与应用 4. 第4章 MATLAB程序流程控制 4.2 程序控制结构 4.2.1 顺序结构 4.2.2 ...

  4. matlab欠阻尼系统注释,MATLAB 实用教程:第5章MATLAB程序设计

    <MATLAB 实用教程:第5章MATLAB程序设计>由会员分享,可在线阅读,更多相关<MATLAB 实用教程:第5章MATLAB程序设计(31页珍藏版)>请在人人文库网上搜索 ...

  5. Matlab结构第三版,MATLAB程序设计(原书第3版)

    图书简介 本书展示使用MATLAB解决各种典型问题的方法和技巧,不仅指导读者编写清晰.高效.良好的MATLAB程序,还介绍了大量MATLAB的实用函数.全书共9章,前7章涵盖MATLAB的基本概念和实 ...

  6. matlab 程序设计

    1.M文件   用Matlab 语言编写的程序,称为M文件,后缀名为 .M.实质上M文件也就是一个文本文件,可以使用任何编辑程序来建立和编辑,默认使用Matlab提供的文本编辑器打开进行编辑.   在 ...

  7. matlab平面问题编程,有限元平面矩形单元MATLAB程序设计.docx

    有限元平面矩形单元MATLAB程序设计 有限元平面矩形单元MATLAB程序设计摘要本论文主要研究内容是有限元平面矩形单元的基本原理和MATLAB软件的图形用户界面及函数编程的基本知识,并根据有限元平面 ...

  8. matlab编写文件格式,MATLAB程序设计教程(4)——MATLAB文件操作

    MATLAB程序设计教程(4)--MATLAB文件操作 第4章MATLAB文件操作 4.1 文件的打开与关闭 4.2  文件的读写操作 4.3  数据文件定位 4.1 文件的打开与关闭 4.1.1 文 ...

  9. matlab中sqp的算法原理_最优化方法及其Matlab程序设计 马昌凤

    内容简介<最优化方法及其Matlab程序设计>较系统地介绍了非线性最优化问题的基本理论和算法,以及主要算法的Matlab程序设计,主要内容包括(精确或非精确)线搜索技术.最速下降法与(修正 ...

最新文章

  1. 服务器虚拟机网卡怎么配置文件,VMWARE复制虚拟机之后,需重新配置网卡(CENTOS 6)...
  2. 【论文解读】突破置换模块计算瓶颈,MSRA开源轻量版HRNet,超越主流轻量化网络!|CVPR2021...
  3. C# webkit内核 网页填表
  4. jdk 8 时区 转换_使用JDK 8将收藏转换为地图
  5. 将Application按钮从任务栏中去掉
  6. datatable怎么根据两列分组_公司要IT转型,我该怎么办?用Python进行数据处理
  7. 在elementUI中使用 el-autocomplete 实现远程搜索的下拉框
  8. 一个可变参数类型检查的示例
  9. LeetCode(122)——买卖股票的最佳时机 II(JavaScript)
  10. hive SQL Standard Based Hive Authorization 权限自定义(二)
  11. CAN FD实战之示波器捕捉波形及对照CAN FD帧定义解析CAN FD帧
  12. 玉米稻风波被中途扼杀 国稻种芯-何登骥:生物育种风险机制
  13. ThreadAbortException问题
  14. python提取XML信息保存为txt
  15. wamp出现拒绝访问
  16. Python基于OpenCV的交通路口红绿灯控制系统设计
  17. Self-Signed SSL证书创建和使用
  18. AUTOCAD——图纸歪了如何对齐
  19. 计算机动作路径教案,《引导路径动画》教案
  20. C语言 字节数组转为字符串

热门文章

  1. 阿里竟然雇佣了一只大猴子...
  2. aelf Enterprise 1.0.0 Preview 2 版正式发布!
  3. windows外接一个显示屏可以,两个黑屏解决办法
  4. JAVA实现命令助手_samples/简单语音编程,将手机打造成智能助手.md · javalovercn/HomeCenter - Gitee.com...
  5. 【系】微信小程序云开发实战坚果商城-云开发之首页数据实现
  6. GOOGLE学术搜索技巧
  7. linux操作系统 第07章 磁盘管理
  8. 《高效能人的七个习惯》
  9. vb.net 图片水平翻转_公务员行测图形推理考点:位置类考点“翻转”【秒杀技巧】...
  10. mutt配置文件_CentOS 下配置以 smtp 方式(msmtp)使用 mutt