我正在处理一项处理污渍去除的 MATLAB 任务。
我在做什么? 我得到了一个 4x4 矩阵。然后我被告知它很可能是正交的。我必须证明 DCT 矩阵实际上是正交的。
这是给定的 DCT 矩阵:
0.5000 0.5000 0.5000 0.5000
0.6533 0.2706 -0.2706 -0.6533
0.5000 -0.5000 -0.5000 0.5000
0.2706 -0.6533 0.6533 -0.2706
代码如下:
function [U, C, G] = UFGDCT(N)
%
% Compute the matrices for DCT (-?-)
%
% U is the unitary "in-between" matrix
% C is the matrix of the DCT
% G is the inverse of F
%
C = zeros(N);
for row = 0:N-1
for col = 0:N-1
C(row+1, col+1) = cos(pi*row*(col+(1/2))/N);
end
end
for cols = 0:N-1
C(1,cols+1) = C(1,cols+1)/sqrt(2);
end
C = C*sqrt(2/N);
U = C;
G = C';
end
我怎样才能以最简单的方式做到这一点?我曾尝试搜索有关查找矩阵正交性的信息,但没有成功。我找不到任何有用的东西。
结果:
mat*mat'
mat'*mat
ans =
1.0000 0 0 0
0 1.0001 0 0
0 0 1.0000 0
0 0 0 1.0001
ans =
1.0000 0.0000 -0.0000 -0.0000
0.0000 1.0000 -0.0000 -0.0000
-0.0000 -0.0000 1.0000 0.0000
-0.0000 -0.0000 0.0000 1.0000
最佳答案
如果只是想检查正交性,可以使用mat*mat'
和mat'*mat
看是否是单位矩阵
>> mat*mat'
ans =
1.0000 0 0 0
0 1.0001 0 -0.0000
0 0 1.0000 -0.0000
0 -0.0000 -0.0000 1.0001
>> mat'*mat
ans =
1.0000e+00 -2.4018e-17 -3.7377e-18 -2.5250e-05
-2.4018e-17 1.0000e+00 -2.5250e-05 -3.7377e-18
-3.7377e-18 -2.5250e-05 1.0000e+00 -2.4018e-17
-2.5250e-05 -3.7377e-18 -2.4018e-17 1.0000e+00
您将看到应设置容差以确定 mat
是否正交
>> mat*mat'-eye(4)
ans =
0 0 0 0
0 5.0500e-05 0 -3.7377e-18
0 0 0 -2.7756e-17
0 -3.7377e-18 -2.7756e-17 5.0500e-05
>> mat'*mat-eye(4)
ans =
2.5250e-05 -2.4018e-17 -3.7377e-18 -2.5250e-05
-2.4018e-17 2.5250e-05 -2.5250e-05 -3.7377e-18
-3.7377e-18 -2.5250e-05 2.5250e-05 -2.4018e-17
-2.5250e-05 -3.7377e-18 -2.4018e-17 2.5250e-05
数据
mat = [0.5000 0.5000 0.5000 0.5000
0.6533 0.2706 -0.2706 -0.6533
0.5000 -0.5000 -0.5000 0.5000
0.2706 -0.6533 0.6533 -0.2706];
关于matlab - 4x4 矩阵的正交性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65190660/