我有一个任务要在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说当我运行这段代码时:使用*时出错
内部矩阵尺寸必须一致。
感谢
答案 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)
是矩阵大小5000x5000
而W
是3x3
。所以我想你应该把它改成:
k=tril(y*y')*W;
然后alfa*(y*x'-k);
将成为3x3
矩阵。