我有一个矩阵 D,它是 m*n,我正在使用公式 inv(D'*D)*D' 计算伪逆,但它不会产生与 pinv(D) 相同的结果。我需要术语 inv( D'*D) 我需要增量操作。我的所有准确性都取决于不正确的 inv(D'*D)。有没有其他方法可以准确地获得 inv(D'*D) ?有人能帮帮我吗?
% D 是我从一个博客中复制的 3x4 矩阵,仅用于演示目的。其实我原来的一个也有同样的问题,但它的尺寸太大,我不能在这里发布。
D = -[1/sqrt(2) 1 1/sqrt(2) 0;0 1/sqrt(2) 1 1/sqrt(2);-1/sqrt(2) 0 1/sqrt(2) 1];
B1 = pinv(D)
B2 = D'*inv(D*D')
B1 =
-0.353553390593274 0.000000000000000 0.353553390593274
-0.375000000000000 -0.176776695296637 0.125000000000000
-0.176776695296637 -0.250000000000000 -0.176776695296637
0.125000000000000 -0.176776695296637 -0.375000000000000
Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND =
1.904842e-017.
B2 =
-0.250000000000000 0 0.500000000000000
-0.500000000000000 0 0
0.250000000000000 -0.500000000000000 0
0 0 -0.750000000000000
我需要 inv(D'D) 进行增量操作。实际上在我的第 1 步问题中,每次都会在 D 的最后一个位置添加一个新行,并且在第 2 步中 D 的第一行将被删除。所以我想使用我在这两个步骤之前计算的逆找到最终的 D 逆。更确切地说,看看这里:
B = inv(D'*D); % if i can calculate it accurately then further work is as follows
D1 = [D;Lr]; %Lr is last row to be added
BLr = B-((B*Lr'*Lr*B)/(1+Lr*B*Lr')); % Row addition formula
Fr = D1(1,:); % First row to be removed
D2 = removerows(D1,1);
BFr = BLr+ ((BLr*Fr'*Fr*BLr)/(1-Fr*BLr*Fr')); % row deletion formula
B = BFr;
Y = BFr*D2;