```--- a
+++ b/inst/@CovarSMW/CovarSMW.m
@@ -0,0 +1,46 @@
+% Covariance matrix than can be inverted using the Sherman-Morrison-Woodbury
+% forumla.
+%
+% CSMW = CovarSMW(C,B)
+%
+% Create the covariance matrix CSMW = C +  B*B' than can be inverted efficiently
+% using the Sherman-Morrison-Woodbury formula, if size(B,2) is much smaller than
+% size(C,1):
+%
+% inv(C +  B*B') = inv(C) -  inv(C)*B*inv(B'*inv(C)*B +  I)*B'*inv(C)
+%
+% The  symetric matrix C should implement the methods: size, diag, mtimes,
+% mldivde and the matrix B should implement the methods: size, tranpose, mtimes,
+% sum.
+
+function retval = CovarSMW(C,B)
+
+if size(C,1) ~= size(C,2)
+  error('C should be square matrix');
+end
+
+if size(C,1) ~= size(B,1)
+  error('size of C and B are not compatible');
+end
+
+self.C = C;
+self.B = B;
+self.D = inv(B' * (C \ B) +  eye(size(B,2)));
+
+retval = class(self,'CovarSMW');
+
+
+% Copyright (C) 2014 Alexander Barth <a.barth@ulg.ac.be>
+%
+% This program is free software; you can redistribute it and/or modify it under
+% the terms of the GNU General Public License as published by the Free Software
+% Foundation; either version 2 of the License, or (at your option) any later
+% version.
+%
+% This program is distributed in the hope that it will be useful, but WITHOUT
+% ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+% FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+% details.
+%
+% You should have received a copy of the GNU General Public License along with
+% this program; if not, see <http://www.gnu.org/licenses/>.
```