gpt4 book ai didi

matlab - 为什么这个公式是用这个Matlab代码写的?

转载 作者:行者123 更新时间:2023-12-02 11:33:12 24 4
gpt4 key购买 nike

this的第4节中论文中,提出了以下公式来将大小为 p 的核矩阵 K 归零:
formula

这是我与上述公式相对应的代码:

K = K - (1/p)*(K*ones(p,1))*ones(1,p) - (1/p)*ones(p,1)*(ones(1,p)*K) + (1/p^2)*sum(sum(K));

我对代码与论文中实际公式的关系感到困惑。特别是最后两个成员 - (1/p)*ones(p,1)*(ones(1,p)*K)(1/p^2)*总和(总和(K))

有人可以解释一下吗?

最佳答案

嗯,代码并不完全正确。第三项包含一个K,该值在论文中给出的公式中不存在。此外,最后一项不会与 e eT 相乘。但是,在这种情况下可以省略后者,因为 MATLAB 会自动将标量添加到矩阵中的所有元素。第三项也是如此,因此也可以省略。
这是经过上述简化的该行的正确版本:

K = K - (1/p)*(K*ones(p,1))*ones(1,p) - 1/p + (1/p^2)*sum(sum(K))

我们可以通过仅调用一次 ones 来进一步简化,因为 ones(p,1)*ones(1,p) 给出的结果与 个(p)。此外,sum(sum(K)) 可以替换为 sum(K(:))
它看起来像这样:

K = K - (1/p)*K*ones(p) - 1/p + (1/p^2)*sum(K(:))

现在我们可以将其与公式的一对一实现进行比较。因此,我们将使用e = Ones(p,1)来表示e。要获得 eT,只需将 e.' 转置即可。所以公式可以写成:

K = K - (1/p)*K*e*e.' - (1/p)*e*e.' + ((e.'*K*e)/p^2)*e*e.'

请注意,e.'*K*e 只是计算 K 中所有元素的总和,等于 sum(K(:)) 。这是有效的,因为 e = Ones(p,1)

让我们生成一些示例数据并比较结果:

rng(8);             % make it reproducible
p = 3; % size of matrix
K = randi(10,p); % generate random matrix
e = ones(p,1); % generate e-vector

K1 = K - (1/p)*(K*ones(p,1))*ones(1,p) - 1/p + (1/p^2)*sum(sum(K))
K2 = K - (1/p)*K*ones(p) - 1/p + (1/p^2)*sum(K(:))
K3 = K - (1/p)*K*e*e.' - (1/p)*e*e.' + ((e.'*K*e)/p^2)*e*e.'
K4 = K - (1/p)*K*e*e.' - (1/p)*e*e.' + sum(K(:))/p^2

结果如下:

K1 =
8.0000 5.0000 4.0000
9.6667 2.6667 4.6667
9.3333 1.3333 6.3333
K2 =
8.0000 5.0000 4.0000
9.6667 2.6667 4.6667
9.3333 1.3333 6.3333
K3 =
8.0000 5.0000 4.0000
9.6667 2.6667 4.6667
9.3333 1.3333 6.3333
K4 =
8.0000 5.0000 4.0000
9.6667 2.6667 4.6667
9.3333 1.3333 6.3333

关于matlab - 为什么这个公式是用这个Matlab代码写的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38304160/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com