Matlab从入门到精通(六) |
您所在的位置:网站首页 › a减e的转置 › Matlab从入门到精通(六) |
1、行向量的定义
rowvec = [1.2 3 56]; 2、列向量的定义colvec = [1.2;3;56]; 3、逐个元素的分配矩阵B(1,1) = 1 ; B(1,2) = 2 ; B(2,1) = 3 ; B(2,2) = 4 ; B = 1 2 3 4 注意:矩阵的下标从1开始计数 4、矩阵的输入直接输入矩阵时候,矩阵元素用“空格”或者“逗号”隔开,矩阵行用“分号”隔离,整个矩阵放在方括号“[ ]”内.不必事先对矩阵维数做任何说明. 例如: A = [1,2,3;4,5,6;7,8,9] 或者 A = [1 2 3;4 5 6;7 8 9] 还可以分行输入: A=[1 2 3; 4 5 6; 7 8 9] 注意: 表达符号一定要在英文状态下输入.MATLAB对矩阵大小写是敏感的.如果不用clear指令清楚,或者重新赋值,那么该矩阵就会一直保存在工作空间中,直到指令窗(Command Window)关闭. 5、矩阵、零矩阵和单位矩阵1矩阵的所有元素全为1,零矩阵的所有元素全为零. ones(n) %建立一个n×n的1矩阵 ones(m,n,……,p) %建立一个m×n×……×p的1矩阵 ones(size(A)) %建立一个和矩阵A同样大小的1矩阵 zeros(n) %建立一个n×n的0矩阵 zeros(m,n,……,p) %建立一个m×n×……×p的0矩阵 zeros(size(A)) %建立一个和矩阵A同样大小的0矩阵 eye(n) %建立一个n×n的单位矩阵 eye(m,n) %建立一个m×n的单位矩阵 eye(size(A)) %建立一个和矩阵A同样大小的单位矩阵 例如:输入OneMatrix = ones(2,3,2) 则结果为: OneMatrix(:,:,1) = 1 1 1 1 1 1 OneMatrix(:,:,2) = 1 1 1 1 1 1 注意:eye命令只能用来建立二维矩阵 6、随机数和随机矩阵rand %产生在0~1之间均匀分布的随机数;每调用一次给一个新的数值. rand + i*rand %产生一个复数随机数 rand(n) %产生一个n×n的矩阵,其元素均为0~1之间均匀分布的随机数. rand(m,n,……,p) %产生一个m×n×……×p的矩阵,其元素均为0~1之间均匀分布的随机数. randn %产生零均值、单位方差的正太分布随机数 randn(n) %产生一个n×n的矩阵,其元素均为零均值、单位方差的正太分布随机数. randn(m,n,……,p) %产生一个m×n×……×p的矩阵, 其元素均为零均值、单位方差的正太分布随机数. 7、随机数种子rand(‘state’) %返回一个有35个元素的向量,其中包含随机发生器的当前状态. rand(‘state’,s) %设置随机种子发生器的状态为s rand(‘state’,0) %设置随机种子发生器为它的原始状态 rand(‘state’,j) %设置随机种子发生器为它的第j种子状态,j为整数 rand('state',sum(100*clock)); %使用clock命令,使得随机种子发生器在每个不同的时刻都设置为不同的状态. rand(‘state’,arg) %使用MATLAB中的随机种子发生器. randn(‘state’,) %返回一个有两个元素的向量,其中包含正态随机种子发生器的状态 randn(‘state’,arg) %根据arg设置正态随机种子发生器,见rand. 例如 astate = rand('state'); astate(1:5) ans = 0.8651 0.5121 0.9021 0.8186 0.6267 说明:astate(1:5)表示列出状态向量(35个元素)中的前5个元素的值 8、从已存在的向量中产生新的矩阵(一)diag(A) %生成一个由矩阵A主对角线元素组成的列向量,主对角线总是从矩阵左上角开始,对于方阵来说它结束于矩阵的右下角. diag(x) %x为一个n维向量.生成一个n维方阵,它的主对角线元素取自向量x,其余元素的值都为零. diag(A,k) %生成一个由矩阵A第k条对角线元素组成的列向量。k=0为主对角线;K0为主对角线上第K条对角线. dialog(x,k) %生成一个(n +)*(n+)维的矩阵,该矩阵的第k条对角线元素取自x,其余元素为0.(n为x的维数) 例一: A = 1 2 3 4 5 6 7 8 9 diag(A)= 1 5 9 例二: x = [1 2 3]; diag(x) = 1 0 0 0 2 0 0 0 3 例三:(A为例一中的A) diag(A,0) = 1 5 9 diag(A,1) = 2 6 diag(A,-1) = 4 8 例四:(x为例二中的x) diag(x,1) = 0 1 0 0 0 0 2 0 0 0 0 3 0 0 0 0 diag(x,-2) = 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 2 0 0 0 0 0 3 0 0 9、从已存在的矩阵中生成新的矩阵(二)triu(A) %生成一个和A同样大小的上三角矩阵。该矩阵的主对角线及以上元素取自A中的相应元素,其余元素都为0. triu(A,k) %生成一个和A同样大小的上三角矩阵。该矩阵的第k条对角线及以上元素取自A中的相应元素,其余元素都为0.命令triu(A,0)等价于triu(A). tril(A) %生成一个和A同样大小的下三角矩阵。该矩阵的主对角线及以下元素取自A中的相应元素,其余元素都为0. tril(A,k) %生成一个和A同样大小的下三角矩阵。该矩阵的第k条对角线及以下元素取自A中的相应元素,其余元素都为0.命令tril(A,0)等价于tril(A).
对于每一个方阵A都有以下关系: A = triu(A) +tril(A) – diag(diag(A)); A = triu(A,1) + tril(A,-1) + daig(diag(A)).
例一: A = 1 2 3 4 5 6 7 8 9 triu(A) = 1 2 3 0 5 6 0 0 9 triu(A,1) = 0 2 3 0 0 6 0 0 0
tril(A,-1) = 0 0 0 4 0 0 7 8 0
例二: B = 1 2 3 4 5 6 7 8 9 1 0 5
triu(B) = 1 2 3 4 0 6 7 8 0 0 0 5 tril(B,-1) = 0 0 0 0 5 0 0 0 9 1 0 0 10、矩阵旋转和矩阵变维
例一: A = 1 2 3 4 5 6 fliplr(A) = flipdim(A,2) = 2 1 4 3 6 5 例二: B = 2 2 3 4 6 6 7 8 10 flipud(B) = flipdim(B,1) = 7 8 10 4 6 6 2 2 3 例三:(例二中的B) rot90(B) = 3 6 10 2 6 8 2 4 7 例四:(例二中的B) rot90(B,2) = 10 8 7 6 6 4 3 2 2 例五: OneMatrix = ones(3,4,2) reshape(OneMatrix,3,8) = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 例六:(例二中的B) repmat(B,2,3) = 2 2 3 2 2 3 2 2 3 4 6 6 4 6 6 4 6 6 7 8 10 7 8 10 7 8 10 2 2 3 2 2 3 2 2 3 4 6 6 4 6 6 4 6 6 7 8 10 7 8 10 7 8 10 例七: y = 3 ; repmat(y,2,5) = 3 3 3 3 3 3 3 3 3 3 例八: E = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 C = zeros(3,8); D = cat(3,E,C) ans(:,:,1) = 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ans(:,:,2) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 即在矩阵E中增加了一层零元素. 11、矩阵维数的扩展(1)扩展列向量的列 将向量x=[9,10]扩展成xnew=[9,10,3,2],有下列办法: 方法一:xnew = x ;xnew(3) = 3 ;xnew(4) = 2; 方法二:xnew = [x 3 2]; 方法三:tmp = [0,15]; xnew = [x tmp]; (2)扩展矩阵的列 将 A = [1 2;3 4]扩展成Anew = [1 2 11;3 4 12],有下列方法: 方法一:y = [11;12],Anew = [A y]; 方法二:Anew = [A [11;12]] (3)扩展矩阵的行 将A = [1 2;3 4]扩展成Anew = [1 2;3 4;13 14],有下列办法: 方法一:z = [13 14],Anew = [A; z] 方法二:Anew = [A;[13 14]] (4)矩阵的赋值扩展法 A = reshape(1:9,3,3) A = 1 4 7 2 5 8 3 6 9 A(4,4) = 111; A = 1 4 7 0 2 5 8 0 3 6 9 0 0 0 0 111 A(:,6) = 222 A = 1 4 7 0 0 222 2 5 8 0 0 222 3 6 9 0 0 222 0 0 0 111 0 222 A(5,:) = 250 A = 1 4 7 0 0 222 2 5 8 0 0 222 3 6 9 0 0 222 0 0 0 111 0 222 250 250 250 250 250 250 12、数字序列(1)数字序列一 i:k %创建从i开始、步长为1、到k结束的数字序列.数字i和k不一定是整数,该序列最后一个数小于或等于k. i:j:k %创建创建从i开始、步长为j、到k结束的数字序列.数字i、j和k不一定是整数,该序列最后一个数小于或等于k. (2)数字序列二 linspace(a,b) %在区间[a,b]上创建一个有100个元素的向量,这100个数把整个区间线性分隔. linspace(a,b,n) %在在区间[a,b]上创建一个有n个元素的向量,这n个数把整个区间线性分隔. logspace(a,b) %在区间[10*a,10*b]上创建一个有50个元素的向量,这50个数把整个区间对数分隔. logspace(ab,n) %在区间[10*a,10*b]上创建一个有n个元素的向量,这n个数把整个区间对数分隔. 例一: vect = 2:7 vect = 2 3 4 5 6 7 vect = 2:7.2 vect = 2 3 4 5 6 7 vect = 6:-1:2 vect = 6 5 4 3 2 vect = 1.2:-0.8:-3.2 1.2000 0.4000 -0.4000 -1.2000 -2.0000 -2.8000 注意:此时最后一个数为-2.8. 例二: linspace(1,5,6) ans = 1.0000 1.8000 2.6000 3.4000 4.2000 5.0000 13、定义子阵A(i,j,……,k) %返回多维数组A中下标为(i,j,……,k)的元素值. A(:,j) %返回二维矩阵A中第j列列向量. A(i,:) %返回二维矩阵A中第j行行向量. 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(:,:,……,:) %返回矩阵A本身. A(:) %将矩阵A中的每列合成一个长的列向量. A(j:k) %返回一个行向量,其中的元素为A(:)中的从第j个元素到第k个元素. A([j1,j2,……]) %返回一个行向量,其中的元素为A(:)中的第j1,j2,……元素. A(:,[j1,j2,……]) %返回矩阵A的第j1列、第j2列、……的列向量. A([j1,j2,……],:) %回矩阵A的第j1行、第j2行、……的行向量. A([i1,i2,……],[j1,j2,……]) %返回矩阵第i1行、第i2行等和第j1列、第j2列等的元素. 14、将二维矩阵合成三维矩阵>> A1 = [1 2;3 4]; >> A2 = [3 4 ;5 6]; >> C(:,:,1)=A1; >> C(:,:,2)=A2; >> C C(:,:,1) = 1 2 3 4 C(:,:,2) = 3 4 5 6 此时C为三维矩阵. 15、删除矩阵的行【例一】 >> a = [1 2 3;4 5 6;7 8 9]
a =
1 2 3 4 5 6 7 8 9
>> a = a([2,3],:)
a =
4 5 6 7 8 9 【例二】 >> a = [1 2 3;4 5 6;7 8 9]
a =
1 2 3 4 5 6 7 8 9
>> a(1,:) = []
a =
4 5 6 7 8 9 16、删除矩阵的列【例一】 >> a = [1 2 3;4 5 6;7 8 9]
a =
1 2 3 4 5 6 7 8 9
>> a = a(:,[1,3])
a =
1 3 4 6 7 9 【例二】 >> a = [1 2 3;4 5 6;7 8 9]
a =
1 2 3 4 5 6 7 8 9
>> a(:,2) = []
a =
1 3 4 6 7 9 17、数组寻址和排序18.1矩阵加减 两矩阵必须同阶才可进行加减运算,另外MATLAB还特别作了扩充,允许矩阵与一个数量(即1×1矩阵)进行加减运算。 例如键入A=[1,2,3;4,5,6;7,8,9],B=[1,4,7;2,5,8;3,6,9],则 C=A+B 的结果显示为:
如果键入x=[-1,0,2],则y=x-1的结果为: 18.2矩阵乘法 当左乘矩阵的列数等于右乘矩阵的行数时,两矩阵可以进行乘法。在MATLAB中,矩阵A乘以矩阵B应表示成A*B。 18.3矩阵除法 MATLAB中有两种除法,即左除“\”与右除“/”。 若A为非奇异方阵,B为矩阵,则A\B,B/A的数学意义分别为 。在MATLAB中,这两种运算也可以分别表示为inv(A)*B,B*inv(A)。 18.4数组的乘除运算 18.5数组的乘方 数组的乘方用符号“.^”来表示,而数组的乘方有三种形式。 1 向量的向量次方 例如:键入x =[1,2,3], y =[4,5,6],z=x.^y,则结果为: z= 1 32 729 它的数学意义是 。 2 向量的数量次方 例如:键入x =[1,2,3],z=x.^2,则结果为: z= 1 4 9 它的数学意义是 。 3 数量的向量次方 例如:键入x =[1,2,3],z=2.^x,则结果为: z= 2 4 8 它的数学意义是 。 19、向量的关系运算 MATLAB提供了6种关系运算符:=(大于或等于)、 ==(等于)、 ~=(不等于)。 关系运算的运算法则为: 1 当两个比较量是标量时,直接比较两数的大小。若关系成立,关系表达式的值为1,否则为0。 2 当参与比较的量是两个维数相同的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,并给出元素比较结果。最终的关系运算的结果是一个维数与原矩阵相同,它的元素由0或1组成。 3 当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,并给出元素比较结果。最终的关系运算结果是一个维数与原矩阵相同的矩阵,它的元素由0或1组成。 例如 若键入x=(1> X = [1 3 5;5 -9 0; 32 1 18]; >> rank(X)
ans =
3 24、求矩阵的逆矩阵及迹求矩阵A的逆矩阵:inv(A) 求矩阵A的迹:trace(A) 例:a= [1 2;3 4]; 则 trace(A) = 5. 25、矩阵及向量的最大值、最小值25.1向量的最大值及最小值 max(P) :返回向量P的最大值,如果P中包含复数元素,则按模取最大值。[y,i] = max(P) :返回向量P的最大值存入y,最大值的序号存入i,如果P中包含复数元素,则按模取最大值。求向量的最小值的函数min(P)用法同max(P)。25.2矩阵的最大值及最小值 max(A) : 返回一个行向量,向量的第i个元素为矩阵A的第i列的最大值。[y,u] = max(A) : 返回行向量y和u,y记录A的每列的最大值,u记录每列最大值的行号。max(A,[],dim) : dim取1时,该函数和max(A完全相同;dim取2时,该函数返回一个列向量,其第i个元素是A矩阵的第i行的最大值。求矩阵的最小值函数min(A)用法同max(A)。使用max(max(A))可以求出矩阵中的最大元素,同理min(min(A))可以求出矩阵中的最小元素。 26、计算矩阵大小及元素个数26.1计算矩阵大小 size(A),返回的是矩阵A的列数和行数; size(A,1),返回矩阵A的行数; size(A,2),返回矩阵A的列数。
>>A = [1 2 5;3 4 9]; 则size(A) = 2 3 size(A,1) = 2 size(A,2) = 3 26.2计算矩阵中的元素个数 使用函数numel() 当矩阵为一个行向量或者一个列向量时候,返回的该向量的长度,当矩阵为M*N时,返回值为M*N. 例:A = [1 2 3 4;5 6 7 8]; 则numel(A) = 8. 26.3计算矩阵的维数 n = ndims(A);返回矩阵的维数,若A为三维数组,则n=3. 27、LU分解 矩阵的三角分解又称LU分解,它的目的是将一个矩阵分解成一个下三角矩阵L和一个上三角矩阵U的乘积,即A=LU。 函数: lu 格式 [L,U] = lu(X) %U为上三角阵,L为下三角阵或其变换形式,满足LU=X。 [L,U,P] = lu(X) %U为上三角阵,L为下三角阵,P为单位矩阵的行变换矩阵,满足LU=PX。 例: >> X = [1 3 5;5 -9 0; 32 1 18]; >> [p,q,r] = lu(X)
p =
1.0000 0 0 0.1563 1.0000 0 0.0313 -0.3242 1.0000
q =
32.0000 1.0000 18.0000 0 -9.1563 -2.8125 0 0 3.5256
r =
0 0 1 0 1 0 1 0 0 28、QR分解(求正交矩阵)将矩阵A分解成一个正交矩阵与一个上三角矩阵的乘积。 函数: qr 格式: [Q,R] = qr(A) %求得正交矩阵Q和上三角阵R,Q和R满足A=QR。 例: >> X = [1 3 5;5 -9 0; 32 1 18]; >> [p ,q] = qr(X)
p =
0.0309 0.3156 0.9484 0.1543 -0.9390 0.3075 0.9875 0.1368 -0.0777
q =
32.4037 -0.3086 17.9300 0 9.5344 4.0415 0 0 3.3436 29、求特征值及特征向量函数 eig 格式 d = eig(A) %求矩阵A的特征值d,以向量形式存放d。 【例一】 >> X = [1 3 5;5 -9 0; 32 1 18]; >> D = eig(X)
D =
24.8632 -3.7328 -11.1305 【例二】 >> X = [1 3 5;5 -9 0; 32 1 18]; >> [d,v] = eig(X)
d =
-0.2087 -0.4880 0.3641 -0.0308 -0.4632 -0.8545 -0.9775 0.7398 -0.3706
v =
24.8632 0 0 0 -3.7328 0 0 0 -11.1305 说明:矩阵d的列向量构成特征向量,v中的正对角线上的元素为特征值。 30、奇异值分解函数 svd 格式 s = svd (X) %返回矩阵X的奇异值向量 [U,S,V] = svd (X) %返回一个与X同大小的对角矩阵S,两个酉矩阵U和V,且满足= U*S*V'。若A为m×n阵,则U为m×m阵,V为n×n阵。奇异值在S的对角线上,非负且按降序排列。 [U,S,V] = svd (X,0) %得到一个“有效大小”的分解,只计算出矩阵U的前n列,矩阵S的大小为n×n。 【例】: >> X = [1 3 5;5 -9 0; 32 1 18]; >> S = svd(X)
S =
37.1225 10.2231 2.7220
>> [U,S,V] = svd(X)
U =
-0.0902 0.4116 -0.9069 -0.1159 -0.9088 -0.4009 -0.9892 0.0689 0.1296
S =
37.1225 0 0 0 10.2231 0 0 0 2.7220
V =
-0.8707 -0.1885 0.4543 -0.0058 0.9276 0.3736 -0.4918 0.3227 -0.8087
>> [U,S,V] = svd(X,0)
U =
-0.0902 0.4116 -0.9069 -0.1159 -0.9088 -0.4009 -0.9892 0.0689 0.1296
S =
37.1225 0 0 0 10.2231 0 0 0 2.7220
V =
-0.8707 -0.1885 0.4543 -0.0058 0.9276 0.3736 -0.4918 0.3227 -0.8087 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |