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?

  1. Beschreiben Sie die Funktionalität des Command Window, Editor und Workspace in Matlab.

  2. Was ist der Unterschied zwischen einer Funktion und einem Skript?

  3. Was verbirgt sich hinter dem Wort Scope?

  4. Was ist ein Function Handle?

  5. Aus welchen Gründen sollte ich for-Schleifen vermeiden?

  6. Was ist das Grundprinzip hinter dem Bisektionsverfahren?

  7. Wie kann ich die Operationen * bzw. ^ elementweise ausführen?

  8. Warum sollte ich reelle Zahlen nie mit == auf Gleichheit prüfen?

  9. Was bedeutet logische Indizierung?

  10. Wie kann ich eine Matrix transponieren?

  11. Warum sollte ich Strings nie mit == auf Gleichheit prüfen?

  12. Nennen Sie ein Tool zur Versionskontrolle.

  13. Was bewirkt der Befehl hold on?

Aufgabe 2: Binomialkoeffizienten#

Erstellen Sie ein Programm für die Berechnung der Binomialkoeffizienten

\[\begin{split} \left( \begin{array}{c} n \\ k \end{array} \right) = \frac{n!}{k! \cdot (n-k)!}, \end{split}\]

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?

Hide 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?