许可优化
许可优化
产品
产品
解决方案
解决方案
服务支持
服务支持
关于
关于
软件库
当前位置:服务支持 >  软件文章 >  Matlab语言(一):基础语法与数据类型详解

Matlab语言(一):基础语法与数据类型详解

阅读数 29
点赞 0
article_banner

文章目录

  • 1.数值数据类型的分类 single表示单精度浮点型 复型数据 2.format命令 3.常用数学函数 exp函数:计算e^n^ 三角函数 abs函数 取整函数round fix ceil floor 取余函数rem(num1,num2) 4.函数应用举例 求一个千位数字的个位十位百位千位数字 求[1, 100]间所有素数 5.Matlab变量的管理 6.矩阵的建立 利用已建好的矩阵建立更大的矩阵 利用实部矩阵和虚部矩阵构成复数矩阵 7.向量的建立 冒号表达式 linspace函数 8.结构矩阵和单元矩阵 结构矩阵 单元矩阵 9.矩阵元素的引用 A(d)的表示类型 D = sub2ind(size(A), I, J) A(i, j)的表示类型 (1)i, j为数字 (2)i, j为冒号表达式或[,]表达式 冒号表达式 [,]表达式 end运算符 (3)[I, J] = int2sub(S, D) 当S为具体的矩阵时: 当S为没有具体元素的矩阵时: 利用空矩阵"[]"删除元素 改变矩阵的形状 B = reshape(A, m, n) B = A(:) :):):):)


1.数值数据类型的分类

single表示单 精度  浮点型

>> class(4)

ans =

    'double'//整数的数据类型为double,即双精度浮点型

>> class(single(4))//强制转换数据类型为single

ans =

    'single'

复型数据

即复数,包括实部和虚部两部分。实部和虚部默认双精度浮点型,虚数单位用i或j表示。

   real函数:求复数的实部

   imag函数:求复数的虚部

>> real(6+5i)

ans =

     6

>> imag(6+5i)

ans =

     5

2.format命令

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

   format命令的格式为:
f o r m a t + 格 式 符 ( 如 l o n g , s h o r t ) format+格式符(如long,short) format+格式符(如long,short)

>> format long   //格式符为long
>> 50/3

ans =

  16.666666666666668

>> 30/4

ans =

   7.500000000000000
//会发现long的输出形式会保留很多位小数
>> format//再输入format表示恢复到默认输出状态
>> 30/4

ans =

    7.5000

>> 50/3

ans =

   16.6667
   //Matlab在默认状态下只输出4位小数

3.常用数学函数

exp函数:计算en

>> A = [1,2;3,4;5,6]//一个3行2列的矩阵

A =

     1     2
     3     4
     5     6

>> B = exp(A)

B =             //B也是一个3行2列的矩阵

   1.0e+02 *

   0.027182818284590   0.073890560989307
   0.200855369231877   0.545981500331442
   1.484131591025766   4.034287934927351

三角函数

三角函数在Matlab中默认是以弧度值为单位的,若要以角度值为单位,则要在函数名称后加上"d"以示区别

>> sin(pi/2)

ans =

     1

>> sind(90)//加上"d"表示以角度值为单位

ans =

     1

 abs  函数

abs函数可以求实数的绝对值,复数的模,字符串的ASCII码值

>> abs(-9)

ans =

     9

>> abs(6+2i)

ans =

    6.3246

>> abs('abc')

ans =

    97    98    99

取整函数 round   fix ceil floor

round:四舍五入取整

   fix:向靠近0的方向取整

   ceil:向较大的取整,即向上取整

   floor:向较小的取整,即向下取整

>> round(-3.5)

ans =

    -4
>> fix(-3.9)

ans =

   -3
>> ceil(-3.9)

ans =

    -3
>> floor(-3.4)

ans =

    -4

取余函数rem(num1,num2)

取余函数的计算为:num1/num2的余数

>> rem(20,3)

ans =

     2

4.函数应用举例

求一个千位数字的个位十位百位千位数字

