Matlab语言(一)

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+longshort

>> 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

>> 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(d)A(i,j)
表示内容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的行列数,所以矩阵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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值