% Musterlösung
%
% Numerische Mathematik, SS 2013
%
% Hager-Algorithmus zum Schätzen der 1-Norm
%
% Ingolf Busch, Juni 2013

% Input: A      Matrix oder struct die eine Matrix repräsentiert
%        n      Größe der Matrix
%        mv     Funktion die die Matrix-Vektor-Multiplikation mit A implementiert
%        mvt    Funktion die die Matrix-Vektor-Multiplikation mit A^T implementiert
%        itmax  maximale Anzahl Iterationen

% Output: s  Schätzung der 1-Norm von A
%         it Anzahl der benötigten Iterationen

function [s,it] = my_hager(A,n,mv,mvt,itmax)

x = randn(n,1);
x = x/norm(x,1);
it=0;

while it < itmax
    w = mv(A,x);
    z = sign(w);
    y = mvt(A,z);
    ninf = norm(y,Inf);
    if ninf <= (y'*x)
        s = norm(w,1);
        return
    else
        x = zeros(size(x));
        ind = find(abs(y)==ninf, 1 );
        x(ind)=sign(y(ind));
    end
    it = it +1;
end
s = norm(w,1);