matlab 矩阵逻辑与,MATLAB自学笔记(七):数组运算与矩阵操作

数组运算

1.数组的创建与操作

普通创建方式:

Python

>> A = [];

>> B = [1 2 3 4 5];

>> C = [1,2,3,4,5];

>> D = [1;2;3;4;5];

>> E = B'; %转置

1

2

3

4

5

>>A=[];

>>B=[12345];

>>C=[1,2,3,4,5];

>>D=[1;2;3;4;5];

>>E=B';%转置

利用冒号创建一维数组:

Python

>> A = 0:5;

>> B = 0.1:0.3:8;

>> C = 8:-1:0;

1

2

3

>>A=0:5;

>>B=0.1:0.3:8;

>>C=8:-1:0;

利用logspace函数创建一维数组:

y = logspace(a,b):创建行向量y,第一个元素为10^a,最后一个元素为10^b,形成总数为50个元素的等比数列;

y = logspace(a,b,n):创建行向量y,第一个元素为10^a,最后一个元素为10^b,形成总数为n个元素的等比数列。

利用linespace函数创建一维数组:

y = linespace(a,b):创建行向量y,第一个元素为a,最后一个元素为b,形成总数为100个元素的等差数列;

y = linespace(a,b,n):创建行向量y,第一个元素为a,最后一个元素为b,形成总数为n个元素的等差数列。

2.数组间的运算

基本运算:

加、减、乘、左除、右除、乘方

加减:(A+B、A-B)要求A、B维数相同

乘法:(A.*B)数组对应元素相乘,计算结果是与A、B相同维度的数组。要求A、B维数相同

除法:左除./     右除.\                  要求A、B维数相同

Python

>> A = [1 5 8 7 6];

>> B = [2 7 3 0 2];

>> C = A.*B

C =

2 35 24 0 12

>> D = A./B

D =

0.5000 0.7143 2.6667 Inf 3.0000

>> E = A.\B

E =

2.0000 1.4000 0.3750 0 0.3333

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

>>A=[15876];

>>B=[27302];

>>C=A.*B

C=

23524012

>>D=A./B

D=

0.50000.71432.6667Inf3.0000

>>E=A.\B

E=

2.00001.40000.375000.3333

乘方:.^

Python

>> G = A.^B %数组的乘方

G =

1 78125 512 1 36

>> H = A.^2 %数组与某个确定值的乘方

H =

1 25 64 49 36

>> I = 2.^A %确定值与数组建的乘方

I =

2 32 256 128 64

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

>>G=A.^B%数组的乘方

G=

178125512136

>>H=A.^2%数组与某个确定值的乘方

H=

125644936

>>I=2.^A%确定值与数组建的乘方

I=

23225612864

点积:dot

利用dot函数可进行点积的运算,要求A、B维度相同

Python

>> J = dot(A,B)

J =

73

>> K = sum(A.*B)

K =

73

1

2

3

4

5

6

7

8

9

10

11

>>J=dot(A,B)

J=

73

>>K=sum(A.*B)

K=

73

关系运算:

当两个比较量是标量时,直接比较两个数的大小。若关系成立,则返回的结果为1;否则为0

当两个比较量是维度相等的数组时,逐一比较两个数组相同位置的元素,并分别给出比较结果,比较结果也是相同维度的数组

Python

>> A>B

ans =

0 0 1 1 1

1

2

3

4

5

>>A>B

ans=

00111

逻辑运算:

非零为真,返回1;否则返回0

当两个比较量是维度相等的数组时,逐一比较两个数组相同位置的元素,并分别给出比较结果,比较结果也是相同维度的数组

&、|、~运算法则不变

矩阵操作

1.创建矩阵

除了之前提到过的零阵(zeros)、单位阵(eye)、全1阵(ones)等特殊矩阵之外,MATLAB中还有一些其他指令用于生成实验矩阵:

函数名称

表示意义

company(p)

生成一个特征多项式为p的二维矩阵

hadamard(k)

返回一个阶数为2k的Hadamark矩阵,只有当n能被4整除时Hadamark矩阵才存在

hankel(x)

返回一个由向量x定义的Hankel方阵。该矩阵是对称矩阵,第一列元素为向量x,反三角以下的元素为0

hankel(x,y)

返回一个m*n的Hankel矩阵,其第一列元素为向量x,最后一行为向量y

magic(n)

返回一个n*n的魔方矩阵

pascal(n)

返回一个n*n的Pascal矩阵

rosser

给出Rosser矩阵,这是一个经典对称特征测试问题,大小为8*8

vander(x)

返回一个Vandermonde矩阵

wilkinson(n)

返回一个m*n的Wilkinson特征值测试矩阵

