我试图检查两个Fisher矩阵之间的等式或不等式
我们的目标是看投影(使用雅可比矩阵)和边缘化(矩阵反转、删除行/列并重新转换)是否能相互转换。
这两个矩阵的计算方式略有不同。这两个矩阵是Fisher矩阵
实际上,这是在每个行/列的初始参数和最终矩阵的最终参数之间更改参数的计算。这就是为什么在这两种计算中,我都使用雅可比矩阵J
来表示初始参数和最终参数之间的导数:
公式是:F_final = J^T F_initial J
第一个矩阵的大小为5x5,第二个矩阵的大小为4x4。除第4行/列外,它们是相同的
最后,我用雅可比4x4进行投影,公式为:F_final = J^T F_initial J
:所以最后得到一个4x4矩阵
我用雅可比矩阵5x5进行投影。然后我得到第二个投影矩阵5x5。最后,我删除这个5x5矩阵上的第4行/列,以获得一个4x4矩阵新的投影矩阵
我想知道在什么条件下,两个矩阵4x4之间可以相等。我不知道我的方法是否正确。
为了向您展示一个实际示例,我在下面放了一个小的Matlab脚本,它试图遵循上面解释的所有推理:
clear;
clc;
% Big_31 Fisher :
FISH_Big_1_SYM = sym('sp_', [4,4], 'real');
% Force symmetry for Big_31
FISH_Big_1_SYM = tril(FISH_Big_1_SYM.') + triu(FISH_Big_1_SYM,1);
% Big_32 Fisher :
FISH_Big_2_SYM = sym('sp_', [5,5], 'real');
% Force symmetry for Big_32
FISH_Big_2_SYM = tril(FISH_Big_2_SYM.') + triu(FISH_Big_2_SYM,1);
% Jacobian 1
J_1_SYM = sym('j_', [4,4], 'real');
% Jacobian 2
J_2_SYM = sym('j_', [5,5], 'real');
% Remove 4th row/column
J_2_SYM(4,:) = [];
J_2_SYM(:,4) = [];
% Projection
FISH_proj_1 = J_1_SYM'*FISH_Big_1_SYM*J_1_SYM;
size(FISH_proj_1)
% Invert Fisher_2
COV_Big_2_SYM = inv(FISH_Big_2_SYM);
% Remove 4th row/column
COV_Big_2_SYM(4,:) = [];
COV_Big_2_SYM(:,4) = [];
% Re-inverse
FISH_Big_2_SYM_new = inv(COV_Big_2_SYM);
% Projection 2x2
FISH_proj_2 = J_2_SYM'*FISH_Big_2_SYM_new*J_2_SYM;
size(FISH_proj_2)
% Test equality between 2 matrices
isequal(FISH_proj_1,FISH_proj_2)
这个脚本的问题是,即使我有很小的矩阵(4x4或5x5),代码运行时间也有点长,但结果是矩阵不同
我给了一些人的反馈。重要的一点是Matlab代码的这一部分:
当我这样做时:
% Remove 4th row/column
J_2_SYM(4,:) = [];
J_2_SYM(:,4) = [];
我不删除雅可比矩阵j_5_1
,j_5_2
,j_5_3
行的元素J
,当我进行投影时,这些项不会消失。另一方面,这些术语将保留在另一种方法中,在我考虑它们的意义上
那么这是一场失败的战斗吗
如果是,哪些修改或假设可能导致相等?i、 e让两个操作都通勤
若要执行
np.dot
,第一个矩阵的最后一个维度必须与第二个矩阵的第一个维度相同。它们不是,所以您得到的是ValueError,即形状没有对齐。 打印时,一切似乎都很好,但后来您忘记了行:这就是改变J_2_SYM大小的地方,毕竟它是(33,16),所以不能用(32,32)数组做点积
相关问题 更多 >
编程相关推荐