原理:不断前移小数点并舍弃小数点后的小数(用floor函数向下取整)然后除以10取余

>> m = 4456;
>> m1 = rem(m,10);//个位
>> m2 = rem(floor(m/10),10);//十位
>> m3 = rem(floor(m/100),10);//百位
>> m4 = floor(m/1000);//千位
m1 =

     6

>> m2

m2 =

     5

>> m3

m3 =

     4
>> m4

m4 =

     4

求[1, 100]间所有素数

Matlab有专门查找素数的isprime函数,若为素数,函数返回值为1;若不为素数,函数的返回值为0

>> isprime(1)

ans =

  logical

   0
>> isprime(2)

ans =

  logical

   1

要将返回值不为0的数即素数全部找出来,还需要一个专门用来查找非零数的find函数。find函数不仅能找到非零的数,并且在向量和矩阵中还能找到该非0元素的位置。

>> find(0)

ans =

     []
>> find(-1)

ans =

     1

由于find函数通常作用在向量或者矩阵中,所以我们要初始化一个向量,例如下面这样:

>> x = 1:10

x =

     1     2     3     4     5     6     7     8     9    10

最后的程序如下:

>> x = 1:100;//初始化一个向量x,取值从1到100的整数
>> k = isprime(x);//查找1到100的素数
>> k1 = find(k);//将所有素数的位置找到
>> p = x(k1)//位置对应的向量元素即为素数

p =

  1 至 15 列

     2     3     5     7    11    13    17    19    23    29    31    37    41    43    47

  16 至 25 列

    53    59    61    67    71    73    79    83    89    97

5.Matlab变量的管理

Matlab变量我们可以在工作区右键点击变量来对其进行删除或者改变其值、重命名等操作。
在这里插入图片描述

如果某些变量我们要多次利用,可以将其保存到中,其扩展名为.mat,也叫MAT文件

比如有两个变量a和m,我想下次重新打开Matlab时直接调用者两个变量,就可以先将他们保存进一个MAT变量中

>> save madata a m //madata是自己命名的一个MAT文件,执行save命令即可将这两个变量存储进该文件中

当下次重新打开Matlab后,输入load madata回车即可加载a和m变量
在这里插入图片描述

   最后强调一下Matlab中变量命名的规范:以字母开头,后接字母、数字或下划线字符序列。

6.矩阵的建立

利用已建好的矩阵建立更大的矩阵

要注意的是,构成大矩阵的小矩阵,其行数和列数必须相同

>> A = [12,11,10;1,2,3];//2行3列
>> B = [1,2,3;4,5,6];   //同样也是2行3列
>> C = [A,B;B,A]

C =

    12    11    10     1     2     3
     1     2     3     4     5     6
     1     2     3    12    11    10
     4     5     6     1     2     3

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

同样,实部矩阵和虚部矩阵的行数列数也要必须相同

>> B = [1,2,3;4,5,6]; //2行3列
>> C = [2,3,4;5,6,7]; //同样也是2行3列
>> A = C + i * B

A =

   2.0000 + 1.0000i   3.0000 + 2.0000i   4.0000 + 3.0000i
   5.0000 + 4.0000i   6.0000 + 5.0000i   7.0000 + 6.0000i

7.向量的建立

向量是特殊的矩阵,向量可以被看做是1行多列的矩阵

冒号表达式

e 1 : e 2 : e 3 e1 : e2 : e3 e1:e2:e3

   e1为初始值,e3为终止值,e2为步长(即相邻两元素的差值)

   e2可以省略不写,如果省略则Matlab

>> 1:5    //省略e2,默认步长为1

ans =

     1     2     3     4     5

>> 1:1:5

ans =

     1     2     3     4     5

linspace函数

Matlab中专门有函数来表示向量,即linspace函数。其格式为:
l i n s p a c e ( a , b , n ) linspace(a, b, n) linspace(a,b,n)

   a为第一个元素,b为最后一个元素,n为元素总数

   n也可以默认不写,但默认不写Matlab默认元素总数为100个

