【问题标题】:Orthogonality of a 4x4 matrix4x4 矩阵的正交性
【发布时间】: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 Askquestion checklist。欢迎来到 Stack Overflow!
  • 谢谢你:-)
  • 如果有帮助,您可以像dct(eye(N))一样简单地获取该矩阵
  • 您得到的结果表明它足够正交 - 存在数值错误。你两次都有一个单位矩阵,这就是你想要的。你也可以做norm(mat'*mat)-eye(4)norm(mat*mat')-eye(4) - 你想两次都得到小数字,你会的。所以一切都很好。

标签: matlab matrix dct orthogonal


【解决方案1】:

如果只是想检查正交性,可以使用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];

【讨论】:

  • 你应该在这里使用'而不是.',以防矩阵复杂
  • @LuisMendo 这是真的!感谢反馈
  • 另外,请注意您包含的测试是不够的。您还应该检查矩阵是否为正方形(或计算 mat'*matmat*mat'
  • 非常感谢@ThomasIsCoding,你让它尽可能简单。顺便说一句,我有一个问题:就矩阵的独创性而言,应该如何解释?因为,我知道在向量中,如果两条线正交,则意味着它们彼此垂直。所以我假设在矩阵中;它是正交的,因为它在对角线中具有相同的值,零点在哪里?
  • @Henrik.A 也许这可以帮助mathworld.wolfram.com/OrthogonalMatrix.html
猜你喜欢
  • 2010-11-12
  • 2017-08-21
  • 2014-11-13
  • 1970-01-01
  • 2021-03-24
  • 1970-01-01
  • 2012-09-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多