Skip to content

Komplexaufgaben

Aufgabe

Kapitel 3

Die Kreiszahl \(\pi\) kann mit Hilfe der folgenden Summenformel approximiert werden.

\[ \frac{\pi}{4} = 1 - \frac{1}{3} + \frac{1}{5} - \frac{1}{7} + \dots = \sum_{n=0}^{\infty} (-1)^n \cdot \frac{1}{2n+1} \]

Schreiben Sie zwei Funktionen mit dem Eingangsparameter \(N\), die \(\pi\) approximieren.

  • Verwenden Sie eine for-Schleife für die Approximation von \(\pi\).
    Ermitteln Sie die durchschnittliche Laufzeit des Programms.
  • Verwenden Sie die sum-Funktion. Vergleichen Sie die Laufzeit.

Lösung

function [result] = Pi1(N)
summe = 0;
for n = 0:N
    summe = summe + (-1)^n * 1/(2*n+1);
end

result = summe * 4;
end

>> tic;Pi1(1e8),toc
ans =
  3.141592663589326
Elapsed time is 2.463820 seconds.

function [result] = Pi2(N)
n  = 0:N;
result = 4*sum((-1).^n * 1./(2*n+1));
end

>> tic;Pi2(1e8),toc
ans =
  3.141592663590250
Elapsed time is 1.545192 seconds.

Aufgabe

Kapitel 3

Approximieren Sie die Kreiszahl \(\pi\) mit dem Monte-Carlo-Algorithmus:

  • Es werden zufällig \(N\) Punkte \(P(x, y)\) aus dem Quadrat \(0 \leq x \leq 1,\quad 0 \leq y \leq 1\) ausgewählt. Tipp: rand-Funktion verwenden!
  • Mit der Bedingung \(x^2 + y^2 \leq 1\) wird die Anzahl \(N_K\) der Punkte bestimmt, die sich innerhalb des Einheitskreises befinden.
  • Es ist anzunehmen, dass die Größe der Fläche proportional zur Anzahl der Punkte innerhalb dieser Fläche ist. Es gilt:

    \[ \frac{\text{Viertelkreisfläche}}{\text{Quadratfläche}} = \frac{\pi}{4} \approx \frac{N_K}{N} \]
  • \(\pi\) wird approximiert durch:

    \[ \pi \approx 4 \cdot \frac{N_K}{N} \]

Schreiben Sie eine Funktion, die \(\pi\) mit Hilfe des Monte-Carlo-Algorithmus approximiert. Diese Funktion hat \(N\) als Eingabeparameter.
Vergleiche Sie Laufzeit und Genauigkeit mit den vorangegangen Funktionen.

Kapitel 5

Stellen Sie die Funktionsweise des Monte-Carlo-Algorithmus graphisch dar, indem Sie die folgende Abbildung generieren.

alt: "Monte-Carlo-Plot", w:50

Lösung

function [result] = Pi3(N)
Nk = 0;
for n = 1:N
    x = rand;
    y = rand;
    if x^2 + y^2 <= 1
        Nk = Nk + 1;
    end
end

result = 4 * Nk / N;
end

>> tic;Pi3(1e8),toc
ans =
  3.141816720000000
Elapsed time is 8.017909 seconds.

N = 1000;

in = [];
out = [];

Nk = 0;
for n = 1:N
    x = rand();
    y = rand();
    if x^2 + y^2 <= 1
        Nk = Nk + 1;
        in = [in, [x; y]];
    else
        out = [out, [x; y]];
    end
end

result = 4 * Nk / N

clear x y

plot(in(1,:), in(2,:), '.')
hold('on');
plot(out(1,:), out(2,:), '.')
axis('equal')
fplot(@(x) sqrt(1-x.^2), [0 1], 'k')
xlim([0, 1]);ylim([0, 1]);


hold('off');

Aufgabe

Kapitel 3

  • Pythagoreische Tripel sind drei ganzzahlige Seitenlängen, die ein rechtwickliges Dreieck bilden:

    \[ (a, b, c)^T \in \mathbb N^3 | a^2 + b^2 = c^2 \]

    Beispiel: Das kleinste pythagoreische Tripel: \((3, 4, 5)\), da $ 3^2 + 4^2 = 25 = 5^2$
    - Schreiben Sie ein Skript, dass alle pythagorischen Tripel für \(a, b < N\) findet und in einer Matrix ausgibt.

    >> PythaTrip
    N =
        10
    tripel =
        3     4     5
        4     3     5
        6     8    10
        8     6    10
    

Kapitel 5

  • Stellen Sie die Verteilung der pythagoreischen Tripel graphisch dar. Markieren Sie den Punkt \(P(a, b)\) im Graphen, der einem pythagoreischen Tripel entspricht.
    alt: "Ausgabe des Skriptes", w:50
  • Kann das Programm optimiert werden, wenn die Reihenfolge der Tripel in der Ausgabe nicht relevant ist?

Lösung

N = 100

tripel = [];

for a = 3:N
  for b = (a + 1): N
      c = sqrt(a^2 + b^2);
      if floor(c) == c
          tripel = [tripel; [a, b, c]];
          tripel = [tripel; [b, a, c]];
      end
  end
end

tripel

plot(tripel(:,1), tripel(:,2), '.');
axis('square')
  • Es gibt keine Tripel mit \(a, b < 3\).
  • Es gibt keine Tripel für \(a = b\).
  • Ist \((a, b, c)\) ein Tripel, so ist auch \((b, a, c)\) ein Tripel.

Aufgabe

Kapitel 3

Schreiben Sie ein Programm, das ein Polynom \(f(x)\) n-ten Grades aus verschiedenen Bedingungen berechnet.

Die Bedingungen haben die folgende Form:

\[ 1)\quad y = f(x) \]
\[ 2)\quad s = f'(x) \]
\[ 3)\quad c = f''(x) \]

Schauen Sie sich die folgenden Lösung für ein Menü an:

fprintf('%d. Bedingung:\n', m);
fprintf(' 1) y = f(x)\n');
fprintf(' 2) s = f''(x)\n');
fprintf(' 3) c = f''''(x)\n');
type = input('>> ');

Lösung

Beispielfunktion:
alt: "Polynomberechnung - Beispiel", w:50

Lösung:

N = input('Grad der Funktion: ')

K = zeros(N + 1);
Y = zeros(N + 1, 1);

for m = 1:(N+1)
    fprintf('%d. Bedingung:\n', m);
    fprintf(' 1) y = f(x)\n');
    fprintf(' 2) s = f''(x)\n');
    fprintf(' 3) c = f''''(x)\n');
    type = input('>> ');

    x = input('x = ');

    switch type
        case 1
            y = input('y = ');

            for n = 0:N
              K(m, n+1) = x^n; 
            end

            Y(m) = y;

        case 2
            s = input('s = ');

            for n = 1:N
              K(m, n+1) = n * x^(n-1); 
            end

            Y(m) = s;

        case 3
            y = input('c = ');

            for n = 2:N
              K(m, n+1) = n * (n-1) * x^(n-2); 
            end

            Y(m) = c;
    end
end

A = K\Y;
A'

Aufgabe

Kapitel 4

Schreiben Sie ein Skript, dass die Tangente einer beliebigen Funktion \(f(x)\) im Punkt \(x_t\) berechnet.

Stellen Sie die Funktion f und die Tangentenfunktion ft graphisch mit den folgenden Befehlen dar:

fplot(f)
hold('on');
fplot(ft)
hold('off');

Lösung

syms x
f(x) = x^2;
x_t = 2;

fdx = diff(f, x);
m = fdx(x_t);
n = f(x_t) - m * x_t;
ft(x) = m * x + n

fplot(f)
hold('on');
fplot(ft)
hold('off');

Aufgabe

Kapitel 4

Programmieren Sie ein Skript, dass automatisch eine Kurven-Diskussion durchführt. Das Skript soll alle Nullstellen, Minima, Maxima und Wendepunkte einer reellen Funktion angeben.

Beispiel:

>> func_analyse
f(x) =
x^3 - 2*x + 2
Nullstelle: x_n = 1
Nullstelle: x_n = 1
Nullstelle: x_n = -2
Maximum: H(-1, 3)
Minimum: T(1, 1)
Wendepunkt: W(0, 2)

Lösung

syms x
f(x) = x^3-2*x + 2

x_ns = solve(f == 0, x);

if ~ isempty(x_ns)
    for x_n = unique(x_ns)'
        fprintf('Nullstelle: x_n = %d\n', x_n);
    end
end

fdx = diff(f, x);
fddx = diff(fdx, x);

x_es = solve(fdx == 0, x);
if ~ isempty(x_es)
    for x_e = unique(x_es)'
        y_e = f(x_e);
        c_e = fddx(x_e);

        if c_e > 0
            fprintf('Minimum: T(%d, %d)\n', x_e, y_e);
        elseif c_e < 0
            fprintf('Maximum: H(%d, %d)\n', x_e, y_e);
        else
            fprintf('Sattelpunkt: S(%d, %d)\n', x_e, y_e);
        end
    end
end

x_ws = solve(fddx == 0, x);
if ~ isempty(x_ws)
    for x_w = unique(x_ws)'
        y_w = f(x_w);
        fprintf('Wendepunkt: W(%d, %d)\n', x_w, y_w);
    end
end

Aufgabe

Kapitel 4

Simulieren Sie die Bewegung einer einfeldriger Brücke mit konzentrierter Eigenlast in der Mitte anhand der Bewegungsgleichung.

\[ m\cdot\ddot y(t) + d\cdot\dot y(t) + k\cdot y(t) = f(t) \]

Als Anfangsbedingungen sollen eine 1cm Auslenkung und keine Anfangsgeschwindigkeit angenommen werden.
Folgende Werte sind zu definieren:

  • \(y(t)\): die Position des Diskretisierungspunktes
  • \(m\): die Masse der Konstruktion
  • \(d\): die Dämpfung (Luftwiderstand und Reibung)
  • \(k\): die Steifigkeit der Feder (Konstruktion)

Zunächst ist die Lösung der Differentialgleichung zu finden und anschließend folgende Werte einzusetzen:

  • \(m = 20000\,\text{kg}\)
  • \(d = 500 \,\text N/\text s\)
  • \(k = 10000 \,\text N/ \text m\)

Schließlich soll die Lösung dargestellt werden

Lösung

syms y(t) d k m
BewGl = m*diff(y,t,2) + d*diff(y,t) + k*y == 0
ic = y(0) == 0.01
dy(t) = diff(y,t)
ic2 = dy(0) == 0
ysol = dsolve(BewGl,[ic ic2])
yequil = subs(ysol,[m d k],[20000 1000 10000])
fplot(yequil,[0 150])