[Master Index]
[Index for Toolbox]
subcorr_gui
(Toolbox/subcorr_gui.m in BrainStorm 2.0 (Alpha))
Function Synopsis
[Co,X,Y] = subcorr_gui(A,B,GUI);
Help Text
SUBCORR_GUI - Subcorr function custom to the gui features
function [Co,X,Y] = subcorr_gui(A,B,GUI);
GUI.REG is a regularization switch
GUI is a struction with regularization fields to match
See REGCHECK
Note that BOTH A and B are regularized in this call.
approaches Truncated Condition and Truncated Energy have
effectively the regularization built in by simply truncating the space.
Column normalization should
have already been done before the call, if requested.
Here we are only concerned with Tikhonov regularization by building the
filter functions, if requested.
Cross-Reference Information
This function calls
This function is called by
Listing of function C:\BrainStorm_2001\Toolbox\subcorr_gui.m
function [Co,X,Y] = subcorr_gui(A,B,GUI);
%SUBCORR_GUI - Subcorr function custom to the gui features
% function [Co,X,Y] = subcorr_gui(A,B,GUI);
% GUI.REG is a regularization switch
% GUI is a struction with regularization fields to match
% See REGCHECK
% Note that BOTH A and B are regularized in this call.
%
% approaches Truncated Condition and Truncated Energy have
% effectively the regularization built in by simply truncating the space.
% Column normalization should
% have already been done before the call, if requested.
% Here we are only concerned with Tikhonov regularization by building the
% filter functions, if requested.
%<autobegin> ---------------------- 26-May-2004 11:34:33 -----------------------
% --------- Automatically Generated Comments Block Using AUTO_COMMENTS ---------
%
% CATEGORY: Inverse Modeling
%
% Alphabetical list of external functions (non-Matlab):
% toolbox\regsubspace.m
% toolbox\subcorr_gui.m NOTE: Routine calls itself explicitly
%
% At Check-in: $Author: Mosher $ $Revision: 13 $ $Date: 5/26/04 10:02a $
%
% This software is part of BrainStorm Toolbox Version 2.0 (Alpha) 24-May-2004
%
% Principal Investigators and Developers:
% ** Richard M. Leahy, PhD, Signal & Image Processing Institute,
% University of Southern California, Los Angeles, CA
% ** John C. Mosher, PhD, Biophysics Group,
% Los Alamos National Laboratory, Los Alamos, NM
% ** Sylvain Baillet, PhD, Cognitive Neuroscience & Brain Imaging Laboratory,
% CNRS, Hopital de la Salpetriere, Paris, France
%
% See BrainStorm website at http://neuroimage.usc.edu for further information.
%
% Copyright (c) 2004 BrainStorm by the University of Southern California
% This software distributed under the terms of the GNU General Public License
% as published by the Free Software Foundation. Further details on the GPL
% license can be found at http://www.gnu.org/copyleft/gpl.html .
%
% FOR RESEARCH PURPOSES ONLY. THE SOFTWARE IS PROVIDED "AS IS," AND THE
% UNIVERSITY OF SOUTHERN CALIFORNIA AND ITS COLLABORATORS DO NOT MAKE ANY
% WARRANTY, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF
% MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, NOR DO THEY ASSUME ANY
% LIABILITY OR RESPONSIBILITY FOR THE USE OF THIS SOFTWARE.
%<autoend> ------------------------ 26-May-2004 11:34:33 -----------------------
% ----------------------------- Script History ---------------------------------
% 1994 by John C. Mosher, Ph.D.
% 10/29/99 JCM, some optimizations.
% JCM 10-May-2002 Adjustments to display in command window, not message window
% 19-May-2004 JCM Comments Cleaning
% ----------------------------- Script History ---------------------------------
[Ua,Sa,Va]= svd(A,0);
[Ub,Sb,Vb]= svd(B,0);
% trim the subspace to the appropriate size
Ua = regsubspace(GUI,Ua,Sa);
Ub = regsubspace(GUI,Ub,Sb);
C = Ua'*Ub;
if(nargout < 2) % want only angles
Co = svd(C);
too_big = find(Co > 1); % numerical error
Co(too_big) = 1; % matlab 5.3 allows scalar to vector mapping
too_small = find(Co < 0); % more numerical error
Co(too_small) = 0; % the null case is also adequately handled
return
else % nargout is 2 or more
% trim to the rank
rnk_a = size(Ua,2);
rnk_b = size(Ub,2);
if(length(Sa) > 1),
Sa = diag(Sa);
end
if(length(Sb) > 1),
Sb = diag(Sb);
end
Sa = Sa(1:rnk_a);
Va = Va(:,1:rnk_a);
Sb = Sb(1:rnk_b);
Vb = Vb(:,1:rnk_b);
[Uc,Co,Vc] = svd(C);
if(min(size(Co))==1),
Co = Co(1);
else,
Co = diag(Co);
end
too_big = find(Co > 1); % numerical error
Co(too_big) = ones(length(too_big),1);
too_small = find(Co < 0); % numerical error
Co(too_small) = zeros(length(too_small),1);
switch GUI.REG
case 'Tikhonov'
Lambda = Sa(1)/GUI.Tikhonov; % relative condition setting
Fa = Sa.^2 ./ (Sa.^2 + Lambda^2);
Lambda = Sb(1)/GUI.Tikhonov; % relative condition setting
Fb = Sb.^2 ./ (Sb.^2 + Lambda^2);
VaSai = Va*diag(Fa./Sa); % filtered
VbSbi = Vb*diag(Fb./Sb);
otherwise
% all other conditions are truncated types
VaSai = Va*diag(1../Sa);
VbSbi = Vb*diag(1../Sb);
end
X = VaSai*Uc;
Y = VbSbi*Vc;
% debugging comments
switch GUI.REG
case 'Tikhonov'
% don't send to the message window,
% too detailed, more of a debugging set
disp('Subcorr gui Comments:')
disp(['Co: ',sprintf('%.4f ',Co)]);
disp(['Regularized: ',sprintf('%.4f ',subcorr_gui(A*X(:,1),B*Y(:,1),struct('REG','None')))])
disp(['Filters a and b: ',sprintf('%.3f ',Fa) ' ; ' sprintf('%.3f ',Fb)])
otherwise
% nothing, orientation not altered
end
return
end
return
Produced by color_mat2html, a customized BrainStorm 2.0 (Alpha) version of mat2html on Tue Oct 12 12:05:14 2004
Cross-Directory links are: ON