基于Matlab的广义Hebbian算法计算权重

时间:2015-09-24 09:56:00

标签: matlab

我有一个任务要在matlab中做一些计算。我使用广义Hebbian算法来计算一些权重,这里是Hebbian算法的函数,第15片 http://www.eit.lth.se/fileadmin/eit/courses/eitn55/Downloads/ICA_Ch6.pdf

这是我的代码

alfa=0.5;
e=randn(3,5000);
A=[1 0 0;-0.5 0.5 0;0.3 0.1 0.1];
x=A*e;
W=rand(3);
nn=size(x);
for n=1:nn
    y=W*x(:,n);
    k=tril(y*y')*W;
    W(:,n+1)= alfa*(y*x(:,n)'-k);
end

在我的任务中,我知道x = A * e; 但我不知道我是否正在以正确的方式进行迭代? 我的for循环正确吗? 以下方程式是否正确?

    y=W*x(:,n);
    k=tril(y*y')*W;
    W(:,n+1)= alfa*(y*x(:,n)'-k);

W(:,n+1)应该打印出一个3 * 3矩阵(我所理解的)... Matlab说当我运行这段代码时:使用*时出错 内部矩阵尺寸必须一致。

感谢

1 个答案:

答案 0 :(得分:0)

如果检查每个矩阵的大小,您会发现订单不正确:

size(x)
ans =
 3 5000

size(W)
ans = 
3 3

所以你应该将它们乘以

for n=1:nn
    y=W*x;
end

然而,这部分也没有意义,

k=tril(y'*y)*W;

因为tril(y'*y)是矩阵大小5000x5000W3x3。所以我想你应该把它改成:

k=tril(y*y')*W;

然后alfa*(y*x'-k);将成为3x3矩阵。