matlab学习(二)—— 数组和矩阵分析

文章目录

  • 1 数组及其函数
    • 1.1 数组的建立和操作
    • 1.2 数组的算术运算
    • 1.3 数组的关系运算
    • 1.4 数组的逻辑运算
    • 1.5 数组信息的获取
      • 1.5.1 数组结构
      • 1.5.2 数组大小
      • 1.5.3 数组的维度
      • 1.5.4 数组的数据类型
      • 1.5.5 数组的内存占用
      • 1.5.6 数组的查找
      • 1.5.7 数组的排序
  • 2 矩阵的创建
  • 3 矩阵的基本操作
    • 3.1 矩阵的扩展
    • 3.2 矩阵的块操作
    • 3.3 矩阵中元素的删除
    • 3.4 矩阵的转置
    • 3.5 矩阵的旋转
    • 3.6 矩阵的翻转
    • 3.7 矩阵尺寸的改变
  • 4 矩阵的基本数值运算
    • 4.1 矩阵的加减乘除运算
    • 4.2 矩阵元素的查找
    • 4.3 矩阵元素的排序
    • 4.4 矩阵元素的求和
    • 4.5 矩阵元素求积
    • 4.6 矩阵元素的差分
  • 5 特殊矩阵的生成
  • 6 矩阵的特征和线性代数
  • 7 系数矩阵
  • 8 矩阵的分解

1 数组及其函数

1.1 数组的建立和操作

% 1.1 数组的建立和操作
% []创建,同一行元素之间用逗号或空格分隔,不同行用分号分隔
% 空数组可以用做数组声明和清空,数组有方向
% 例1:数组建立
clc,clear
A=[]
B=[1 2 3 4 5]
C=[1,2,3,4,5]
D=[1;2;3;4;5]
E=C’
% 例2:数组索引
clc,clear
A=[1 2 3 4 5]
b1=A(3) %数组的第三个元素
b2=A(2:4) %数组的第2:4个元素
b3=A(3:end) %数组的第三至最后一个元素
b4=A(3:-1 :1) %数组的第3、2、1个元素
b5=A(end:-1 :1) %数组元素反序输出
b6=A([2 4]) %数组的第2、4个元素
% 例3:利用冒号建立一维数组
clc,clear
A=2:6 % 默认按照递增值为+1
B=2.5:2:10.9
C=2.3:2:9.9
D=8:-2:1
E=2:-2:6
% 例4:建立二维数组
clc,clear
A=[1 2 3;2 3 4;5 6 7]
B=[1:3;4:6;7:1:9]
C=[A B]
D=[A;B]

1.2 数组的算术运算

% 1.2 数组的算术运算
% + - .* ./ .\ ^
% 例5:数组加减运算
clc,clear
A=[1 2 3 4 5]
B=[0 1 3 5 2]
C=A-B
D=A+B
E=A+100
X=[3 4 5 6] %维数不匹配会报错
A-X
% 例6:数组乘法运算
clc,clear
A=[1 2 3 4 5]
B=[0 1 3 5 2]
C=A.B %对应元素相乘
D=A
3 %每个元素都乘以3
% 例7:数组除法
clc,clear
A=[1 2 3 4 5]
B=[0 1 3 5 2]
C=A./B %左除A为被除数
D=A./3
E=A.\B %右除B为被除数

1.3 数组的关系运算

% 1.3 数组的关系运算
% < <= > >= == ~= 维数必须相同(或一个为标量),结果为数组
% 例8:数组关系运算
clc,clear
A=[11 10 13 4 5]
B=[3 15 21 6 5]
C=A<=10
D=A>10
E=A>B
F=AB
G=5
A
A(A>10)=10 %关系运算并赋值
B(B==5)=100

1.4 数组的逻辑运算

% 1.4 数组的逻辑运算
% & | ~
% 例9:数组逻辑运算
clc,clear
A=[11 0 0 1 5]
B=[3 15 0 0.5 5]
C=A&B
D=A|B
E=~A

1.5 数组信息的获取

1.5.1 数组结构

% 1.5.1 数组结构
% isempty(A) 判断数组是否为空,为空返回1
% isscalar(A) 判断数组是否为单个元素的标量
% isvector(A) 判断是否为行/列向量
% isrow(A) 判断是否为行向量
% iscolum(A) 判断是否为列向量
% issparse(A) 判断是否为系数矩阵
clc,clear
A=[11 0 0 1 5]
B=[1]
f1=isempty(A)
f2=isscalar(A)
f2=isscalar(B)
f3=isvector(A)
f4=issparse(A)

