数组运算
1.数组的创建与操作
普通创建方式:
1 2 3 4 5 |
>> A = []; >> B = [1 2 3 4 5]; >> C = [1,2,3,4,5]; >> D = [1;2;3;4;5]; >> E = B'; %转置 |
利用冒号创建一维数组:
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维数相同
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
>> 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 |
>> 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 |
点积:dot
利用dot函数可进行点积的运算,要求A、B维度相同
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
- 当两个比较量是维度相等的数组时,逐一比较两个数组相同位置的元素,并分别给出比较结果,比较结果也是相同维度的数组
1 2 3 4 5 |
>> A>B ans = 0 0 1 1 1 |
逻辑运算:
- 非零为真,返回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阵的逆矩阵整数矩阵
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
>> 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 |
可以看出其都是对称矩阵
托普利兹(Toeplitz)矩阵
它由两个向量定义,一个行向量,一个列向量。对称的托普利兹由单一向量来定义。
- toeplitz(k,r):生成非对称托普利兹矩阵。第一列为k,第一行为r,其余元素等于左上角元素
- topelitz(c):生成堆成托普利兹矩阵
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 = 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 |
魔方(magic)矩阵
魔方矩阵中每行、列和两条对角线上的元素和相等。
1 2 3 4 5 6 7 |
>> A = magic(3) A = 8 1 6 3 5 7 4 9 2 |
帕斯卡(pascal)矩阵
- A = pascal(n):返回n阶的对称正定Pascal矩阵,其中元素是由Pascal三角组成的,其逆矩阵的元素都是整数
- A = pascal(n,1):返回由下三角的Cholesky因子组成的Pascal矩阵,他是对称的,所以他是自己的逆
- A = pascal(n,2):返回pascal(n,2)的转置和交换形式。A是单位矩阵的立方根
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 = 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 |
范德蒙(Vandermonde)矩阵
- A = vander(v):生成范德蒙阵,矩阵的列是向量v的幂,即A(i,j) = v(i)^(n-j),其中n = length(v)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
>> 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 |
2.改变矩阵大小
矩阵的合并
矩阵的合并就是把两个及两个以上的矩阵合成一个矩阵
- C = [A B] %将两个矩阵列数相加,要求两矩阵行数相等
- C = [A; B] %将两个矩阵行数相加,要求两矩阵列数相等
矩阵行列的删除
矩阵行列的删除就是把该行或者该列赋予一个空矩阵”[]”即可。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
>> A = magic(3) A = 8 1 6 3 5 7 4 9 2 >> A(2,:) = [] A = 8 1 6 4 9 2 |
其中“,:”表示的是整行元素
3.矩阵重构
矩阵重构的两个比较重要的运算是转置和共轭转置。
- 若矩阵A为实数,则A’与A.’都是求A的转置,且结果相同
- 若矩阵A为复数,则A’表示求A得共轭转置,A.’表示求A得转置
转载请注明:燕骏博客 » MATLAB自学笔记(七):数组运算与矩阵操作
赞赏作者微信赞赏
支付宝赞赏
