matlab第二讲矩阵的输入与生成.docx
《matlab第二讲矩阵的输入与生成.docx》由会员分享,可在线阅读,更多相关《matlab第二讲矩阵的输入与生成.docx(18页珍藏版)》请在冰豆网上搜索。
![matlab第二讲矩阵的输入与生成.docx](https://file1.bdocx.com/fileroot1/2023-1/8/382c9bde-3ab4-4285-aad2-d008987bdc3f/382c9bde-3ab4-4285-aad2-d008987bdc3f1.gif)
matlab第二讲矩阵的输入与生成
第二讲矩阵的输入与生成
2.1矩阵的创建
2.2数组的生成
2.3数组的应用—矩阵的裁剪
2.4矩阵的生成
2.1矩阵的创建
1、直接输入
例1:
>>a=[123;456]
a=
123
456
注:
1.必须使用方括号将所有元素括起来;
2.行与行之间用分号或回车符分隔;
3.同行元素用空格或逗号分隔;
4.该方法只适合创建小型矩阵。
2、通过函数创建矩阵
对于一些特殊矩阵,可利用Matlab的函数运算创建。
例2:
x=[0,pi/6,pi/3;pi/2,2*pi/3,5*pi/6];
>>y=sin(x)
y=
00.50000.8660
1.00000.86600.5000
3、导入数据创建矩阵
通过其他途径得到的数据(例如实验中测得的数据)可以使用数据导入向导(ImportWizard)调入Matlab的工作空间。
(load,xlaread都是导入数据的命令)
2.2数组的生成
Matlab中的数组在外观上与矩阵毫无差别,也就是说矩阵的输入方法可以直接移植到数组的输入上。
同样,下述关于数组的生成方法也可以用来生成矩阵。
Matlab中数组与矩阵的差别完全在于运算规则上。
1、i:
j:
k
创建从i开始,步长为j,到k结束的数字序列,即i,i+j,i+2j,…,k。
数字i、j和k不必是整数,该序列的最后一个数是小于或等于k。
如果j=1,则可简写为i:
k。
如果j=0,则返回一个空矩阵。
如果j>0且k
如果j<0且k>i,则返回一个空矩阵。
例3:
>>2:
5
ans=
2345
>>2.1:
1.1:
5.3
ans=
2.10003.20004.3000
>>1:
-1:
-4
ans=
10-1-2-3-4
>>1:
-1:
4
ans=
Emptymatrix:
1-by-0
2、linspace(a,b,n)
在区间[a,b]上创建一个有n个元素的向量,这n个数把整个区间线性分隔,即把区间[a,b]等分为n-1个小区间,取其n个节点。
n=100时可简写为linspace(a,b)。
这个命令和冒号表示形式相近,但是它直接定义了数据的个数。
例3:
>>a=linspace(0,6,6)
a=
01.20002.40003.60004.80006.0000
注:
以上关于数组生成的命令经常用于作图,如:
x=linspace(0,pi);%生成数组
y=sin(x);%计算函数
plot(x,y);%作图
2.3数组的应用—矩阵的裁剪
A(行数组,列数组)
取出矩阵A中‘行数组’指定的行,‘列数组’指定的列元素按原次序排列组成的矩阵。
具体用法如下:
A(i,j)返回矩阵A中下(i,j)的元素值。
A(:
j)返回矩阵A中第j列列向量。
A(i,:
)返回矩阵A中第i行行向量。
A(:
j:
k)返回由矩阵A中的第j列,第j+1列,直到第k列列向量组成的子阵。
A(i:
k,:
)返回由矩阵A中的第i行,第i+1行,直到第k行行向量组成的子阵。
A(i:
k,j:
l)返回由矩阵A中的第i行到第k行行向量和第j列到第l列列向量组成的子阵。
A(:
[j1j2…])返回矩阵A的第j1列、第j2列等的列向量。
A([i1i2…],:
)返回矩阵A的第i1行、第i2行等的行向量。
A([i1i2...],[j1j2...])返回矩阵第i1行、第i2行等和第j1列、第j2列等的元素。
例4:
>>A=magic(5)
A=17241815
23571416
46132022
101219213
11182529
>>A(2,3)
ans=7
>>A(2,:
)
ans=23571416
>>A(:
3)
ans=1
7
13
19
25
>>A(1:
3,:
)
ans=17241815
23571416
46132022
>>A(:
3:
5)
ans=1815
71416
132022
19213
2529
>>A(1:
3,3:
5)
ans=1815
71416
132022
>>A([24],:
)
ans=23571416
101219213
>>A(:
[24])
ans=248
514
620
1221
182
>>A([135],[24])
ans=248
620
182
A(:
)将矩阵A中的每列合并成一个长的列向量。
A(j:
k)返回一个行向量,其中的元素为A(:
)中的从第j个元素到第k个元素。
A([j1j2…])返回一个行向量,其中的元素为A(:
)中的第j1、j2…元素。
例5:
>>A=magic(3)
A=816
357
492
>>A(:
)
ans=8
3
4
1
5
9
6
7
2
>>A(2:
5)
ans=3415
>>A([13579])
ans=84562
2.4矩阵的生成
ones(n)建立一个nxn的1矩阵。
ones(m,n)建立一个mxn的1矩阵。
ones(size(A))建立一个和矩阵A同样大小的1矩阵。
例6:
>>a=ones(3,4)
a=
1111
1111
1111
zeros(n)建立一个nxn的0矩阵。
zeros(m,n)建立一个mxn的0矩阵。
zeros(size(A))建立一个和矩阵A同样大小的0矩阵。
例7:
>>a=zeros(3)
a=
000
000
000
eye(n)建立一个nxn的单位矩阵。
注意eye命令只能用来建立二维矩阵。
eye(m,n)建立一个mxn的单位矩阵。
注意eye命令只能用来建立二维矩阵。
eye(size(A))建立一个和矩阵A同样大小的单位矩阵。
例8:
>>a=eye(3)
a=
100
010
001
>>b=eye(3,4)
b=
1000
0100
0010
>>b=eye(4,3)
b=
100
010
001
000
rand产生在0~1之间均匀分布的随机数;每调用一次给一个新的数值。
rand(n)产生一个nxn的矩阵,其元素为0~1之间均匀分布随机数。
rand(m,n)产生一个mxn的矩阵,其元素是0~1之间均匀分布的随机数。
例9:
>>rand(3)
ans=
0.45650.44470.9218
0.01850.61540.7382
0.82140.79190.1763
randn产生零均值、单位方差的正态分布随机数。
randn(n)产生一个n×n的矩阵,其元素为零均值、单位方差的正态分布随机数。
randn(m,n)产生一个m×n的矩阵,其元素为零均值、单位方差的正态分布随机数。
例10:
>>randn(3,5)
ans=
-0.43260.28771.18920.1746-0.5883
-1.6656-1.1465-0.0376-0.18672.1832
0.12531.19090.32730.7258-0.1364
diag(A)生成一个由矩阵A主对角线元素组成的列向量。
主对角线总是从矩阵左上角开始。
对于方阵来说它结束于矩阵的右下角。
diag(x)生成一个n维的方阵,它的主对角线元素值取自向量x,其余元素的值都为0。
diag(A,k)生成一个由矩阵A第k条对角线的元素组成的列向量。
k=0为主对角线;k<0为下第k对角线;k>0为上第k对角线。
diag(x,k)生成一个(n+abs(k))维的方阵,该矩阵的第k条对角线元素取自向量x,其余元素都为零。
例11:
>>A=magic(4)
A=162313
511108
97612
414151
>>a=diag(A)
a=16
11
6
1
>>B=diag(a)
B=
16000
01100
0060
0001
>>b=diag(A,1)
b=2
10
12
>>C=diag(b,-1)
C=
0000
2000
01000
00120
triu(A)生成一个和A大小相同的上三角矩阵。
该矩阵的主对角线及以上元素取自A中相应元素,其余元素都为零。
triu(A,k)生成一个和A大小相同的上三角矩阵。
该矩阵的第k条对角线及以上元素取自A中相应元素,其余元素都为零。
命令triu(A,0)等同于命令triu(A)。
tril(A)生成一个和A大小相同的下三角矩阵。
该矩阵的主对角线及以下元素取自A中相应元素,其余元素都为零。
tril(A,k)生成一个和A大小相同的下三角矩阵。
该矩阵的第k条对角线及以下元素取自A中相应元素,负数k表示主对角线下的对角线。
其余元素都为零。
命令tril(A,0)等同于命令tril(A)。
例12:
>>A=magic(5)
A=
17241815
23571416
46132022
101219213
11182529
>>triu(A)
ans=17241815
0571416
00132022
000213
00009
>>tril(A,-1)
ans=
00000
230000
46000
10121900
11182520
fliplr(A)通过二维矩阵A的行元素按照B(i,j)=A(j,n-j+1)交换位置生成一个新矩阵。
这里的‘lr’是‘left-right’的缩写。
flipud(A)通过二维矩阵A的列元素按照B(i,j)=A(n-i+1,j)交换位置生成一个新矩阵。
这里的‘ud’是‘up-down’的缩写。
例13:
>>A=magic(3)
A=
816
357
492
>>fliplr(A)
ans=618
753
294
>>flipud(A)
ans=492
357
816
rot90(A)生成一个由矩阵A逆时针旋转90°而得的新阵。
rot90(A,k)生成一个由矩阵A逆时针旋转k×90°而得到的新阵。
例14:
>>A=magic(3)
A=
816
357
492
>>rot90(A)
ans=
672
159
834
hilb(n)生成一个n×n的希尔伯特矩阵。
例15:
>>formatrat
>>hilb(4)
ans=
11/21/31/4
1/21/31/41/5
1/31/41/51/6
1/41/51/61/7
invhilb(n)生成一个n×n的希尔伯特矩阵的逆矩阵,其元素都为整数。
例16:
>>invhilb(4)
ans=
16-120240-140
-1201200-27001680
240-27006480-4200
-1401680-42002800
>>invhilb(4)*hilb(4)
ans=
1.0000000
01.000000
001.00000
00-0.00001.0000
magic(n)给出一个n×n的魔方矩阵。
(行和,列和,两条对角线和相等)
例17:
>>magic(4)
ans=
162313
511108
97612
414151
pascal(n)返回一个n×n的Pascal矩阵,它是对称、正定的矩阵,它的元素由Pascal三角(杨辉三角)组成。
它的逆矩阵的所有元素是整数。
例18:
>>pascal(4)
ans=
1111
1234
13610
141020
练习直接输入生成矩阵
;
取矩阵
的第1、3行元素生成矩阵
;
将矩阵
按列合成一个列向量。
以
为首项,
为步长,
为末项生成向量
;
计算向量
的正弦值,赋值到变量
;
以向量
为对角线生成对角矩阵
。
生成一个5阶希尔伯特矩阵
;
取矩阵
的第1、3、5行,第2到4列元素生成矩阵
;
左右翻转矩阵
得矩阵
;
对矩阵
逆时针旋转90度得矩阵
;
取矩阵
的主对角线向量
;
以向量
为第-3对角线生成对角矩阵
(矩阵
得阶数是多少?
)。