% Esta funcion estandariza la matriz del leadfield
%      Kstd = ((L*W)'\K')'  (Kstd - Leadfield estandarizado).
% Para ello aprovecha la estructura en bloques de la
% matriz L (Laplaciano) y realiza una factorizacion de 
% Cholesky para cada bloque de la misma:
%      Lb = R'*R.
% 
% Sintaxis:
%
%           Kest = klinvr(R,A,ord,W);
%
% Entrada:
%           R - Matris triangular de la factorizacion de
%               Cholesky del Laplaciano.
%           A - Matriz del Leadfield traspuesta.
%         ord - Vector de permutaciones para la factorizacion
%               de Cholesky.
%           W - Vector de pesos.
% Salida:
%        Kstd - Matriz del leadfield estandarizada.
%
% Para mas informacion ver Readme.doc. 
%
% Autor: Nelson J. Trujillo Barreto.

function Kstd = klinvr(R,A,ord,W);

nr=size(R,1);
nj=size(A,1);  
Ab=zeros(size(A));
cantblq=nj/nr;
%L=L(ord,ord);

for i=1:cantblq;
  Abl=A(i:cantblq:nj,:);
  Abl=Abl(ord,:);
    
  bldiagW=W(i:cantblq:nj);
  bldiagW=bldiagW(ord);
  Z=spdiags(bldiagW,0,nr,nr)*R.';
  Z1=Z\Abl;
  Abl=R\Z1;
       
  Abl(ord,:)=Abl;
  Ab(i:cantblq:nj,:)=Abl;
end;

Kstd = Ab.';