>> linspace(0, pi, 5)

ans =

         0    0.7854    1.5708    2.3562    3.1416

8.结构矩阵和单元矩阵

结构矩阵

由结构数据构成的矩阵叫结构矩阵。结构矩阵中的每个元素a(1) a(2) a(3)可以有多个不同值类型的成员x1 x2 x3,这样 “1元素——多成员” 就是一个,也可以说每个元素就是一个结构数据类型。

   就好比有多个学生a(1) a(2) a(3),每个学生都有姓名x1、学号x2、班级x3等 信息 ,在这里学生就是矩阵里的元素,学生的不同信息就是元素的成员。

   结构矩阵格式为:
结 构 矩 阵 元 素 . 成 员 名 = 表 达 式 结构矩阵元素.成员名 = 表达式 结构矩阵元素.成员名=表达式

>> a(1).x1 = 10; a(1).x2 = 'liu'; a(1).x3 = [11,21;23,45];
>> a(2).x1 = 12; a(2).x2 = 'lou'; a(2).x3 = [21,31;13,35];
>> a(3).x1 = 13; a(3).x2 = 'yat'; a(3).x3 = [10,9;12,31]

a = 

  包含以下字段的 1×3 struct 数组:

    x1
    x2
    x3

在这里插入图片描述

单元矩阵

单元矩阵和一般矩阵类似,只是要用大括号括起来

>> load('matlab.mat')
>> b = {12,'a',[1,2;3,4];10,'b',[2,3;4,5];8,'c',[0,1;2,3]}

b =

  3×3 cell 数组

    {[12]}    {'a'}    {2×2 double}
    {[10]}    {'b'}    {2×2 double}
    {[ 8]}    {'c'}    {2×2 double}

在这里插入图片描述

9.矩阵元素的引用

矩阵元素引用的基本格式为:
A ( d ) 或 A ( i , j ) A(d)或A(i,j) A(d)或A(i,j)