希波尔特(Hilbert)矩阵

希波尔特(Hilbert)矩阵,也称H阵,其元素为H(i,j) = 1/(i+j-1)。即他是一个条件数差的矩阵,常被用来作为实验矩阵

hilb(n):生成一个n*n的H阵

invhilb(n):生成一个n*n的H阵的逆矩阵整数矩阵

Python

>> A = hilb(4)

A =

1.0000 0.5000 0.3333 0.2500

0.5000 0.3333 0.2500 0.2000

0.3333 0.2500 0.2000 0.1667

0.2500 0.2000 0.1667 0.1429

>> B = invhilb(4)

B =

16 -120 240 -140

-120 1200 -2700 1680

240 -2700 6480 -4200

-140 1680 -4200 2800

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

>>A=hilb(4)

A=

1.00000.50000.33330.2500

0.50000.33330.25000.2000

0.33330.25000.20000.1667

0.25000.20000.16670.1429

>>B=invhilb(4)

B=

16-120240-140

-1201200-27001680

240-27006480-4200

-1401680-42002800

可以看出其都是对称矩阵

托普利兹(Toeplitz)矩阵

它由两个向量定义,一个行向量,一个列向量。对称的托普利兹由单一向量来定义。

toeplitz(k,r):生成非对称托普利兹矩阵。第一列为k,第一行为r,其余元素等于左上角元素

topelitz(c):生成堆成托普利兹矩阵

Python

>> A = toeplitz(3:6,3:2:9)

A =

3 5 7 9

4 3 5 7

5 4 3 5

6 5 4 3

>> B = toeplitz(3:6)

B =

3 4 5 6

4 3 4 5

5 4 3 4

6 5 4 3

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

>>A=toeplitz(3:6,3:2:9)

A=

3579

4357

5435

6543

>>B=toeplitz(3:6)

B=

3456

4345

5434

6543

魔方(magic)矩阵

魔方矩阵中每行、列和两条对角线上的元素和相等。

Python

>> A = magic(3)

A =

8 1 6

3 5 7

4 9 2

1

2

3

4

5

6

7

>>A=magic(3)

A=

816

357

492

帕斯卡(pascal)矩阵

A = pascal(n):返回n阶的对称正定Pascal矩阵,其中元素是由Pascal三角组成的,其逆矩阵的元素都是整数

A = pascal(n,1):返回由下三角的Cholesky因子组成的Pascal矩阵,他是对称的,所以他是自己的逆

A = pascal(n,2):返回pascal(n,2)的转置和交换形式。A是单位矩阵的立方根

Python

>> A = pascal(3)

A =

1 1 1

1 2 3

1 3 6

>> B = pascal(3,1)

B =

1 0 0

1 -1 0

1 -2 1

>> C = pascal(3,2)

C =

1 1 1

-2 -1 0

1 0 0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

>>A=pascal(3)

A=

111

123

136

>>B=pascal(3,1)

B=

100

1-10

1-21

>>C=pascal(3,2)

C=

111

-2-10

100

范德蒙(Vandermonde)矩阵

A = vander(v):生成范德蒙阵,矩阵的列是向量v的幂,即A(i,j) = v(i)^(n-j),其中n = length(v)。

Python

>> A = vander([1 3 5 7])

A =

1 1 1 1

27 9 3 1

125 25 5 1

343 49 7 1

>> B = vander([1;3;5;7])

B =

1 1 1 1

27 9 3 1

125 25 5 1

343 49 7 1

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

>>A=vander([1357])

A=

1111

27931

1252551

3434971

>>B=vander([1;3;5;7])

B=

1111

27931

1252551

3434971

2.改变矩阵大小

矩阵的合并

矩阵的合并就是把两个及两个以上的矩阵合成一个矩阵

C = [A B]                    %将两个矩阵列数相加,要求两矩阵行数相等

C = [A; B]                   %将两个矩阵行数相加,要求两矩阵列数相等

矩阵行列的删除

矩阵行列的删除就是把该行或者该列赋予一个空矩阵”[]”即可。

Python

>> A = magic(3)

A =

8 1 6

3 5 7

4 9 2

>> A(2,:) = []

A =

8 1 6

4 9 2

1

2

3

4

5

6

7

8

9

10

11

12

13

14

>>A=magic(3)

A=

816

357

492

>>A(2,:)=[]

A=

816

492

其中“,:”表示的是整行元素

3.矩阵重构

矩阵重构的两个比较重要的运算是转置和共轭转置。

若矩阵A为实数,则A’与A.’都是求A的转置,且结果相同

若矩阵A为复数,则A’表示求A得共轭转置,A.’表示求A得转置

赞赏作者

喜欢 (2)or分享 (0)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值