// Programm zur Bestimmung des Cauchy-Polygons
// Betrifft die Globalaufgabe 7 von Blatt 3.

// Unterroutine, die die rechte Seite der Differentialgleichung aus
// Globalaufgabe 6 berechnet.
function [q] = f(p)
    q = [-p(2), p(1)];
endfunction

// Unterroutine, die die Ecken des Cauchy-Polygons für den Parameter N berechnet.
function [points] = cauchy_polygon(N)
    // Ausgangspunkt
    p0 = [1,0];  // [x,y]

    // Liste aller Polygonpunkte, wird durch die Iteration gefüllt
    points = zeros(2*N+1, 2);
    points(N+1, :) = p0;

    // Vorwärtsiteration, beginnend bei p0
    p = p0;
    for i = N+2:2*N+1
        p = p + f(p) / N;
        points(i, :) = p;
    end

    // Rückwärtsiteration, wieder beginnend bei p0
    p = p0;
    for i = N:-1:1
        p = p - f(p) / N;
        points(i, :) = p;
    end
endfunction

// Hauptprogramm: Für N = 10 das Polygon berechnen und zeichnen.
points = cauchy_polgygon(10);
plot2d(points(:,1), points(:,2));
