0

我想将一个 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

谢谢您的帮助!

4

0 回答 0