clear all      % Finite-Elemente-Modell eines Kragtraegers ...
L  = 1000 ;    % ... der Laenge L ...
EI = 2e10 ;    % ... mit konstanter Biegesteifigkeit EI ...
q  = 2 ;       % ... unter konstamter Linienlast q, ...
n  = 100 ;      % ... eingeteilt in n Elemente

xy = zeros (n+1,1) ;       % Koordinaten der n+1 Knoten
for i=1:n+1
    xy(i,1) = (i-1)*L/n ;
end
km = zeros (n,2) ; ep = zeros (n,3) ;
for i=1:n
    km(i,:) = [i  i+1] ;   % Koinzidenzmatrix
    ep(i,:) = [EI q q] ;   % Elementparameter
end
kr = zeros (n+1,2) ;
kr(1,:) = [1 1] ;          % Knoten 1: Starre Einspannung
bk = zeros (n+1,2) ;       % Keine zusaetzlichen Knotenlasten

% Aufbau des linearen Gleichungssystems  Ksys * v = fq:
[succ Ksys fq]   = syswbc_m (xy , km , ep , kr , bk) ;
% Ksys ist eine symmetrische Bandmatrix, und ...

Ks = SymBand2Sparse (Ksys) ;        % Ks ist eine "Sparse matrix"
spy(Ks)                             % Muster zeichnen
m = 2*n+2 ;
disp (['GleichungsAnzahl m = ' num2str(m)]) ;
Kondzahl = condest (Ks)             % Konditionszahl

v  = Ks \ fq ;                      % Matlab-Standard-Solver

vKG = KonjugGrad     (Ks , fq , 1e-6 , m*6) ;   % Meister/Vömel
vbicg = bicg         (Ks , fq , 1e-6 , m*6) ;   % Biconjugate gradient
vbicgstab = bicgstab (Ks , fq , 1e-6 , m*6) ;   % Biconjugate gradient stabilized
vcgs = cgs           (Ks , fq , 1e-6 , m*6) ;   % Conjugate gradient squared
vgmres = gmres       (Ks , fq,5,1e-6 , m*6) ;   % Generalized minimum residual
vlsqr = lsqr         (Ks , fq , 1e-6 , m*6) ;   % LSQR (Conjugate Gradients on the Normal Equations)
vminres = minres     (Ks , fq , 1e-6 , m*6) ;   % Minimum residual
vpcg = pcg           (Ks , fq , 1e-6 , m*6) ;   % Preconditioned conjugate gradient
vqmr = qmr           (Ks , fq , 1e-6 , m*6) ;   % Quasiminimal residual
vsymmlq = symmlq     (Ks , fq , 1e-6 , m*6) ;   % Symmetric LQ

disp (['v            = ' num2str(v(2*n+1))]) ; 
disp (['vEndKG       = ' num2str(vKG(2*n+1))]) ; 
disp (['vEndbicg     = ' num2str(vbicg(2*n+1))]) ; 
disp (['vEndbicgstab = ' num2str(vbicgstab(2*n+1))]) ; 
disp (['vEndcgs      = ' num2str(vcgs(2*n+1))]) ; 
disp (['vEndgmres    = ' num2str(vgmres(2*n+1))]) ; 
disp (['vEndlsqr     = ' num2str(vlsqr(2*n+1))]) ; 
disp (['vEndminres   = ' num2str(vminres(2*n+1))]) ; 
disp (['vEndpcg      = ' num2str(vpcg(2*n+1))]) ; 
disp (['vEndqmr      = ' num2str(vqmr(2*n+1))]) ; 
disp (['vEndsymmlq   = ' num2str(vsymmlq(2*n+1))]) ; 