UNPKG

sellquiz

Version:

An open source domain-specific language for online assessment

211 lines (122 loc) 8.85 kB
%course Mathematik 1 %quiz MA1 meets PI1 Java: Summe Schreiben Sie einen Codeausschnitt, in dem die Summe $s=sum_(i=0)^n i$ berechnet wird. * Variable `n` ist bereits deklariert worden. Der initiale Wert ist jedoch unbekannt und wird hier durch ein Fragezeichen dargestellt. * Das ganzzahlige Ergebnis soll in Variable `s` stehen. JavaBlock b given 'int n = §23§;' assert 's == 276' $ #b $ %%% Java: Potenzreihen JavaMethod exp assert 'Math.abs(exp(8, 1.0) - 2.71827876984127) < 1e-6' assert 'Math.abs(exp(10, 0.5) - 1.6487212706873655) < 1e-6' Definieren Sie eine Java-Methode mit dem Namen `exp` zur Annäherung der _Potenzreihe_ für $f(x)=e^x="exp"(x)=sum_(k=0)^(oo) 1/(k!) x^k$. * Die Methode erhält einen ganzzahligen Parameter `n`. * Die Methode berechnet $"exp"(x) approx sum_(k=0)^n 1/(k!) x^k$. * Berechnen Sie $x^k$ mit `Math.pow(x, k)` . * Für die Berechnung der Fakultät $k!$ steht Ihnen keine vorhandene Methode zur Verfügung. Berechnen Sie diese selbst innerhalb der Methode `exp` (Tipp: Ihre Methode besteht aus zwei geschachtelten Schleifen). %_Tipp: Schreiben Sie zwei geschachtelte Schleifen. Die äußere Schleife berechnet die Summe; die innere Schleife berechnet die Fakultät._ _Hinweis: definieren Sie nur die Methode selbst. Vergessen Sie nicht die Methode als öffentlich und statisch zu deklarieren. Geben Sie keine Klasse an._ $ #exp $ %%% Java: Polynome (1/3): Funktionswert bestimmen Sei $f : RR -> RR$ ein Polynom $n$-ten Grades, also $f(x) = sum_(i=0)^n a_i x^i$ mit $a_0,...,a_n \in RR$ und $a_n != 0$ falls $n>1$. Schreiben Sie eine Java-Methode mit dem Namen `polynom`. * Parameter: ein Array `a` vom Typ `double` für die Koeffizienten $a_i$. * Berechnen Sie $x^i$ mit `Math.pow(x, i)` . * Rückgabe: $f(x)$. _Hinweis: definieren Sie nur die Methode selbst. Vergessen Sie nicht die Methode als öffentlich und statisch zu deklarieren. Geben Sie keine Klasse an._ JavaMethod polynom assert 'Math.abs(polynom(new double[] {4, -3, 0, 2}, 2.1) - 16.222) < 1e-6' $ #polynom $ %%% Java: Polynome (2/3): Ableitung Sei $f : RR -> RR$ ein Polynom $n$-ten Grades, also $f(x) = sum_(i=0)^n a_i x^i$ mit $a_0,...,a_n \in RR$ und $a_n != 0$ falls $n>1$. Schreiben Sie eine Java-Methode `polynom_ableiten`. * Parameter (genau wie in der letzten Aufgabe): ein Array `a` vom Typ `double` für die Koeffizienten $a_i$. * Zurückgegeben werden soll ein Array, welches das Polynom $f'(x)$, also das abgeleitete Eingabepolynom, beschreibt. _Tipp: Achten Sie darauf, dass das Ergebnisarray um genau ein Element kürzer ist, als das Eingabearray._ _Hinweis: definieren Sie nur die Methode selbst. Vergessen Sie nicht die Methode als öffentlich und statisch zu deklarieren. Geben Sie keine Klasse an._ JavaMethod polynom_ableiten assert 'compare_arrays__double(polynom_ableiten(new double[] {4, -3, 0, 2}), new double[] {-3, 0, 6}, 1e-6)' $ #polynom_ableiten $ %%% Java: Polynome (3/3): Integration Sei $f : RR -> RR$ ein Polynom $n$-ten Grades, also $f(x) = sum_(i=0)^n a_i x^i$ mit $a_0,...,a_n \in RR$ und $a_n != 0$ falls $n>1$. Schreiben Sie eine Java-Methode `polynom_integrieren`. * Parameter (genau wie in den letzten Aufgaben): ein Array `a` vom Typ `double` für die Koeffizienten $a_i$. * Zurückgegeben werden soll ein Array, welches das Polynom $int f(x) dx$, also das integrierte Eingabepolynom, beschreibt. _Tipp: Achten Sie darauf, dass das Ergebnisarray um genau ein Element länger ist, als das Eingabearray._ _Hinweis: definieren Sie nur die Methode selbst. Vergessen Sie nicht die Methode als öffentlich und statisch zu deklarieren. Geben Sie keine Klasse an._ JavaMethod polynom_integrieren assert 'compare_arrays__double(polynom_integrieren(new double[] {4, -3, 0, 2}), new double[] {0, 4, -1.5, 0, 0.5}, 1e-6)' $ #polynom_integrieren $ %%% Java: Newtonverfahren (1/3) In dieser Aufgabe implementieren Sie das _Newtonverfahren_ zur näherungsweisen Bestimmung von Nullstellen. * Die Aufgabe ist insgesamt in drei Teilaufgaben gegliedert. Sie können alle drei Aufgabenteile unabhängig voneinander bearbeiten und auswerten lassen. * Ziel ist es, die Nullstelle von $f(x)=x^2+2-e^x$ zu bestimmen. Diese Aufgabe finden Sie auch im Mathematik 1 Skript auf den Seiten 102 und 103. __Im ersten Aufgabenteil implementieren Sie eine Java-Methode mit dem Namen `f`.__ * Parameter: `x` (Gleitkommazahl). * Geben Sie $y=f(x)=x^2+2-e^x$ zurück. * Berechnen Sie $e^x$ mit `Math.exp(x)`. Den Import für die Mathematik-Bibliothek geben Sie selbst nicht an. _Hinweis: definieren Sie hier ausschließlich die Methode `f`. Vergessen Sie nicht die Methode als öffentlich und statisch zu deklarieren. Geben Sie keine Klasse und keine `main`-Methode an._ JavaMethod f assert 'Math.abs(f(1.23) - 0.09167046371032672) < 1e-6' assert 'Math.abs(f(-0.53) - 1.6922950303216449) < 1e-6' $ #f $ %%% Java: Newtonverfahren (2/3) __Im zweiten Aufgabenteil implementieren Sie eine Java-Methode mit dem Namen `fd` zur Bestimmung von $f'(x)$.__ * Parameter: `x` (Gleitkommazahl). * Geben Sie $y=f'(x)$ zurück. Bestimmen Sie die Ableitung von $f(x)=x^2+2-e^x$ von Hand. * Berechnen Sie $e^x$ mit `Math.exp(x)`. Den Import für die Mathematik-Bibliothek geben Sie selbst nicht an. _Hinweis: definieren Sie hier ausschließlich die Methode `fd`. Vergessen Sie nicht die Methode als öffentlich und statisch zu deklarieren. Geben Sie keine Klasse und keine `main`-Methode an._ JavaMethod fd assert 'Math.abs(fd(-1.5) - (-3.22313016014843)) < 1e-6' assert 'Math.abs(fd(0.5) - (-0.6487212707001282)) < 1e-6' $ #fd $ %%% Java: Newtonverfahren (3/3) __Im dritten Aufgabenteil setzen Sie das Newtonverfahren um, und verwenden dabei die Methoden aus den letzten beiden Aufgabenteilen.__ * Schreiben Sie eine Java-Methode mit dem Namen `newton`. Der erste Parameter `n` ist ganzzahlig. Der zweite Parameter `x0` gibt den Startwert an (welcher Datentyp passt hier?). * Die Methode berechnet die Newtonfolge $x_{n+1} = x_n - (f(x_n))/(f'(x_n))$. * Rufen Sie die Methoden der beiden letzten Teilaufgaben an den geeigneten Stellen auf. * Sie geben $x_n$ zurück. _Hinweis: definieren Sie hier ausschließlich die Methode `newton`. Vergessen Sie nicht die Methode als öffentlich und statisch zu deklarieren. Geben Sie keine Klasse und keine `main`-Methode an._ JavaMethod newton hidden_method 'public static double f(double x) { return x*x + 2 - Math.exp(x); }' hidden_method 'public static double fd(double x) { return 2*x - Math.exp(x); }' assert 'Math.abs(newton(100, 1.0) - 1.3190736768573652) < 1e6' $ #newton $ %%% Java: Einfache Approximation eines Integrals Für manche Integrale kann keine Stammfunktion angegeben werden. * Ein Beispiel ist $int e^(-x^2) dx$. * In solchen Fällen kann man das Integral _näherungsweise_ lösen. Hierzu gibt es verschiedene Verfahren. In dieser Aufgabe nutzen wir die __Sehnentrapezformel__, da diese sehr einfach implementiert werden kann. Die Näherung wird wie folgt berechnet: $int_a^b f(x) approx h( f(a)/2 + f(x_1) + ... + f(x_(n-1)) + f(b)/2)$ mit $h = (b-a)/n$ und $x_i=a+i*h$. * Schreiben Sie eine Methode mit dem Namen `stf`. * Die Parameter der Methode sind `a`, `b` und `n` (in dieser Reihenfolge). Entscheiden Sie, welche der Parameter vom Typ `double`, und welche vom Typ `int` sind. * Sie können eine bereits vorhandene (aber hier nicht sichtbare) Methode `public static double f(double x) { ... }` zur Berechnung von $f(x)$ aufrufen. JavaMethod stf hidden_method 'public static double f(double x) { return Math.exp(-x*x); }' assert 'Math.abs(stf(0.0, 1.0, 1000) - 0.746824163469049) < 1e-6' $ #stf $ STOP %%% === OLD === Java: Einfache Approximation eines Integrals Für manche Integrale kann keine Stammfunktion angegeben werden. * Ein Beispiel ist $int e^(-x^2) dx$. * In solchen Fällen kann man das Integral _näherungsweise_ lösen. Hierzu gibt es verschiedene Verfahren. In dieser Aufgabe nutzen wir die __Mittelpunktsregel__, da diese eher einfach implementiert werden kann. Die Näherung wird wie folgt berechnet: $int_a^b f(x) approx h * sum_(k=1)^n f(a - h/2 + k*h)$ mit $h = (b-a)/n$ * Schreiben Sie eine Methode mit dem Namen `mpr`. * Die Parameter der Methode sind `a`, `b` und `n` (in dieser Reihenfolge). Entscheiden Sie, welche der Parameter vom Typ `double`, und welche vom Typ `int` sind. * Sie können eine bereits vorhandene (aber hier nicht sichtbare) Methode `public static double f(double x) { ... }` zur Berechnung von $f(x)$ aufrufen. JavaMethod mpr hidden_method 'public static double f(double x) { return Math.exp(-x*x); }' assert 'Math.abs(mpr(0.0, 1.0, 1000) - 0.746824163469049) < 1e-6' $ #mpr $