1.5.2 数组大小

% 1.5.2 数组的大小
% size() 返回数组的函数和列数[m,n]
% length() 返回一维数组的长度,如果为二维数组返回行数列数较大者即length(A)=max(size(A))
clc,clear
A=[11 0 0 1 5]
d=size(A)
[m,n]=size(A)
length(A)

1.5.3 数组的维度

% 1.5.3 数组的维度
% ndims() 相当于length(size(A)),注意一维数组的维度为2
A=[11 0 0 1 5]
n1=ndims(A)
a=5;
n2=ndims(a)

1.5.4 数组的数据类型

% 1.5.4 数组的数据类型
% isnumeric() 判断是否为数值型(整型、浮点型)
% isreal() 判断是否为实数类型
% isfloat() 判断是否为浮点型
% isinteger() 判断是否为整型
% islogical() 判断是否为逻辑型
% ischar() 判断是否为字符型
% isstruct() 判断是否为结构体型
% iscell() 判断是否为元胞型
clc,clear
A=[11 0 0 1 1]
B=A>5
f1=isnumeric(A)
f2=isreal(A)
f3=isinteger(A)
f4=islogical(B)

1.5.5 数组的内存占用

% 1.5.5 数组的内存占用
% whos 获取数组大小、内存占用
clc,clear
A=[11 0 0 1 5]
B=A>0
C=[‘a’,‘b’,‘c’]
whos

1.5.6 数组的查找

% 1.5.6 数组的查找
% find()
clc,clear
A=[10 9 6 1 5]
find(A>5)
find(A== 5)
A(find(A>5))=A(find(A>5))+100
A(A==5)=200

1.5.7 数组的排序

% 1.5.7 数组的排序
% sort()
clc,clear
A=[10 9 6 1 5]
B=sort(A) %默认升序排序
[C,I]=sort(A,‘ascend’) %升序排序,I为排序后元素在原数组中位置
D=sort(A,‘descend’)

2 矩阵的创建

%% 2.矩阵的创建
% 直接输入矩阵、通过语句和函数生成矩阵、通过M文件来建立矩阵、从外部数据导入矩阵
clc,clear
A=[1:4;2:5;5:8]
f1=A(2,3)
f2=A(3) %按列存储
f3=A(3,:)
f4=A(1:2,3:4)
f5=A(1:end,end)
% IND=sub2ind(size,i,j)双下表转但下标,[i,j]=ind2sub(size,IND)单下标转双下标
clc,clear
A=[1:4;5:8;9:12;13:16]
ind=sub2ind(size(A),3,4)
A(ind)
A(3,4)
[i,j]=ind2sub(size(A),10)
ind=sub2ind(size(A),i,j)
% 矩阵特定元素获取
clc,clear
A=[1:4;5:8;9:12;13:16]
A>5
A(A>5)=5
find(A>4)
A(find(A>4))=6
% 矩阵的自动扩充
clc,clear
A=[1:3;2:4]
A(4,4)=1

3 矩阵的基本操作

3.1 矩阵的扩展

% 3.1 矩阵的扩展
% cat(dim,A,B) 在dim维度上对矩阵A,B进行连接,cat(1,A,B)相当于[A;B],cat(2,A,B)相当于[A,B]
% vertcat(A,B) 在垂直方向上连接A,B,相当于cat(1,A,B)
% horzcat(A,B) 在水平方向上连接A,B,相当于cat(2,A,B)
A=ones(2,2)
B=zeros(2,2)
c1=cat(1,A,B)
c2=cat(2,A,B)
c3=vertcat(A,B)
c4=horzcat(A,B)

3.2 矩阵的块操作

% 3.2 矩阵的块操作
% B=repmat(A,m,n) 或 B=repmat(A,[m,n]) 以A为单个元素,产生m行n列的矩阵B
% C=repmat(A,m) 产生m行m列的矩阵C
% D=blkdiag(A,…) 多个矩阵产生对角块
% E=kron(A,B) 新矩阵为A的每个元素乘B矩阵并按相对位置拼接
clc,clear
A=magic(3)
B=repmat(A,2,3)
C=repmat(A,2)
D=blkdiag(A,C)
A1=[1:3;4:6]
E=kron(A,A1)

3.3 矩阵中元素的删除

