0001 function[x] = solveLin(A,B)
0002
0003 s = warning('off', 'MATLAB:singularMatrix');
0004 warning('off','MATLAB:nearlySingularMatrix');
0005
0006 t = (size(B,2) == 1);
0007
0008 Ao2 = logical(A)|logical(A');
0009
0010 black = false(size(B,1),1);
0011 gray = (any(B,2) ~= 0);
0012 while (sum(gray) > 0)
0013 black = black | gray;
0014 gray = any(Ao2(:,gray),2) & (~black);
0015 end
0016
0017 A2 = A(black,black);
0018 B2 = B(black,:);
0019 if t
0020 x2 = A2\B2;
0021
0022
0023
0024
0025 x = zeros(size(B));
0026 x(black,:) = x2;
0027 else
0028 x2 = A2\B2(:,2:end);
0029
0030
0031
0032
0033 x = zeros(size(B));
0034 x(black,2:end) = x2;
0035 x(:,1) = 1-sum(x,2);
0036 end
0037
0038
0039
0040 warning(s);