перевод целевых функций Matlab в R - PullRequest
0 голосов
/ 31 января 2020

Я хотел бы перевести функцию 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). Может кто-нибудь объяснить мне этот синтаксис? (Я думаю, что это закончится, пока l oop?). Это также в строке 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

Спасибо за помощь!

...