【问题标题】:Multiplication of matrices involving inverse operation: getting infinity涉及逆运算的矩阵乘法:获得无穷大
【发布时间】:2017-08-31 21:13:25
【问题描述】:

在我之前在这里提出的问题中:Matlab: How to compute the inverse of a matrix

我想知道如何进行逆运算

A = [1/2, (1j/2), 0;
     1/2, (-1j/2), 0;
     0,0,1]

 T = A.*1

 Tinv = inv(T)

输出是Tinv =

   1.0000             1.0000                  0          
        0 - 1.0000i        0 + 1.0000i        0          
        0                  0             1.0000 

这与第二张图片中的相同。第一张图是矩阵A

但是对于一个更大的矩阵,比如 5 乘 5,如果我不使用恒等式 I 来执行元素乘法,我会得到无穷大的值。这是一个例子

A = [1/2, (1j/2),  1/2, (1j/2),  0;
     1/2, (-1j/2), 1/2, (-1j/2), 0;
     1/2, (1j/2),  1/2, (1j/2),  0;
     1/2, (-1j/2), 1/2, (-1j/2), 0;
     0,    0 ,     0 ,  0,      1.00
          ];

T = A.*1

Tinv = inv(T)
Tinv =

   Inf   Inf   Inf   Inf   Inf
   Inf   Inf   Inf   Inf   Inf
   Inf   Inf   Inf   Inf   Inf
   Inf   Inf   Inf   Inf   Inf
   Inf   Inf   Inf   Inf   Inf

所以,我尝试将 T = A.*II = eye(5) 相乘,然后取反,尽管我没有得到无穷大值,但我得到的元素 2 在图片中不存在 3 x 3 矩阵的情况.这是结果

Tinv =

   2.0000                  0                  0                  0                  0          
        0                  0 + 2.0000i        0                  0                  0          
        0                  0             2.0000                  0                  0          
        0                  0                  0                  0 + 2.0000i        0          
        0                  0                  0                  0             1.0000    

如果对于 3 x 3 矩阵的情况,我使用 I = eye(3),然后我再次得到元素 2。

Tinv =

   2.0000                  0                  0          
        0                  0 + 2.0000i        0          
        0                  0             1.0000 

什么是正确的方法?

问题:对于一般情况,对于任何大小的矩阵m by m,我应该使用I = eye(m) 相乘吗?使用I 可以防止无穷大值,但会产生新的数字2。我真的很困惑。请帮忙

更新:这是完整图像,其中 Theta 是 3 个未知数的向量,即 Theta1、Theta1* 和 Theta2 是 3 个标量值参数。 Theta1 是一个复数值,因此我们将其表示为两部分,Theta1 和 Theta1*,而 Theta2 是一个实数值。 g 是复值函数。复值函数关于 Theta 的导数表达式的计算结果为 T^H。因为有 3 个未知数,所以矩阵 T 的大小应该是 3 x 3。

【问题讨论】:

  • 操作T = A.*I完全对角化T,因为所有元素对角线之外的元素都是0作为标识;这是错误的T。现在如果你要做T = A*I,那很好,因为它什么都不做(因为矩阵乘以I就像标量乘以1),但它不能解决构造A.
  • 看看我的编辑。您实际上是在寻找ctranpose 而不是inv

标签: matlab math matrix inverse


【解决方案1】:

您的问题与您想象的略有不同。图像中矩阵中的符号(I0不一定是标量(仅适用于n = 1),但它们实际上是方阵

I 是单位矩阵,0 是零矩阵。如果你这样对待这些矩阵,你会得到预期的答案:

n = 2; % size of the sub-matrices
I = eye(n); % identity matrix
Z = zeros(n); % matrix of zeros
% your T matrix
T = [1/2*I, (1j/2)*I, Z;
    1/2*I, (-1j/2)*I, Z;
    Z,Z,I];
% inverse of T
Tinv1 = inv(T);
% expected result
Tinv2 = [I,I,Z;
    -1j*I,1j*I,Z;
    Z,Z,I];
% max difference between computed and expected
maxDist = max(abs(Tinv1(:) - Tinv2(:)))

【讨论】:

  • 我不确定矩阵 T 的维度是否应该增加。请您看一下更新,我提供了更多信息。感谢您的回复,我不清楚为什么必须增加维度以及为什么使用Z
  • 你确定 T 是 3×3 吗?如果是,你为什么要问更大的 T?
  • derivative of vector by vector,我觉得size(T)应该是[3*length(theta) 3*length(theta)]
  • 有两种情况,第一种情况是当有 3 个 theta 或 3 个参数时,矩阵是 3×3。下一种情况是当有 5 个参数时,矩阵 T 是5乘5
  • 下一个更大的矩阵是 6x6,而不是 5x5。 Z 必须是与I 大小相同的方阵。
【解决方案2】:

首先你应该知道,你是否应该这样做

T = A.*eye(...)

I = A.*1 %// which actually does nothing

这些是完全不同的东西。确定你需要什么,然后考虑代码。


你得到所有inf的原因是因为你的矩阵的行列式det

det(T) == 0

所以从数学的角度来看,你的结果是正确的,因为构建逆需要T 的每个元素除以det(T)。您的矩阵不能反转。如果可能的话,错误出在您的输入矩阵中,或者再次出在您对要解决的实际潜在问题的理解中。

编辑

在您的问题更新后,感觉您实际上是在寻找 ctranpose 而不是 inv

【讨论】:

  • 我需要对T 进行 3 次操作,这将给出 3 个不同的矩阵。第一个是 (1) T 的逆,然后是 (2) T 的 ctranspose,最后是 (3) T 的 ctranspose 的逆。
猜你喜欢
  • 1970-01-01
  • 2020-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 2021-07-08
  • 1970-01-01
相关资源
最近更新 更多