matlab - 4x4 矩阵的正交性

标签 matlab matrix dct orthogonal

我正在处理一项处理污渍去除的 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/

相关文章:

performance - 通过相互依赖的迭代对 for 循环进行向量化

matlab - 如何从命令行运行matlab并打印到命令行?

r - 如何在 R 中打印隐藏 NA 值的矩阵?

linux - Gnuplot,如何计算我的 gnuplot 脚本的矩阵输入的行和列?

image - 有什么方法可以控制 blockproc 输出的串联吗?

c - 黑鳍金枪鱼。使用 BF537 EZ-KIT 进行 2D DCT/IDCT(图像压缩),如何从 BF537 内存写入文件(在磁盘上)重建图像(原始像素数据)?

MATLAB dct2/idct2 与 dctmtx

matlab - 两组 3D 点之间的欧氏距离

matlab - Matlab GUI 中带有 slider 的 WindowScrollWheelFcn

language-agnostic - 如何测试矩阵是否是对角线?