% 3.3 矩阵中元素的删除
% []将矩阵置空,clear X将X从工作空间删除
clc,clear
A=rand(4,4)
A([1 3],:)=[]
A(:,end)=[]

3.4 矩阵的转置

% 3.4 矩阵的转置
% A’ 或 ctranspose(A)
% 对于复数A’为共轭转置,A.‘或transpose(A)为普通转置
clc,clear
A=rand(2,4)
A1=A’
A2=ctranspose(A)
A3=transpose(A)
B=[2+3i,4+5i,3;2,4+i,5+3i]
B1=B’
B2=B.’
B3=ctranspose(B)
B4=transpose(B)

3.5 矩阵的旋转

% 3.5 矩阵的旋转
% B=rot90(A) 逆时针旋转90度
% B=rot90(A,k) 逆时针旋转90度的k倍
clc,clear
A=rand(3,4)
B=rot90(A)
C=rot90(A,2)
D=rot90(A,4)

3.6 矩阵的翻转

% 3.6 矩阵的翻转
% filplr(A) 左右翻转
% flipud(A) 上下翻转
% flipdim(A,k) k=1时上下翻转,k=2时左右翻转
clc,clear
A=rand(3,4)
B=fliplr(A)
C=flipud(A)
D=flipdim(A,1)
E=flipdim(A,2)

3.7 矩阵尺寸的改变

% 3.7 矩阵尺寸的改变
% Y=reshape(X,m,n) 将X转换为m*n的二维矩阵,总元素数不变
X=[1:4;5:8]
Y1=reshape(X,1,8)
Y2=reshape(X,[4,2])

4 矩阵的基本数值运算

4.1 矩阵的加减乘除运算

% 4.1 矩阵的加、减、乘、除运算
A=[1:3;2:4]
B=[2:4;3:5]
C=A+B %+
D=A-B %-
B=[1:2;3:4;5:6]
C=AB %
A=[1:3;2:4;3:5]
B=[1:2:5;2:2:6;3:2:7]
X=A\B %\左除,相当于AX=B的解,A\B即A^(-1)B
Y=B/A %/右除,相当于Y
A=B的解,B/A即B
A^(-1)

4.2 矩阵元素的查找

% 4.2 矩阵元素的查找
% find()
clc,clear
A=[1 0 3;0 3 1;9 4 2]
i=find(A) %查找非0元素返回单下标
[i,j]=find(A) %返回双下标

4.3 矩阵元素的排序

% 4.3 矩阵元素的排序
% [Y,I] = sort(X,DIM,‘MODE’)
% DIM为排序维度(默认1),MODE为排序方式(‘ascend’,‘descend’,默认ascend)
% I为Y中对应元素在X中的位置,可省
clc,clear
A=[1 0 3;0 3 1;9 4 2]
[Y,I]=sort(A,2,‘descend’)

4.4 矩阵元素的求和

% 4.4 矩阵元素的求和
% Y=sum(X,DIM) 求和返回向量,DIM为求和的维度(默认1)
% Y=cumsum(X,DIM) 求累积和返回矩阵
A=[1:4;5:8;ones(1,4)]
B1=sum(A,1)
B2=sum(A,2)
C1=cumsum(A,1)
C2=cumsum(A,2)

4.5 矩阵元素求积

% 4.5 矩阵元素求积(规则同求和)
% Y=prod(X,DIM)
% Y=cumprod()
X=[1 2 3 0;2 6 7 8;1 2 3 5]
B1=prod(X)
B2=prod(X,2)
C1=cumprod(X)
C2=cumprod(X,2)

4.6 矩阵元素的差分

% 4.6 矩阵元素的差分
% Y=diff(X,N,DIM)
% N差分的阶数(默认1),DIM求差分的维度(默认1)
X=[1 2 3 0;2 6 7 8;1 2 3 5]
B1=diff(X)
C1=diff(X,1,2)
C2=diff(X,2,2)

5 特殊矩阵的生成

