function [dimension, maxEV, i_max, minEV, i_min, condition] = aufgabe5()
    tolerance = 1e-10;
    N = 20;
    
    dimension = zeros(N,1);
    maxEV = zeros(N,1);
    minEV = zeros(N,1);
    i_max = zeros(N,1);
    i_min = zeros(N,1);
    condition = zeros(N,1);
    
    for i = 1:N
        A = AN(i);

        dimension(i) = i*i;

        [links, rechts] = Mises(A, tolerance, i);
        maxEV(i) = links;
        i_max(i) = rechts;

        [links, rechts] = InvIt(A, tolerance, i);
        minEV(i) = links;
        i_min(i) = rechts;
    end
    
    % Spektralkonditionszahl
    condition(:) = maxEV(:) ./ minEV(:);
    
    
    %%% Plot %%%
    figure(1);
    plot(dimension, condition, "+")
    title('Spektralkonditionszahl');
    xlabel('Dimension');
    ylabel('Spektralkonditionszahl');
    
    [dimension, maxEV, i_max, minEV, i_min, condition]
end

function result = AN(m)
    B = 4*eye(m)-diag(ones(m-1,1),1)-diag(ones(m-1,1),-1);
    result = [];
    for i = 1:m
        row = [];
        for j=1:m
            if j == i
                add = B;
            elseif j == i-1 || j == i+1
                add = (-1)*eye(m);
            else
                add = zeros(m);
            end
            row = [row add];
        end
        result = [result; row];
    end
    result;
end

%%%%% Aufgabe 1 %%%%%

function [result, i] = Mises(A, tolerance, m)
    x_0 = eye(m^2,1);
    lambda_iplus1 = 0;
    lambda_i = 10000000;
    i = 0;
    
    while abs(lambda_iplus1 - lambda_i) > tolerance
        x_schlange_i = A*x_0;
        x_i = x_schlange_i/norm(x_schlange_i);
        lambda_i = lambda_iplus1;
        lambda_iplus1 = x_schlange_i(1)/x_0(1);
        x_0 = x_i;
        i = i + 1;
    end
    
    result = lambda_iplus1;
end

%%%% Aufgabe 2 %%%%%%%
function [result, i] = InvIt(A,tolerance,m)
    x_0 = eye(m^2,1);
    lambda_iplus1 = 0;
    lambda_i = 10000000;
    i = 0;
    
    while abs(lambda_iplus1 - lambda_i) > tolerance
        x_schlange_i = A\x_0;
        x_i = x_schlange_i/norm(x_schlange_i);
        mu_i = x_schlange_i(1)/x_0(1);
        lambda_i = lambda_iplus1;
        lambda_iplus1 = 1/mu_i;
        x_0 = x_i;
        i = i + 1;
    end
    
    result = lambda_iplus1;
end
