[Master Index]
[Index for PublicToolbox/regutools]
dsvd
(PublicToolbox/regutools/dsvd.m in BrainStorm 2.0 (Alpha))
Function Synopsis
x_lambda = dsvd(U,s,V,b,lambda)
Help Text
DSVD Damped SVD regularization.
x_lambda = dsvd(U,s,V,b,lambda)
x_lambda = dsvd(U,sm,X,b,lambda) , sm = [sigma,mu]
Computes the damped SVD solution defined as
x_lambda = V*inv(diag(s + lambda))*U'*b .
If lambda is a vector, then x_lambda is a matrix such that
x_lambda = [ x_lambda(1), x_lambda(2), ... ] .
If sm and X are specified, then the damped GSVD solution:
x_lambda = X*[ inv(diag(sigma + lambda*mu)) 0 ]*U'*b
[ 0 I ]
is computed.
Cross-Reference Information
This function is called by
- fil_fac C:\BrainStorm_2001\PublicToolbox\regutools\fil_fac.m
- gcv C:\BrainStorm_2001\PublicToolbox\regutools\gcv.m
- l_corner C:\BrainStorm_2001\PublicToolbox\regutools\l_corner.m
- l_curve C:\BrainStorm_2001\PublicToolbox\regutools\l_curve.m
- muopt C:\BrainStorm_2001\Toolbox\muopt.m
- quasiopt C:\BrainStorm_2001\PublicToolbox\regutools\quasiopt.m
Listing of function C:\BrainStorm_2001\PublicToolbox\regutools\dsvd.m
function x_lambda = dsvd(U,s,V,b,lambda)
%DSVD Damped SVD regularization.
%
% x_lambda = dsvd(U,s,V,b,lambda)
% x_lambda = dsvd(U,sm,X,b,lambda) , sm = [sigma,mu]
%
% Computes the damped SVD solution defined as
% x_lambda = V*inv(diag(s + lambda))*U'*b .
% If lambda is a vector, then x_lambda is a matrix such that
% x_lambda = [ x_lambda(1), x_lambda(2), ... ] .
%
% If sm and X are specified, then the damped GSVD solution:
% x_lambda = X*[ inv(diag(sigma + lambda*mu)) 0 ]*U'*b
% [ 0 I ]
% is computed.
% Reference: M. P. Ekstrom & R. L. Rhoads, "On the application of
% eigenvector expansions to numerical deconvolution", J. Comp.
% Phys. 14 (1974), 319-340.
% Per Christian Hansen, UNI-C, 07/21/90.
% Initialization.
if (min(lambda)<0)
error('Illegal regularization parameter lambda')
end
[n,pv] = size(V); [p,ps] = size(s);
% Compute x_lambda.
beta = U(:,1:p)'*b;
ll = length(lambda); x_lambda = zeros(n,ll);
if (ps==1)
for i=1:ll
x_lambda(:,i) = V(:,1:p)*(beta./(s + lambda(i)));
end
else
x0 = V(:,p+1:n)*U(:,p+1:n)'*b;
for i=1:ll
x_lambda(:,i) = V(:,1:p)*(beta./(s(:,1) + lambda(i)*s(:,2))) + x0;
end
end
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