Voraussetzungen
Matlab Grundkenntnisse
Unit Tests
Lerninhalte
Überprüfung Ihrer Kenntnisse
Rechnen mit Matlab#
Aufgabe 1: Machen Sie sich vertraut mit Matlab#
Lesen Sie sich die Kapitel Verwendung dieses Buches und Matlab einrichten durch. Können Sie die folgenden Fragen beantworten?
Beschreiben Sie die Funktionalität des Command Window, Editor und Workspace in Matlab.
Was ist der Unterschied zwischen einer Funktion und einem Skript?
Was verbirgt sich hinter dem Wort Scope?
Was ist ein Function Handle?
Aus welchen Gründen sollte ich for-Schleifen vermeiden?
Was ist das Grundprinzip hinter dem Bisektionsverfahren?
Wie kann ich die Operationen
*
bzw.^
elementweise ausführen?Warum sollte ich reelle Zahlen nie mit
==
auf Gleichheit prüfen?Was bedeutet logische Indizierung?
Wie kann ich eine Matrix transponieren?
Warum sollte ich Strings nie mit
==
auf Gleichheit prüfen?Nennen Sie ein Tool zur Versionskontrolle.
Was bewirkt der Befehl
hold on
?
Aufgabe 2: Binomialkoeffizienten#
Erstellen Sie ein Programm für die Berechnung der Binomialkoeffizienten
wobei \(n\) und \(k\) ganze Zahlen mit \(n \geq k \geq 0\) sind.
Hinweise:
Schreiben Sie eine Funktion, die die Fakultät berechnet:
%%file fac.m
% calculate the factorial of an integer n
function z = fac(n)
end
Testen Sie die Funktionalität mit der bereitgestellten Test Suite
test_fac.m
. Es reicht zunächst, dass die ersten drei der Unit Tests erfolgreich sind. Challenge: Schaffen Sie es, alle sechs Unit Tests zu erfüllen?
Show code cell source
%%file test_fac.m
function test_suite=test_fac
% initialize unit tets
try
test_functions=localfunctions();
catch
end
initTestSuite;
%%%%%%%%%%%%%%%%%%%%%%%
% Basic tests %
%%%%%%%%%%%%%%%%%%%%%%%
function test_fac_0
% test if fac(0)==1
assertEqual(fac(0),1);
function test_fac_1
% test if fac(1)==1
assertEqual(fac(1),1);
function test_fac_5
% test if fac(5)==120
assertEqual(fac(5),120);
%%%%%%%%%%%%%%%%%%%%%%%
% More advanced tests %
%%%%%%%%%%%%%%%%%%%%%%%
function test_fac_exception_negative
% test if exceptions are thrown for negative values
assertExceptionThrown(@()fac(-1));
function test_fac_exception_noninteger
% test if exceptions are thrown for noninteger values
assertExceptionThrown(@()fac(1.5),'*');
function test_fac_array
% test if fac works on array inputs
assertEqual(fac([0 1 2; 3 4 5]),[1 1 2; 6 24 120]);
% test the fac function
moxunit_runtests test_fac.m
Schreiben Sie nun die Funktion, die den Binominialkoeffizienten berechnet. Verwenden Sie Ihre neue Funktion zur Berechnung der Fakultät.
%%file binomial_coefficient.m
function c = binomial_coefficient(n,k)
% ADD CODE HERE
end
Testen Sie die Funktionsweise Ihrer neuen Funktion, diesmal ohne explizit einen Unit Test zu verwenden:
% run some quick tests without explicitly using a unit test
binomial_coefficient( 5, 3) % expected value: 10
binomial_coefficient(49, 6) % expected value: 13983816
binomial_coefficient(10,10) % expected value: 1
Haben Sie Ideen, wie Sie die Anzahl nötiger Rechenoperationen verringern können?