1. 标准数组:全1数组,全0数组,单位矩阵,随机矩阵,对角矩阵以及元素为指定常数的数组。
2.全1数组用ones函数,全0数组用zeros函数。
对于ones和zeros函数,当只有一个输入参数时,即ones(n)或
zeros(n),Matlab就分别生成一个n×n的全1或者全0数组。当有两个输入参数时,即ones(r,c)或者zeros(r,c),Matlab就分别生成r 行c列的全1或者全0数组。要想生成一个与其他数组相同维数的全1或者全0数组,用户只要在ones或者zeros的参数中调用size函数就可以了。测试数组:ones(4),m = ones(4,8)
zeros(4),zeros(3,5),size(m),zeros(size(m))。
3.单位矩阵用eye函数。该函数用与ones和zeros函数相同的语法格式来生成单位矩阵。单位矩阵或数组是具有如下取值的矩阵或数组:除
A(i,i)之外,所有其他元素都为0,其中i=min(r,c),min(r,c)是矩阵A中的行数和列数的最小数。
4.随机矩阵用rand函数。函数rand生成均匀分布的随机数组,其元素取值介于0-1之间。直接调用rand产生一个随机数,随机数组用
rand(n)。另外randn函数将生成均值为0,方差为1的正态分布矩阵。rand和randn用法和ones相同。
5.对角矩阵用diag函数。在该数组中,一个向量可以被放在与数组的主对角线平行的任何位置。验证:a = 1:5 diag(a) diag(a,1)diag(a,-2)
6.几种生成所有元素都相同的数组的方法,先令d=pi
(1)d*one(3,4)    slowest method
(2)d+zeros(3,4)  slower  method
(3)d(ones(3,4))  fast  method
(4)repmat(d,3,4)    fastest method
数组的数据量较小时,4种方法都可以。随着数组维数的增大,含有标量乘法的方法d*one(3,4)就会使矩阵生成过程变慢。因为加法通常都比乘法运算速度快,较好的办法就是将用到的标量加到加到一个全0数组zeros(3,4)上。
后两种方法虽不直观,它们却是生成大数组的最快方法,因为都用到了数组索引。(3)d(ones(r,c))
先生成一个r×c的全1数组,然后用这个数组来索引和复制标量d。尽管这种方法没有用到浮点运算,但生成一个全1临时数组将会占用内存,并且消耗时间,因此使得这种方法的速度变慢。
方法repmat(d,r,c)调用函数repmat,即replicate matrix(复制矩阵)的缩写。对于标量,该函数执行如下操作步骤:
D(r*c) = d;-->>创建数组D,其第r*c个数为d,前面的数都为0
D( : )=d;
D=reshape(D,r,c);
上面的代码首先采用标量扩展方法生成一个具有r×c个元素的向量(特别注意:生成的为行向量而非矩阵)。然后将数组所有值赋值为d,再用函数reshape将这个向量变换成一个r×c的数组。
数组是Matlab的基础。Matlab通过指定的角标,提供插入、提取和重排数组子集的功能。A = [1 2 3;4 5 6;7 8 9]
7.A(3,3)=0 语句将数组A的第3行第3列的元素值变成0.
A(2,6)=1 语句将数组A的第2行第6列的元素值置成1;因为没有第6列,数组A的维数就根据需要增加,并且其他没有赋值的位置设为0,以便使数组保持成一个矩形矩阵。
A(:,4)=4 该语句将数组A的第4列设置为4.因为4是一个标量,Matlab就将它扩展使所有指定位置都填充为4,这是标量填充的另一个实例。Matlab进行标量扩展是为了简化那些虽然明确但却繁琐的语句。(以上语句都为连续操作,下面都将调用A的初始值。)
8.B=A(3:-1:1,1:3)
B=A(end:-1:1,1:3)
B=A(3:-1:1,:) 冒号“:”表示对所有的列进行操作。
这三个语句都是将数组A的行按逆序排列,得到数组B。
9.C = [A B(:,[1 3])]
该语句通过将数组B的第1列和第3列附加或连接在数组A的右侧,从能生成数组C.
10.B=A(1:2,2:3)
B=A(1:2,2:end)
这两个语句通过提取矩阵A的前两行后两列的元素来生成矩阵B。冒号表示法用于生成待提取的数组元素的索引向量。
11.C=[1 3]
B=A(C,C)
matlab数组赋值上例用数组C作为数组A的索引。而不是直接用冒号表示法。B是由数组A的第1行第2列、第1行第3列、第3行第1列和第3行第3列的元素构成。
12. B=A(:)
该语句通过依次提取数组A的各列,将数组A延展成一个列向量B。这种方法是把一个数组重构成另一个不同维数、但数组元素完全相同的数组的最简单方式。
13.接12
B=B.’、B=reshape(A,1,9)、B=reshape(A,[1 9])
三个语句都将生成1行9列矩阵:1 2 3 4 5 6 7 8 9。这些命令验证了点-转置操作符和reshape函数的作用。
reshape函数中的索引参数可以是单独的函数参数
(reshape(A,1,9)),或者是一个向量参数(reshape(A,[1 9]))
14.B=A
B(:,2)=[]
该语句通过除去原来数组B中的第2列重新定义数组B.如果数组的某个部分被设置成空矩阵或者空数组[],这部分将被删除,原数组将缩维成剩余元素构成的新数组。需要注意的是数据必须被整行或整列地删除,才能保持矩阵形式。
15.接14
C=B.’
reshape(B,2,3)
通过Matlab软件可以验证上面两个语句。说明了reshape函数和转置的不同之处。
16.接15
C(2,:)=[]  除去C的第2行元素,剩下一个行向量。
A(2,:) = C  用数组C取代了数组A的第2行。
17.B=A(:,[2 2 2 2])
B=A(:,2+zeros(1,4))
B=repmat(A(:,2),1,4)
上述语句用三种方式将数组A的第2列复制4次而得到数组B。对于大数组而言,最后一种方法的速度最快。
如果A(r,c)出现在等号的左边,并且用(r,c)声明的一个或者多个元素并不存在,就根据需要将A扩展,并将扩展位置上的元素置为0.这样就使得A(r,c)均指向已知元素。但是,如果数组A出现在等号右边,那么A(r,c)所指向的所有元素都必须存在,否则就返回一个出错信息。
A = [1 2 3;4 5 6;7 8 9]
C = [1 4 7]
18.C(1:2,: ) = A
该语句将出现错误提醒。表明用户不能将一个数组置入另一个不同维的数组中(C声明的2行小于A数组的3行)。1:2的声明范围太小,如果改为1:3就可以了。如果改为1:4也不能,因为A没有第4行,C也没有第4行,不能拓展出毫无意义的一行。如果改为C([1 2 4],:)=A则    结果将新的C数组的第1 2 4行设置为A数组的1 2 3行,C数组的第3行拓展为0。
19.不接18
C(3:4,:)=A(2:3,:)
把数组A的第2和第3行元素置入数组C的相同大小的区域中。因为数组C 没有第2到第4行,自动生成这些行。数组C的第2行没有指定,这一行被填为0.
20.不接19
A(:,2:3)
G(1:6)=A(:,2:3)
通过提取数组A的第2列和第3列元素,并依次排列而生成行向量G。注意:等号两侧的这些矩阵的形状是不同的。通过将数组A的第1列和第2列元素分别从上到下依次赋值给数组G,数组A的元素就被插入到了数组G中。
21.H=ones(6,1)
H(:)=A(:,2:3)
当冒号出现在等号左边时,意味着从等号右侧提取相应的元素然后全部放到左边的数组中。要求等号两边所引用的元素数目必须相同。否则会有出错信息“In an assignment  A(:) = B, the number of elements in A and B must be the same.”
22.A(2,:)=0
当等号的右边是一个标量,左边是一个数组时,就需要用到标量扩展来填充。
总结:在任何情况下,只要在该调用数组的地方使用了标量,就会出现标量扩展。这时,Matlab自动将标量扩展并填充到指定位置,然后再执行用户下达的命令。下面是标量扩展的另一种情况
23.A(1,[1 3])=pi
标量pi被扩展后填进了两个位置。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。