A()A()
表示内容A矩阵中的单个元素A矩阵中的单个元素或A的子矩阵
符号内容只能为数字可以为数字,可以为冒号表达式或者[,]表达式
符号含义矩阵元素的序号i:矩阵元素的行号或者子矩阵包括的行号;j:矩阵元素的列号或者子矩阵包括的列号
相互转换d转i, j:int2sub函数[i, j转d:sub2ind函数
A(d)的表示类型

Matlab中存储矩阵是按照“先列后行”的顺序,从上往下存储的。

A =

     2     3     4     0     0     0
     5     6     7     0     0    10

>> A(5)

ans =

     4  //矩阵中第5个元素是4,位于第1行第3列

但通常情况下Matlab代码如果要表示矩阵的行和列,通常是“行在前,列在后”,这与Matlab存储矩阵的顺序相反,所以要实现行列数向序号的转换,需要调用sub2ind函数。

D = sub2ind( size (A), I, J)

sub2ind函数的格式为:
D = s u b 2 i n d ( s i z e ( A ) , I , J ) D = sub2ind(size(A), I, J) D=sub2ind(size(A),I,J)

   I、J、D为矩阵。I矩阵中所有的元素为矩阵A中某些元素的行下标;J矩阵中所有的元素为矩阵A中某些元素的列下标。

矩阵D的行数和列数取决于矩阵I和矩阵J的行列数,所以

A =

     2     3     4     0     0     0
     5     6     7     0     0    10
>> D = sub2ind(size(A),[1;2],[3;4]/*第1行第3列的元素,
与第2行第4列的元素。*/)

D =

     5
     8   
     //I,J矩阵均为两行一列,所以D矩阵也为两行一列
A(i, j)的表示类型

(1)i, j为数字

如果i或者j大于原来矩阵的行数和列数,那么Matlab将自动扩展原来的矩阵,并将扩展后没有赋值的元素设置为0

>> A = [1,2,3;4,5,6];
>> A(4,5) = 10  //矩阵A只有2行3列

A =

     1     2     3     0     0
     4     5     6     0     0
     0     0     0     0     0
     0     0     0     0    10  
 //除了原来的2行3列和赋值的A(4,5),其余都为0

(2)i, j为冒号表达式或[,]表达式
冒号表达式

m:n表示从第m行(列)到第n行(列),取所有元素

   m:w:n表示从第m行(列)到第n行(列),取每隔w-1行(列)的所有元素

   :表示取所有行(列)的元素

>> A = [1,2,3,4;5,6,7,8;9,0,0,0];
>> A(1:3, :)

ans =

     1     2     3     4
     5     6     7     8
     9     0     0     0
>> A(1:2:3,2:4)

ans =

     2     3     4
     0     0     0

[,]表达式

[m,n]表示取第m行(列)和第n行(列)的所有元素

>> A = [1,2,3,4;5,6,7,8;9,0,0,0];
>> A(1:2:3,[2,4])

ans =

     2     4
     0     0

end运算符

end放在行就表示最后一行;放在列就表示最后一列

>> A = [1,2,3,4;5,6,7,8;9,0,0,0];
>> A(end,:)//最后一行的所有元素

ans =

     9     0     0     0
>> A([1,3],2:end)//第1行和第3行中,第2列到最后一列的所有元素

ans =

     2     3     4
     0     0     0

(3)[I, J] = int2sub(S, D)

有时候需要把A(i, j)转化为A(d)格式,这时候就需要调用int2sub函数。int2sub函数的格式为:
[ I , J ] = i n t 2 s u b ( S , D ) [I, J] = int2sub(S, D) [I,J]=int2sub(S,D)

   D为某元素的序号

当S为具体的矩阵时:

>> A = [1,2,3,4;5,6,7,8;9,0,0,0];
>> [I,J] = ind2sub(size(A),7)//矩阵A中第7个元素

I =

     1


J =

     3
           //第7个元素位于第1行第3列

当S为没有具体元素的矩阵时:
>> [I,J] = ind2sub([3,3],[1,3,5])
//[3,3]表示该矩阵为一个3行3列的矩阵,但没有具体元素
//[1,3,5]分别表示该[3,3]矩阵中第1、第3、第5个元素
I =

     1     3     2


J =

     1     1     2
//第1、第3、第5个元素分别位于矩阵的:第1行第1列;第3行第1列;第2行第2列
利用空矩阵"[]"删除元素

我们可以将矩阵中的元素赋值为空矩阵"[]",即可删除该元素。赋值为空矩阵的操作也叫。

   值得注意的是,空赋值至少要有一个冒号索引。例如A(:,[2,3]) = [],等号左边的式子有一个冒号表达式。

>> A = [1,2,3,4;5,6,7,8;9,0,0,0];
>> A([1,3],4) = []
空赋值只能具有一个非冒号索引。
>> A(:,[1,3]) = []//空赋值有一个冒号索引

A =

     2     4
     6     8
     0     0
>> A(:,1:1:3) = []//空赋值有2个冒号索引

A =

     4
     8
改变矩阵的形状

B = reshape(A, m, n)

在矩阵总元素保持不变的情况下,将矩阵A重新排列成m行n列的矩阵。改变后。

A =

     2     4
     6     8
     0     0

>> B = reshape(A, 2, 3)//重新排列成2行3列的矩阵

B =

     2     0     8
     6     4     0
     //改变后矩阵中元素的序号不变,比如元素“8”在矩阵A和矩阵B的序号都是5

B = A(😃 😃😃😃😃

A(:)即把矩阵A中所有元素堆叠起来,成为一个列向量

A =

     2     4
     6     8
     0     0
>> B = A(:)

B =

     2
     6
     0
     4
     8
     0



免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删


相关文章
技术文档
QR Code
微信扫一扫,欢迎咨询~
customer

online

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 board-phone 155-2731-8020
close1
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

姓名不为空

姓名不为空
手机不正确

手机不正确

手机不正确
公司不为空

公司不为空

公司不为空