📄 nipals.m
字号:
function [P, Q, W, T, U] = Nipals(X, Y)
[Nobj, NvarY] = size(Y);
if NvarY > 1
SumSquaresY = sum(Y.^2);
[Dummy,IndexSSQY] = max(SumSquaresY);
U = Y(:, IndexSSQY);
else
U = Y(:, 1);
end
Iter=1;
Convergence = 1;
SaveCol = X(:,1);
while Convergence > 1e-10
Iter = Iter + 1;
W = (U' * X)';
W = (W' / norm(W'))'; % Normalise
T = X * W;
if NvarY == 1 % Only one output variable
Q = 1;
break
end
Q = (T' * Y)';
Q = (Q' / norm(Q'))'; % normalise!!
U = Y * Q;
Convergence = norm(SaveCol - T);
SaveCol = T;
if Iter >= 100
break; % No proper convergence, quit the algorithm
end
end
P = (T' * X / (T' * T))';
NormVal = norm(P); % Normalise all
T = T * NormVal;
W = W * NormVal;
P = P / NormVal;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -