我想将一个 matlab 函数翻译成 R 代码。这是我最困惑的代码部分:
obj = (Pv*v)'*double(ttv(Xhat,Pv*v,2))*(Pu*u);
ind = 1; iter = 1;
while ind>thr & maxit>iter
oldo = obj(end);
uhat = Pu*double(ttv(Xhat,v,1))'*v;
u = uhat/norm(uhat);
[v,tmp] = eigs(Pv*double(ttv(Xhat,u,3))*Pv,1);
obj = [obj (Pv*v)'*double(ttv(Xhat,Pv*v,2))*(Pu*u)];
ind = abs((obj(end) - oldo)/obj(1));
iter = iter + 1;
end
d = v'*double(ttv(Xhat,u,3))*v;
1)第一个问题是第 4 行oldo = obj(end)
。有人可以向我解释这种语法吗?(我认为它会结束 while 循环?)这也在第 9 行。
2) 第 7 行:[v,tmp] = eigs(Pv*double(ttv(Xhat,u,3))*Pv,1);
。我不明白是什么[v, tmp]
。“v”是先前定义的变量,但 tmp 不是。有人可以解释这个数据结构吗?
3) 第 8 行:obj = [obj (Pv*v)'*double(ttv(Xhat,Pv*v,2))*(Pu*u)];
。我对括号内发生的操作感到困惑 - 例如,“obj”和“(Pv * v)......”之间有一个空格但没有运算符。括号在这里充当某种运算符吗?
仅供参考,ttv() 是 Tensor Toolbox 中的一个函数。如果有人可以帮助解决这些问题中的任何一个,那将对我有很大帮助。我知道这是一个模糊/多部分的问题,但我想如果有人可以回答其中一个问题,他们可以回答所有问题。此外,如果您只是解释这些代码行在 matlab 中的作用而不将它们翻译成 R,那也将非常有帮助。完整代码在这里:https ://github.com/zhengwu/TensorNetwork_PCA/blob/master/hopca_popNet_new.m
谢谢您的帮助!