% 5.1 全零/1矩阵
% A=zeros(M,N,P,…) 单个参数时,为方阵
% A=ones(M,N,P,…)
clc,clear
A=zeros(4)
B=zeros(3,4)
C=zeros(2,3,4,5)
% 5.2 单位矩阵
% A=eye(N) NN单位矩阵
% A=eye(M,N) M
N对角线为1,其余为0
A=eye(3)
B=eye(4,3)
% 5.3 0~1间均匀分布矩阵
% A=rand(M,N,P,…) 单个参数时,为方阵
A=rand(3)
B=rand(2,3)
% 5.4 标准正态分布随机矩阵
% A=randn(M,N,P,…) 均值为0,方差为1
A=randn(3)
B-randn(2,3)
% 5.5 魔方矩阵
% A=magic(n) 每行、每列、两条对角线上的元素和都相等
A=magic(3)
% 5.6 范德蒙矩阵
% vander(V)
% 最后一列全为1,倒数第二列为指定向量V,其余各列是其后列与倒数第二列的点乘积
A=vander([1;2;3;4])
B=vander([1 2 3 4])
% 5.7 希尔伯特矩阵
% hilb(n) 产生希尔伯特矩阵
% invhilb(n) 产生希尔伯特矩阵的逆矩阵
% 希尔伯特矩阵是一种病态矩阵,矩阵中任何一个元素发生微小变化,
% 整个矩阵的值和逆矩阵都发生巨大的变化
A=hilb(3)
B=invhilb(4)
% 5.8 托普利兹矩阵
% toeplitz(x) x做第一行和第一列
% toeplitz(x,y) x为第一列,y为第一行
A=toeplitz(3:6)
B=toeplitz(3:4,3:6)
% 5.9 伴侣矩阵(友矩阵)
% compan§
% p为多项式系数向量,高次幂系数排在前,低次幂排在后
p=[1,-1,0]
A=compan§
eig(A) %为X^2-x+0=0的解
% 5.10 帕斯卡矩阵
% pascal(N)
% 由杨辉三角生成的矩阵
A=pascal(5)

6 矩阵的特征和线性代数

% 6.1 方阵的行列式
% det(X)
clc,clear
A=magic(3)
y=det(A)
% 6.2 特征值、特征向量、特征多项式
% E=eig(A) A的全部特征值组成特征向量E
% [V,D]=eig(A) V的每一列为一个特征向量;D为对角矩阵,对角线上元素为特征值
clc,clear
A=magic(3)
E=eig(A)
[V,D]=eig(A)
% 求一元高次方程的解(3x3+5*x2+2x+1=0)
p=[3 5 2 1]
A=compan§ %产生伴侣矩阵
x1=eig(A) %伴侣矩阵的特征值即方程的解
x2=roots§ %直接求方程的解
% 6.3 对角阵(数量矩阵、单位矩阵)
% diag(A,k) 提取矩阵第k条对角线上的元素(默认0,即主对角线)
A=rand(3,4)
b1=diag(A)
b2=diag(A,0)
b3=diag(A,1)
% 6.4 上三角阵和下三角阵
% triu(A,k) 返回矩阵A第k条对角线以上的元素(默认0,即上三角矩阵)
% tril(A,k) 返回矩阵A第k条对角线以下的元素(默认0,即下三角矩阵)
A=rand(3,3)
B1=triu(A)
B2=triu(A,0)
B2=triu(A,1)
C1=tril(A)
C2=tril(A,0)
C3=tril(A,-1)
% 6.5 矩阵的逆和伪逆
% inv(A) 方阵的逆
% pinv(A) 矩阵的广义逆
A=magic(3)
B=inv(A)
AB
C=[1 3;2 6]
D=pinv©
C
D*C
% 6.6 矩阵的秩
% rank()
A=magic(3)
B=[1 2 4;2 3 5;2 4 8]
r1=rank(A)
r2=rank(B)
% 6.7 矩阵的迹
% trace()
% 对角线元素之和,特征值之和
A=magic(3)
t1=trace(A)
eig(A)
t2=sum(eig(A))
% 6.8 矩阵的范数
% norm(X) 或 norm(X,2) 计算X的2-范数,返回矩阵的最大奇异值max(svd(A))
% norm(X,1) 计算矩阵的1-范数,返回矩阵的列向元素和的最大值max(sum(abs(A)))
% norm(X,inf) 计算矩阵的inf-范数,返回矩阵行向元素和的最大值max(sum(abs(A’)))
% norm(X,‘fro’) 计算矩阵的Frobenius范数
A=[1 2 3;3 5 7;2 5 8]
n1=norm(A,1)
n2=norm(A)
n3=norm(A,inf)
n4=norm(A,‘fro’)
n5=normest(A) %2-范数的估计值
% 6.9 矩阵的条件数
% 6.10 矩阵的标准正交基
% 6.11 矩阵的超越函数

7 系数矩阵

8 矩阵的分解

你可能感兴趣的:(数学建模,matlab,线性代数)