赞
踩
目录
(1)提取矩阵右上角三角形区域内的元素并赋予新矩阵的函数triu()
三、如何在MATLAB中使用索引和切片操作来处理数组和矩阵?
四、如何在MATLAB中对数组和矩阵进行线性代数运算,如求逆、求行列式、求特征向量等?
五、如何在MATLAB中在数组和矩阵中查找元素,比如最大值、最小值、均值等?
六、如何在MATLAB中将数组和矩阵保存到文件中以便后续使用?
MATLAB是一个强大的数学软件,可以方便地处理数组和矩阵。
在MATLAB中,数组是一组相同类型的数据元素,可以是标量(单个数值)、向量(一维数组)或矩阵(二维数组)。在MATLAB中,数组可以用来表示向量和矩阵。
矩阵是一个二维数组,其中每个元素都有一个唯一的行和列索引。矩阵在MATLAB中很常见,因为MATLAB的核心数学函数和大多数工具箱都支持矩阵计算。在MATLAB中,矩阵可以表示为一个行向量、列向量或一个二维矩阵。
MATLAB提供了一些方便的函数来创建和操作数组和矩阵。例如,可以使用linspace函数创建一个等间距的向量,使用zeros函数创建一个全零矩阵,使用eye函数创建一个单位矩阵,等等。
在MATLAB中,可以使用基本算术运算符和矩阵运算符对数组和矩阵进行数学操作。例如,可以使用加法运算符对两个数组或矩阵相加,使用乘法运算符对两个矩阵相乘。
总之,MATLAB的数组和矩阵是其强大功能的基础,因此深入理解和掌握这些概念是使用MATLAB进行数学计算和分析的关键。
- Variantname=[element1 element2 element3 ...element n]
-
- Variantname=[element1,element2,element3,...element n]
-
- Variantname=[element1 ;element2;element3;...element n]
-
- Variantname=[element1
-
- element2
-
- ...
-
- element n]
Variantname表示所要创建的数组名,element表示数组元素
例:
- >> x1=[6 2 3]
- x1 =
-
- 6 2 3
-
-
-
- >> x2=[7,5,8]
-
- x2 =
- 7 5 8
-
-
-
- >> y1=[7;5;8]
- y1 =
- 7
-
- 5
-
- 8
-
-
- >> y2=[6
- 2
-
- 7]
-
-
- y2 =
- 6
-
- 2
-
- 7
-
- Variantname=a:inc:b
-
- Variantname=[a:inc:b]
-
- Variantname=[a,a+inc*1,a+inc*2,...a+inc*n]
inc是元素之间的间隔(也称为步长),可正可负可省略,省略默认为1
若(b-a)是inc的倍数,则数组最后一个元素等于b
若(b-a)不是inc的整数倍,当a+inc*(n+1)超过b时,数组最后一个元素为a+inc*n
a,b必须为实数,b大于a时,inc应为正数,否则负数不可取0
例:
- >> x1=3:5
- x1 =
-
- 3 4 5
-
-
- >> x2=[1:0.5:3.2]
- x2 =
-
- 1.0000 1.5000 2.0000 2.5000 3.0000
-
-
- >> x3=3.2:-0.5:1
- x3 =
-
- 3.2000 2.7000 2.2000 1.7000 1.2000
linspace()函数格式:
Variantname=linspace(a,b,n)
n为总元素个数,大于1的整数,n可省略省略时默认值为100,若a,b都为实数,则该指令等效于Variantname=a:(b-a)/(n-1):b
例:
- >> x1=linspace(2,4,6)
- x1 =
-
- 2.0000 2.4000 2.8000 3.2000 3.6000 4.0000
-
-
- >> x2=linspace(8,pi,3)
-
- x2 =
-
- 8.0000 5.5708 3.1416
-
-
- >> y1=linspace(8,3,-0.5)
- y1 =
-
- Empty matrix: 1-by-0
-
- logspace()函数格式:
-
- variantname=logspace(a,b,n)
例:
- >> x1=logspace(1,2,5)
- x1 =
-
- 10.0000 17.7828 31.6228 56.2341 100.0000
-
-
-
- >> x2=logspace(3,1,6)
- x2 =
-
- 1.0e+03 *
-
- 1.0000 0.3981 0.1585 0.0631 0.0251 0.0100
-
-
- >> y1=linspace(4,6,1)
- y1 =
-
- 6
注:logspace()函数的用法和linspace()函数用法相似,区别:
linspace()函数创建的数组范围a~b,等效于Variantname=a:(b-a)/(n-1):b
logspace()函数创建数组的范围是~,等效于Variantname=::
arrayname(index)
例:
- >> x=6:10 %创建一维行数组x,数组元素为6,7,8,9,10
- x =
-
- 6 7 8 9 10
-
-
-
- >> y=[6;7;8] %创建一维列数组y,数组元素为6,7,8
- y =
-
- 6
-
- 7
-
- 8
-
- %index为单个整数时
-
- >> x(2) %寻访x数组的第二个元素,结果为7
- ans =
-
- 7
-
- >> y(3) %寻访y数组的第三个元素,结果为8
- ans =
-
- 8
-
- %index为正整数数组时
-
- >> x([1,3,5]) %寻访x数组的第1,3,5个元素
- ans =
-
- 6 8 10
-
-
-
- >> a=y([2,3]) %寻访y数组的第2,3个元素,并将其赋值给a
- a =
-
- 7
-
- 8
-
-
-
- >> b=x(2:5) %寻访x数组的第2~5个元素,并将其赋值给b
- b =
-
- 7 8 9 10
-
-
-
- >> x(2:end) %寻访x数组的第2~5个元素
- ans =
-
- 7 8 9 10
-
-
-
- >> y(1:end) %寻访y数组的第1~3个元素
- ans =
-
- 6
-
- 7
-
- 8
-
-
-
- >> x(linspace(2,4,3)) %寻访x数组的第2,3,4个元素
- ans =
-
- 7 8 9
-
-
-
- >> y(linspace(1,3,3)) %寻访y数组的第1,2,3个元素
- ans =
-
- 6
-
- 7
-
- 8
arrayname(index)=new arrayvalue
arrayname为被赋值的数组名,arrayname(index)为被赋值数组的子数组,arrayname(index)代表对arrayname的寻访。new arrayvalue为将要赋给等式左端的数组或数值
例:
- >> x=6:10; %创建一个一维行数组x,数组元素为6,7,8,9,10
- >> y=[6;7;8]; %创建一个一维列数组y,数组元素为6,7,8
- %index为单个正整数时
-
- >> x(2)=10; %将x数组的第二个元素赋值为10
- >> y(3)=5; %将y数组的第三个元素赋值为5
- %index为正整数数组时
-
- >> x([1,3,5])=[8,2,7]; %将x数组的第1,3,5个元素赋值为8,2,7
- >> y([2,3])=[1,2]; %将y数组的第2,3个元素赋值为1,2
- >> y(1:end)=linspace(2,4,3) %将y数组的第1~3个元素赋值为2,3,4
- y =
-
- 2
-
- 3
-
- 4
-
- >> x(linspace(2,4,3))=8 %将x数组的第2~4个元素赋值为8
- x =
-
- 8 8 8 8 7
- Variantname=[exp11 exp12 exp13...;exp21 exp22 exp23...;expn1 expn2 expn3...]
-
- Variantname=[exp11,exp12,exp13...;exp21,exp22,exp23...;expn1,expn2,expn3...]
-
- Variantname=[exp11 exp12 exp13
-
- exp21 exp22 exp23
-
- ...
-
- expn1 expn2 expn3]
-
- Variantname=[exp11,exp12,exp13...
-
- exp21,exp22,exp23...
-
- ...
-
- expn1,expn2,expn3...]
例:
- >> x1=[9 2 3;7,11,9;4:-2:0]
- x1 =
-
- 9 2 3
-
- 7 11 9
-
- 4 2 0
-
- >> x2=[2,3,6
- linspace(0,pi,3)
-
- 7,2,3]
-
- x2 =
-
- 2.0000 3.0000 6.0000
-
- 0 1.5708 3.1416
-
- 7.0000 2.0000 3.0000
在MATLAB工具栏中单机【新建】按钮,将自动启动M文件编辑窗口,输入二维数组x:
编辑完成后点保存,并将文件命名为“Scriptx.m”,然后退出M文件编辑窗口
在MATLAB命令窗口执行“Scriptx”命令后,MATLAB将创建“Scriptx.m”中定义数组,如:
- >> Scriptx
- x =
-
- 0.2000 0.5800 0.7200
-
- 0.8000 0.4000 2.5000
二维数组子数组访问的基本格式:
arrayname(row index,column index)
其中,row index,column index分别代表行索引与列索引,可为正整数或正整数数组。
A(:,j)表示寻访A的第j列元素。
A(i,:)表示寻访A的第i行元素。
A(2:4,3:5)表示寻访A的第2~4行,第3~5列的元素
A(:;:)表示寻访A的所有元素
二维数组子数组赋值的基本格式:
arrayname(row index,column index)=new arrayname
例:
- >> x=[2.1,3.5,7.8,4.3,1.9;linspace(pi,10,5);linspace(2,8,5)] %创建3X5的数组x
- x =
-
- 2.1000 3.5000 7.8000 4.3000 1.9000
-
- 3.1416 4.8562 6.5708 8.2854 10.0000
-
- 2.0000 3.5000 5.0000 6.5000 8.0000
-
-
- >> x(3,4) %寻访第三行,第四行的元素
- ans =
-
- 6.5000
-
- >> a=x(1:3,[1,3]) %将第1~3行,第1,3列元素赋值给a
- a =
-
- 2.1000 7.8000
-
- 3.1416 6.5708
-
- 2.0000 5.0000
-
- >> b=x(:,5) %将第5列所有元素赋值给b
- b =
-
- 1.9000
-
- 10.0000
-
- 8.0000
-
-
- >> x(:)=2:16 %对x数组重新赋值
-
- x =
-
- 2 5 8 11 14
-
- 3 6 9 12 15
-
- 4 7 10 13 16
rand(n) %生成nXn的随机数组
rand(n1,n2,n3,...nn) %生成n1Xn2Xn3X....Xnn的随机数组
size() %获取数组x的各维长度,返回包含数组x各维长度的一维行数组
size(x,dim) %获取数组x的dim维长度
numel(x) %获取数组x的元素总数
numel(x,index1,index2...) %获取x(index1,index2...)的元素总数
length(x) %获取数组x的最长维度的长度
mean(x,dim) %以dim维的形式返回数组x的平均值
reshape(x,m,n,p...) %利用数组x的值构造mXnXpX...的数组
注:reshape()函数要求至少提供3个元素,即x,m,n
%分别使用逐个元素输入法、冒号生产法、定点采样生成法创建向量
- >> x=[2;3;4] %向量x,即一维数组x
- x =
-
- 2
-
- 3
-
- 4
-
-
-
- >> y=[4:-0.5:2] %使用冒号生成法创建一维行向量
- y =
-
- 4.0000 3.5000 3.0000 2.5000 2.0000
-
- >> z=[linspace(2,8,4)] %使用定点采样生成法创建一维行向量
- z =
-
- 2 4 6 8
函数 | 功能 | 函数 | 功能 |
diag() | 生成对角矩阵 | gallery() | 生成Higham矩阵 |
zeros() | 生成零矩阵 | hadamard() | 生成Hadamard矩阵 |
ones() | 生成元素值全为1的矩阵 | hankel() | 生成Hankel矩阵 |
eye() | 生成单位矩阵 | hilb() | 生成Hilbert矩阵 |
magic() | 生成魔方矩阵 | pascal() | 生成帕斯卡矩阵 |
rand() | 生成随机矩阵 | rosser() | 生成经典对称特征值测试矩阵 |
wilkinson() | 生成Wilkinson特征值测试矩阵 | toeplitz() | 生成Toeplitz矩阵 |
compan() | 生成Companion矩阵 | vander() | 生成范德蒙矩阵 |
一般格式:
triu(X) %提取A的主对角线右上方的三角形区域内的元素
triu(X,k) %提取矩阵X的第K根对角线右上方的三角形区域内的元素
例:
- >> A=[1:4;5:8;9:12]
- A =
-
- 1 2 3 4
-
- 5 6 7 8
-
- 9 10 11 12
-
-
-
- >> x1=triu(A)
- x1 =
-
- 1 2 3 4
-
- 0 6 7 8
-
- 0 0 11 12
-
-
-
- >> x2=triu(A,2)
- x2 =
-
- 0 0 3 4
-
- 0 0 0 8
-
- 0 0 0 0
例:
- >> A=[1:4;5:8;9:12]
- A =
-
- 1 2 3 4
-
- 5 6 7 8
-
- 9 10 11 12
-
-
- >> x1=triu(A)
- x1 =
-
- 1 2 3 4
-
- 0 6 7 8
-
- 0 0 11 12
-
-
- >> x2=tril(A,-1) %提取A的主对角线下方第一根对角线的左上方区域内的元素
- x2 =
-
- 0 0 0 0
-
- 5 0 0 0
-
- 9 10 0 0
-
- >> x3=x1+x2
- x3 =
-
- 1 2 3 4
-
- 5 6 7 8
-
- 9 10 11 12
一般格式:
flipud(X) %将X沿水平轴翻转
flipud(X) %将X沿垂直轴翻转
flipud(X,dim) %将X沿特定轴翻转。dim等于1时,按行翻转;dim等于2时,按列翻转
%dim等于3时,按页翻转,以此类推
例:
- >> A=reshape([1:12],3,4),B=reshape([1:12],2,2,3);
- A =
-
- 1 4 7 10
-
- 2 5 8 11
-
- 3 6 9 12
-
- >> x1=flipud(A)
- x1 =
-
- 3 6 9 12
-
- 2 5 8 11
-
- 1 4 7 10
-
-
-
- >> x2=fliplr(A)
- x2 =
-
- 10 7 4 1
-
- 11 8 5 2
-
- 12 9 6 3
-
-
- >> x3=flipdim(B,3)
- x3(:,:,1) =
-
- 9 11
-
- 10 12
-
-
-
- x3(:,:,2) =
-
- 5 7
-
- 6 8
-
-
- x3(:,:,3) =
-
- 1 3
-
- 2 4
-
一般格式:
rot90(X) %将A按逆时针方向旋转90度
例:
- >> A=[1:4;5:8;9:12]
- A =
-
- 1 2 3 4
-
- 5 6 7 8
-
- 9 10 11 12
-
- >> B=rot90(A)
- B =
-
- 4 8 12
-
- 3 7 11
-
- 2 6 10
-
- 1 5 9
- >> A=[1:4;5:8];B=[3:6;7:10];C=2;D=1:4;
- >> x1=A+B
- x1 =
-
- 4 6 8 10
-
- 12 14 16 18
-
- >> x2=A-C
- x2 =
-
- -1 0 1 2
-
- 3 4 5 6
-
- >> x3=A+B*i
- x3 =
-
- 1.0000 + 3.0000i 2.0000 + 4.0000i 3.0000 + 5.0000i 4.0000 + 6.0000i
-
- 5.0000 + 7.0000i 6.0000 + 8.0000i 7.0000 + 9.0000i 8.0000 +10.0000i
-
-
-
- >> x4=A+D %运算对象不相等出现错误
- Error using +
-
- Matrix dimensions must agree.
数组乘法:
- >> A=reshape([1:8],2,4);
- >> B=reshape([8:-1:1],2,4);
- >> A.*B
- ans =
-
- 8 18 20 14
-
- 14 20 18 8
矩阵的普通乘法:
- >> A=reshape([1:9],3,3);
- >> B=reshape([9:-1:1],3,3);
- >> c=2;
- >> x1=A*B
- x1 =
-
- 90 54 18
-
- 114 69 24
-
- 138 84 30
-
- >> x2=A*C
- x2 =
-
- 2 8 14
-
- 4 10 16
-
- 6 12 18
矩阵的Kronecker乘法:
- >> A=[1 2;3 4];B=[1 2 1;3 6 3];
- >> kron(A,B)
- ans =
-
- 1 2 1 2 4 2
-
- 3 6 3 6 12 6
-
- 3 6 3 4 8 4
-
- 9 18 9 12 24 12
元素除法:
A./B %矩阵A的元素依次被矩阵B的元素除
A.\B %矩阵B的元素依次被矩阵A的元素除
例:
- >> a=1:4;b=4:-1:1;c=2;
- >> x1=a./b
- x1 =
-
- 0.2500 0.6667 1.5000 4.0000
-
- >> x2=a.\b
- x2 =
-
- 4.0000 1.5000 0.6667 0.2500
-
- >> x3=a./2
- x3 =
-
- 0.5000 1.0000 1.5000 2.0000
一般除法:
- >> a=[1 2;3:4];b=[4 3;2 1];c=2;d=5;
- >> x1=a\b,x2=a/b
- x1 =
-
- -6.0000 -5.0000
-
- 5.0000 4.0000
-
- x2 =
-
- 1.5000 -2.5000
-
- 2.5000 -3.5000
-
- >> y1=inv(a)*b,y2=a*inv(b)
- y1 =
-
- -6.0000 -5.0000
-
- 5.0000 4.0000
-
- y2 =
-
- 1.5000 -2.5000
-
- 2.5000 -3.5000
-
-
- >> x3=c\d,x4=c/d
- x3 =
-
- 2.5000
-
-
- x4 =
-
- 0.4000
-
-
-
- >> x5=a/c,x6=a\c
- x5 =
-
- 0.5000 1.0000
-
- 1.5000 2.0000
-
- Error using \
-
- Matrix dimensions must agree.
-
%运算对象都为标量时,不能执行左除运算,故x6无法获得运算结果
非共轭转置 :
A.’ %对矩阵A进行非共轭转置运算
transpose(A) %对矩阵A进行非共轭转置运算
例:
- >> A=reshape([1:8],2,4);B=reshape([8:-1:1],2,4);C=A+B*i;
- >> x1=A.'
- x1 =
-
- 1 2
-
- 3 4
-
- 5 6
-
- 7 8
-
- >> x2=transpose(C)
- x2 =
-
- 1.0000 + 8.0000i 2.0000 + 7.0000i
-
- 3.0000 + 6.0000i 4.0000 + 5.0000i
-
- 5.0000 + 4.0000i 6.0000 + 3.0000i
-
- 7.0000 + 2.0000i 8.0000 + 1.0000i
共轭转置:
- >> A=reshape([1:8],2,4);B=reshape([8:-1:1],2,4);C=A+B*i;
- >> x2=C'
- x2 =
-
- 1.0000 - 8.0000i 2.0000 - 7.0000i
-
- 3.0000 - 6.0000i 4.0000 - 5.0000i
-
- 5.0000 - 4.0000i 6.0000 - 3.0000i
-
- 7.0000 - 2.0000i 8.0000 - 1.0000i
exp(A) %以e为底,分别以A的元素为指数,求幂
expm(A) %以e为底,以A为指数,求幂,A必须为行列数相等的矩阵
例:
- >> A=[1 2;3 4];
- >> x1=exp(A)
- x1 =
-
- 2.7183 7.3891
-
- 20.0855 54.5982
-
-
- >> x1=expm(A)
- x1 =
-
- 51.9690 74.7366
-
- 112.1048 164.0738
-
log(A) %对矩阵A的各元素执行对数运算
logm(A) %对矩阵A整体执行对数运算
例:
- >> A=[1 2;3 4];B=A+2i;
- >> x1=log(A)
- x1 =
-
- 0 0.6931
-
- 1.0986 1.3863
-
- >> x2=logm(B)
- x2 =
-
- 0.0047 + 2.3109i 1.4426 - 0.5309i
-
- 1.6705 - 1.0243i 0.6884 + 0.8307i
sqrt(A) %对矩阵A的各元素执行开方运算
sqrtm(A) %对矩阵A整体执行开方运算
例:
- >> A=[1 2;3 4];
- >> x1=sqrt(A)
- x1 =
-
- 1.0000 1.4142
-
- 1.7321 2.0000
-
- >> x2=sqrtm(A)
- x2 =
-
- 0.5537 + 0.4644i 0.8070 - 0.2124i
-
- 1.2104 - 0.3186i 1.7641 + 0.1458i
在MATLAB中,可以使用索引和切片操作来处理数组和矩阵。以下是一些常用的方法:
选择单个元素:可以使用单个索引来选择单个元素。例如,A(1,1)表示选择矩阵A的第一行第一列的元素。
选择一列或一行:可以使用冒号操作符来选择一个范围内的所有行或所有列。例如,A(:,2)表示选择矩阵A的第二列。
选择一个子矩阵:可以使用两个范围来选择一个矩形区域。例如,A(1:2, 2:3)表示选择矩阵A的第一到第二行和第二到第三列的元素。
选择一个数组中的特定元素:可以使用布尔操作符来选择一个数组中的特定元素。例如,A(A>5)表示选择矩阵A中所有大于5的元素。
分配新值:可以使用索引操作符和等号来分配新值。例如,A(1,1)=3表示将矩阵A的第一行第一列的元素设为3。
选择多个元素:可以使用索引向量或逗号分隔列表来选择多个元素。例如,A([1,3],2)表示选择矩阵A的第一和第三行的第二列的元素。
以上是一些常用的索引和切片操作,可以帮助您处理MATLAB中的数组和矩阵。
在MATLAB中对数组和矩阵进行线性代数运算,可以使用MATLAB内置的函数和操作符。以下是一些常用的线性代数运算函数和操作符:
求逆矩阵:inv(A)、A^(-1)
求行列式:det(A)
求矩阵的秩:rank(A)
求矩阵的转置:A'
求矩阵的特征值和特征向量:[V, D] = eig(A)
矩阵乘法:A*B
矩阵点乘(对应元素相乘):A.*B
矩阵除法(对应元素相除):A./B
矩阵求和:sum(A)
矩阵求范数:norm(A)
例如,要求一个3x3的矩阵A的逆矩阵、行列式和特征值和特征向量,可以使用以下代码:
- A = [1, 2, 3; 4, 5, 6; 7, 8, 9];
-
- % 求逆矩阵
- invA = inv(A);
-
- % 求行列式
- detA = det(A);
-
- % 求特征值和特征向量
- [V, D] = eig(A);
注意,在进行线性代数运算时,矩阵的维度应正确匹配,否则会出现错误。
MATLAB提供了许多查找和统计数组及矩阵中元素的函数,以下是其中部分常用函数及其用法:
max(A)
返回数组或矩阵A
中的最大值。min(A)
返回数组或矩阵A
中的最小值。max(A, [], 'all')
返回具有最大值的A中的元素。min(A, [], 'all')
返回具有最小值的A中的元素。max(A, [], 'dim')
返回数组或矩阵A
中每列或每行的最大值。其中dim
为1表示列,2表示行。mean(A)
返回数组或矩阵A
中的平均值。mean(A, 'all')
返回数组或矩阵A
中所有元素的平均值。mean(A, 'dim')
返回数组或矩阵A
中每列或每行的平均值。其中dim
为1表示列,2表示行。median(A)
返回数组或矩阵A
中的中位数。median(A, 'all')
返回数组或矩阵A
中所有元素的中位数。median(A, 'dim')
返回数组或矩阵A
中每列或每行的中位数。其中dim
为1表示列,2表示行。以上函数仅是部分常用的函数,还有许多其他的查找和统计函数,具体可以参考MATLAB官方文档。
在MATLAB中,可以使用以下两种方法将数组和矩阵保存到文件中以便后续使用:
1.使用save函数:save函数可以将变量保存到MATLAB二进制文件中,文件的扩展名为.mat。以下是使用save函数的示例代码:
- A = [1 2 3; 4 5 6];
- B = [7 8 9; 10 11 12];
- save('mydata.mat', 'A', 'B');
这将在当前工作目录中创建一个名为mydata.mat的文件,并将变量A和B保存到该文件中。
2.使用dlmwrite函数:dlmwrite函数可以将矩阵或数组保存到文本文件中,以逗号分隔(CSV格式)。以下是使用dlmwrite函数的示例代码:
- A = [1 2 3; 4 5 6];
- B = [7 8 9; 10 11 12];
- dlmwrite('mydata.csv', A, 'delimiter', ',', 'precision', 6);
- dlmwrite('mydata.csv', B, 'delimiter', ',', '-append', 'precision', 6);
这将创建一个名为mydata.csv的文件,并将变量A和B保存到该文件中。-delimiter和-precision选项用于指定文件中的分隔符和数字精度。使用-append选项可以将变量追加到现有文件中,而不是覆盖它。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。