matlabnorm函数使⽤_matlab学习笔记——数值计算
常⽤数值计算命令
5 null 求齐次线性⽅程组的基础解系。⽤来求解零空间,即满⾜⽅程组A*X=0的解空间。
6. 施密特正交化
7. givens变换
8. householder变换
9. qr
chol 矩阵的QR分解和cholesky分解
qr chol
10. triu, tril 矩阵的上三⾓矩阵和下三⾓矩阵
10. triu, tril
polyeig 求解多项式特征值问题
11. polyeig
12. norm
norm 计算⼏种不同类型的矩阵或向量的范数
global 定义全局变量
13. global
fix, round, floor, ceil。取整函数
14. fix, round, floor, ceil。取整函数
diff,差分。
gradient,求数值梯度。diff
15. gradient,
transpose,A.',ctranspose, A' 和conj的区别(转置与共轭,容易混淆)
16. transpose,A.',ctranspose, A' 和conj的区别(转置与共轭,容易混淆)
reshape ⽤于改变矩阵形状
17. reshape
cat 拼接矩阵或构造三维数组
18. cat
atan2,四象限反正切函数,值域为
19. atan2
atan值域为
atan
20. squeeze
squeeze 删除矩阵只有⼀⾏或⼀列的维度
3. awgn ⽣成加性⽩噪声; wgn
wgn⽣成具有⼀定功率谱的⽩噪声
3. awgn
out = awgn(in,snr)
noise = wgn(m,n,power)
4. pwelch,cpsd
pwelch,cpsd 功率谱密度计算
cpsd⽤于求互功率谱密度
[Pxx,f]=pwelch(x,window,noverlap,nfft,fs)
pxy = cpsd(x,y,window,noverlap,nfft)
默认采⽤Welch⽅法:1. 将信号分为多段(每段之间可以有overlapping,也可以没有); 2. 每⼀段加窗;3. 每⼀段做谱分析;4. 求平均。
null 求齐次线性⽅程组的基础解系。⽤来求解零空间,即满⾜⽅程组A*X=0的解空间。
5. null
6. 施密特正交化
7. givens变换
8. householder变换
9. qr qr chol chol 矩阵的QR分解和cholesky分解
基本⽤法:
[Q,R] = qr(A)(其中 A 是 m×n)⽣成 m×n 上三⾓形矩阵 R 和 m×m ⾣矩阵 Q,这样 A = Q*R。
[Q,R] = qr(A,0) ⽣成精简分解。如果 m > n,将仅计算 Q 的前 n 列和 R 的前 n ⾏。如果 m<=n,这与 [Q,R] = qr(A) 相同。 Cholesky 分解是把⼀个对称正定的矩阵表⽰成⼀个下三⾓矩阵L和其转置的乘积的 分解。
A = randn(3,4);
B = A*A';
C = chol(B)
[Q1,R1]= qr(A)
[Q2,R2]= qr(A')
Q2c = (R2(1:3,1:3)'A)';
QRQ = Q1*R1*Q2
eqr1 = Q1*R1-A;
eqr2 = Q2*R2-A';
echol = B-C'*C;                    %chol 分解误差(约等于0)
ee1 = R2(1:3,1:3)'*Q2(:,1:3)'- A;  %证明A=R2'*Q2',R2(1:3,1:3)'是下三解矩阵
ee2 = R2(1:3,1:3)-C;              %证明R2(1:3,1:3) = C
ee3= Q2c - Q2(:,1:3);              %结合ee2=0,证明可由chol 分解求qr 分解
Err = [norm(eqr1),norm(eqr2),norm(echol),norm(ee1),norm(ee1),norm(ee1)]
计算结果如下,可注意到C与R2等价,也就是说,chol分解与qr分解间有联系。
C =
0.85986  -2.11833  0.42452
0.00000  4.63195  -1.00306
0.00000  0.00000  1.58989
Q1 =
-
0.222803  -0.207952  0.952426
0.964030  0.098248  0.246969
-0.144932  0.973192  0.178582
R1 =
3.10498  0.56395  -
4.04195  0.53246
0.00000  0.95028  0.95203  0.92567
0.00000  0.00000  -0.77590  0.73997
Q2 =
-0.804547  0.278285  0.107347  0.513554
-0.375948  -0.034402  0.608945  -0.697614
-
0.042338  -0.881775  0.319051  0.344799
0.457793  0.379271  0.718240  0.361539
R2 =
0.85986  -2.11833  0.42452
0.00000  4.63195  -1.00306
0.00000  0.00000  1.58989
0.00000  0.00000  0.00000
QRQ =
8.5986e-01  1.3600e-15  -2.2204e-16  -9.1593e-16
-2.1183e+00  4.6319e+00  1.6653e-15  -2.3315e-15
4.2452e-01  -1.0031e+00  1.5899e+00  9.9920e-16
Err =
2.1351e-15  2.1809e-15
3.5665e-15  2.1809e-15  2.1809e-15  2.1809e-15
在上述算例中:
从算例中也可看出
的前3列与
相同,⽽
的前3⾏与
相同。
10. triu, tril 矩阵的上三⾓矩阵和下三⾓矩阵
10. triu, tril
triu, tril返回包含对⾓元素的上、下三⾓矩阵。
A = [1,2,3,4; 5,6,7,8; 9,10,11,12]
UA = triu(A)
LA = tril(A)
计算结果为:
A =
1    2    3    4
5    6    7    8
9    10    11    12
UA =
1    2    3    4
0    6    7    8
0    0    11    12
LA =
1    0    0    0
5    6    0    0
9    10    11    0
polyeig 求解多项式特征值问题
11. polyeig
例如,对振动⽅程,
它对应的特征值问题为
则可⽤[phi, lambda] = polyeig(K, C, M)求解此问题,注意K,C,M顺序。
[X,e] = polyeig(A0,A1,...,Ap)
norm 计算⼏种不同类型的矩阵或向量的范数
12. norm
n=norm(v) 返回向量v的欧⼏⾥德。此范数也称为 2-范数、向量模或欧⼏⾥德长度。n=norm(X,'fro'),返回矩阵的Frobenius范数
n = norm(X, p),返回矩阵X的 p-范数,按下表规则取值:
详见:向量范数和矩阵范数 - MATLAB norm - MathWorks 中国
global 定义全局变量
13. global
若⼀些常量,在主程序和⼦程序中相同,为了减少函数传递的变量,可⽤global声明全局变量。可同时声明多个全局变量。⼦函数调⽤时,也需先声明。
需注意,不能出现其它与全局变量同名的局部变量(这⼀点需仔细检查)。
将以下M⽂件命名为sumtest,则运⾏后可⾏⼏个变量求和结果,且⼦函数⽆传递变量。
function sumtest
global a b c
a = 1;
b = 2;
c = 3;
sumabc
end
function sabc = sumabc
global a b c
sabc = a+b+c;
end
fix, round, floor, ceil。取整函数
14. fix, round, floor, ceil。取整函数
fix-向零⽅向取整
round-向最近的⽅向取整
round
matlab求导floor-向负⽆穷⼤⽅向取整
floor
ceil-向正⽆穷⼤⽅向取整
ceil
A = [-1.1, -0.9, -0.1, 0.01, 0.9, 1.1]
Afix = fix(A)
Around = round(A)
Afloor = floor(A)
Aceil = ceil(A)
计算结果为:
A =
-
1.1000  -0.9000  -0.1000    0.0100    0.9000    1.1000
Afix =
-1    0    0    0    0    1
Around =
-1    -1    0    0    1    1
Afloor =
-2    -1    -1    0    0    1
Aceil =
-1    0    0    1    1    2
diff,差分。
gradient,求数值梯度。diff
15. gradient,
gradient计算时对中间点
对边缘点
,其中n为总点数。
⾏优先求梯度,即先给出⾏向量的梯度。例如命令[G1,G2]=gradient(F)中,G1为对⾏求梯度的结果,G2为对列求梯度gradient计算是⾏优先求梯度
的结果。
列优先求差分。diff会导致数据长度减⼩(-1)。
diff求前后两之差. diff(X)与X(2:end)-X(1:end-1)相似,diff计算矩阵时列优先求差分
注:这两个命令默认数据时间间隔为1, 在使⽤时需注意除以两点间的时间间隔。(值得说明的时,两者求导都是近似的,对数据中频率⾼的成分会造成显著误差。)
F =[1,2,3,4,5; 1,2,4,7,11; 1,2,5,10,17;]
G = gradient(F)
[G1,G2] = gradient(F)
G0 = diff(F)
计算结果为:
F =
1    2    3    4    5
1    2    4    7    11
1    2    5    10    17
G =
1.0000    1.0000    1.0000    1.0000    1.0000
1.0000    1.5000
2.5000
3.5000
4.0000
1.0000
2.0000    4.0000    6.0000    7.0000
G1 =
1.0000    1.0000    1.0000    1.0000    1.0000
1.0000    1.5000
2.5000
3.5000
4.0000
1.0000
2.0000    4.0000    6.0000    7.0000
G2 =
0    0    1    3    6
0    0    1    3    6
0    0    1    3    6
G0 =
0    0    1    3    6
0    0    1    3    6
16. transpose,A.',ctranspose, A' 和conj的区别(转置与共轭,容易混淆)
transpose,A.',ctranspose, A' 和conj的区别(转置与共轭,容易混淆)
transpose相当于A.'
A.'
A.'返回A的⾮共轭转置,即每个元素的⾏和列索引都会互换。如果A包含复数元素,则A'不会影响虚部符号。transpose相当于A.'
ctranspose相当于A' ,即转置A'
A'返回A的共轭转置,即每个元素的⾏和列索引都会互换。如果A包含复数元素,则A'会影响虚部符号。ctranspose相当于A' ,即转置与共轭同时进⾏。
conj(A)对每个元素取共轭,位置不进⾏转置。
conj(A)
A = [1+2i, 2+3i;  3+4i,  5+6i;  7+8i,9+10i;]
B1 = A'                      %共轭转置
B2 = ctranspose(A)
C1 = A.'                    %转置
C2 = transpose(A)
D = conj(A)                  %共轭
计算结果为: