【发布时间】:2021-03-19 06:52:54
【问题描述】:
我正在处理一个处理污渍去除的 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
【问题讨论】:
-
请以formatted text 的形式添加文本,而不是图像。请使用tour,阅读How to Ask 和question checklist。欢迎来到 Stack Overflow!
-
谢谢你:-)
-
如果有帮助,您可以像
dct(eye(N))一样简单地获取该矩阵 -
您得到的结果表明它足够正交 - 存在数值错误。你两次都有一个单位矩阵,这就是你想要的。你也可以做
norm(mat'*mat)-eye(4)和norm(mat*mat')-eye(4)- 你想两次都得到小数字,你会的。所以一切都很好。
标签: matlab matrix dct orthogonal