________________________________________________________________________________
Inhalt....: Eine Prozedur für Tilgungspläne
Kategorie.: Unterrichtsmaterial
Mathematik: Programmierung, Analysis
MuPAD.....: 3.1.0
Datum.....: 2006-10-24
Autoren...: August Barkhausen <abarkhausen@gmx.de>
Funktionen: ceil, float, matrix, print, for, round, proc, local, if
________________________________________________________________________________
Eine Prozedur für Tilgungspläne.
In der Finanzmathematik (Zinseszins, degressive Abschreibung, Rentenrechung und Annuitäten-
tilgung) geht es unter anderem um Anwendungen geometrischer Folgen und Reihen.
Im folgenden wird eine Prozedur zur Aufstellung eines Tilgungsplans für ein Annuitätendarlehen
definiert und auf einige Standardprobleme angewandt. Letztlich handelt es sich auch um
Probleme, die sich typischerweise mit einer Tabellenkalkulation darstellen lassen. In MuPAD
muss die Funktionalität einer Tabellenkalkulation simuliert werden. In der Prozedur wird diese
Möglichkeit exemplarisch dargestellt.
Für die tabellarische Darstellung der Ergebnisse bietet sich die Nutzung von Matrizen als
Speichermedium an, da hier sowohl eine tabellarische Ausgabe als auch eine Wiederver-
wendung der Daten für andere Zwecke möglich ist.
Grundkenntnisse über Matrizen sind insofern vorteilhaft, jedoch nicht notwendig, da keinerlei
Rechnungen mit den Matrizen verbunden sind. Ist der Begriff der Matrix nicht geläufig, kann
man Matrizen als die Realisation von Tabellen in MuPAD ansehen. Aus diesem Grund beginnt
das Notebook zunächst mit einer Kurzeinführung in den Umgang mit Matrizen, soweit wie dies
für die Zwecke des Notebooks sinnvoll ist. Wenn man sich nur für die Ergebnisse des
Algorithmus interessiert, kann diese Kurzeinführung übersprungen werden.
Grundsätzlich stellt sich die Frage nach dem Sinn des Einsatzes eines CAS für ein konkretes
Problem. Durch die Arbeit mit diesem Notebook können beispielsweise folgende Aspekte
berücksichtigt werden:
- Es kann mit verschiedenen Grundannahmen experimentiert werden.
_Auf diese Weise kann ein höherer Realitätsbezug erreicht werden.
_Im übrigen ist das Notebook so auch für private Zwecke nutzbar.
- Die Prozedur Tilgungsplan ist um eine Vielzahl von Optionen er-
_weiterbar. Insofern stellt das Notebook ein Bindeglied zwischen
_einer anwendungsorientierten Mathematik und Aspekten der
_Informationsverarbeitung dar.
- Die Prozedur Prototyp kann aus dem Notebook extrahiert werden
_und ebenfalls als Grundlage von Aufgaben zur Erweiterungen der
_Funktionalität dienen.
- Da in der derzeitigen MuPAD Version keine vollgültige Tabellen-
_kalkulation bereitgestellt wird, wird exemplarisch gezeigt, wie
_Tabellen in MuPAD durch Matrizen simuliert werden können.
Benötigte Grundlagen zu Matrizen
Eine Matrix ist ein rechteckiges Schema aus Zeilen und Spalten. In MuPAD wird eine
Matrix aus zwei Spalten und drei Zeilen wie folgt definiert:
A:=matrix(2,3)
![]()
Die Elemente der Matrix sind zunächst mit Nullen vorinitalisiert und können wie folgt
überschrieben werden:
A:=matrix([[1,2,3],[4,5,6]])
![]()
Natürlich kann die Matrix A auch direkt wie vorstehend definiert werden. Für die Zwecke
dieses Notebooks ist es erforderlich, Elemente einzeln ein- und auszulesen. Im folgenden
wird das zweite Element der ersten Zeile und zweiten Spalte ausgelesen:
A[1,2]
![]()
Analog lassen sich das Elemente überschreiben. Der Doppelpunkt verhindert die Ausgabe.
A[1,2]:=neu:
A[2,3]:=alt:
Nun wird die überschriebene Matrix ausgegeben. Offensichtlich ist auch Text darstellbar.
A
![]()
Teilmatrizen können wie folgt ausgelesen werden. Im konkreten Fall werden die ersten zwei
Zeilen und die zweite und dritte Spalte ausgelesen.
A[1..2,2..3]
![]()
Der benutzte Algorithmus
Im folgenden wird von folgenden Voraussetzungen ausgegangen:
- Zinsen und Tildung werden jährlich nachschüssig (zum Jahresende) erhoben.
- Die Annuität ist bis auf die Schlussrate jährlich gleichbleibend.
Es werden folgende Begriffe und Variablennamen benutzt:
Zi: Zinsen am Ende des Jahres i
Ti: Tilgung am Ende des Jahres i
A: Annuität, es ist A = Zi + Ti
K: Darlehensbetrag
p: Prozentzahl
q: Aufzinsfaktor: q=(1+p/100)
n: Gesamtlaufzeit in Jahren
RSi: Restschuld nach i, Anfang des (i+1)ten Jahres
Für ein Darlehen, das in n Jahren vollständig zurückgezahlt wird, lässt sich der Kreditbetrag
sich wie folgt berechnen:

Letztlich handelt es sich um eine endliche geometrische Reihe. Für die Annuität gilt in diesem
Fall:
In manuellen Rechnungen wird häufig die Restschuld nach i Jahren bzw. zu Beginn des
(i+1)-ten Jahres mit einer kompakten Formel unter Umgehung eines Tilgungsplans
berechnet:
Anschaulich: Die Restschuld ist die Differenz des Kreditbetrages und der Summe aller
bisherigen Tilgungsbeträge.
Definition der Prozedur Prototyp
Die Prozedur Prototyp wird definiert. In dieser Prozedur werden bzw. wird:
- die Berechnungen iterativ durchgeführt, um die Basisfunktionalität zu testen.
- die Daten in die Ausgabe geschrieben.
- die Ausgabe ausgelesen und die Ergebnisse für weitere Berechnungen verwendet.
Prototyp := proc( Kredit, Prozentzahl, Annuitaet ,Laufzeit)
local k,n, Ausgabe, Anz_Zeilen;
save Jahre, Restschuld, Zinsen, Tilgung, Gesamtzahlung;
begin
n := Laufzeit: // hier noch Anzahl der Iterationen
k := 2: // Laufvariable initialisiert
Ausgabe:= matrix(Laufzeit+1,5); //Die Matrix wird definiert.
Ausgabe[1,1]:= Jahre: //Die Kopfzeile wird definiert.
Ausgabe[1,2]:= Restschuld:
Ausgabe[1,3]:= Zinsen:
Ausgabe[1,4]:= Tilgung:
Ausgabe[1,5]:= Gesamtzahlung:
Ausgabe[2,1]:= 1: // Die zweite Zeile mit den Startwerten
Ausgabe[2,2]:= float(Kredit): // wird beschrieben.
Ausgabe[2,3]:= float(Kredit*Prozentzahl/100):
Ausgabe[2,4]:= float(Annuitaet-Ausgabe[2,3]):
Ausgabe[2,5]:= float(Annuitaet):
k:=2: // Durchführung der Iterationen
Anz_Zeilen:=2:
for k from 2 to n do
Ausgabe[k+1,1]:= k:
Ausgabe[k+1,2]:= float(Ausgabe[k,2]-Ausgabe[k,4]):
Ausgabe[k+1,3]:= float(Ausgabe[k+1,2]*Prozentzahl/100):
Ausgabe[k+1,4]:= float(Ausgabe[k,5]-Ausgabe[k+1,3]):
Ausgabe[k+1,4]:= float(Ausgabe[k,5]-Ausgabe[k+1,3]):
Ausgabe[k+1,5]:= float(Ausgabe[k,5]):
end_for;
Ausgabe;
end_proc:
Test der Prozedur Prototyp
Prototyp(1000,5,400,5)

Durch Vergleich mit manuellen Berechnungen stellt man fest, das die Basisfunktionalität
korrekt implementiert ist. Offensichtlich ist der Kredit am Ende des dritten Jahres getilgt.
Allerdings wird der Tilgungsplan weitergeführt, auch wenn der Kredit getilgt ist. Darüber
hinaus wird im dritten Jahr mehr getilgt, als die Restschuld beträgt. Die Funktionalität der
Prozedur muss daher erweitert werden.
Pflichtenheft für die erweiterte Prozedur Tilgungsplan.
Anforderungen an die Prozedur Tilgungsplan aufgrund der Testergebnisse:
1) Es sollen bei allen Ergebnissen, die Währungen beschreiben, nach Möglichkeit zwei
Nachkommastellen ausgegeben werden.
2) Die Prozedur soll eine Ausgabe des Tilgungsplans bei vorgegebenem Zinssatz,
vorgegebener Kreditsumme ermöglichen. Es sollen dabei zwei Variaten berücksichtigt
werden:
a) vorgegebene Gesamtlaufzeit
b) vorgegebene prozentuale Anfangstilgung
2) Die Ausgabe des Tilgungplans soll abgebrochen werden, wenn der Kredit getilgt ist.
3) Der Tilgungsplan soll die Zahlungen des letzten Jahres korrekt verarbeiten.
4) Der Tilgungsplan soll vorzeitig abgebrochen werden können.
5) Es sollen nach vollständiger Rückzahlung des Darlehens ausgegeben werden:
Gesamtzahlung und Gesamtzinsen.
6) Es sollen bei vorzeitigem Abbruch des Tilgungsplans ausgegeben werden: Die bisherige
Gesamtzahlung, Gesamttilgung und Gesamtzinsen sowie die Restschuld.
7) Die Prozedur soll grobe Fehleingaben abfangen.
Definition von Konstanten für die Programmsteuerung der Prozeduren
Nach diesen einleitenden Bemerkungen werden im folgenden einige Konstanten für den
weiteren Gebrauch initialisiert. Diese Daten werden im Verlauf des Notebooks jeweils
für die Zwecke der jeweiligen Probleme überschrieben. Es ist daher bei Änderungen
in Prozeduraufrufen jeweils erforderlich, alle Eingaben des Notebooks zu evaluieren.
Kredit := 1000: // Darlehensbetrag
Prozentzahl := 10:
Annuitaet := 263.70:
Laufzeit := 35:
Die Implementierung der Teilfunktion Rundung
Währungen erfordern die Ausgabe der Ergebnisse mit zwei Nachkommastellen.
Da MuPAD keine Funktion für eine feste Anzahl von Nachkommastellen besitzt, muss
man sich behelfen. Man multipliziert die gewünschte Zahl mit 10 hoch Anzahl der
Nachkommastellen, rundet und dividiert dann wieder durch 10 hoch Anzahl der
Nachkommastellen. Dies wird durch die Funktion runde geleistet. Diese wird nun
definiert und ihre Funktionalität an einem Beispiel demonstriert.
runde:= (x,Stellen) -> float(round(float(x)*10^Stellen)*10^(-Stellen)):
Nun wird auf zwei Nachkommastellen gerundet.
runde(10000/3,2)
![]()
Ein neuer Versuch mit der Zahl 1,5
runde(3/2,2)
![]()
Offensichtlich ist es möglich auf zwei Nachkommastellen genau zu runden. Treten
jedoch als letzte Ziffern Nullen hinter dem Komma auf, werden diese nicht mit aus-
gegeben. Bis MuPAD in einer neueren Version die entsprechende Funktionalität für
die Ausgabe von einer fest vorgegebenen Anzahl von Nachkommastellen zur Ver-
fügung stellt, muss man sich mit diesem Kompromiss behelfen.
Eine Rundung in der Prozedur Tilgungsplan auf zwei Weisen implementierbar:
1) Man rundet bei jedem Iterationsschritt mit der Funktion runde.
2) Man führt die Iterationen ohne Rundung durch und rundet nur die Ausgaben.
In diesem Notebook wird entsprechend Version 1 gerundet, da die Zahlungen des
Kunden jährlich durchgeführt werden. Diese Rundungen sind plausibel, entsprechen
jedoch unter Umständen nicht in allen Details den rechtlichen Vorschriften. Für
Informationen über die rechtlichen Details muss auf die Vorschriften der Banken
verwiesen werden.
Definition der Prozeduren
Die Prozedur Tilgungsplan und die Hilfsprozeduren Annuitaet1, Annuitaet2,
Gesamtdauer und Restschulden werden definiert.
Definition der Prozedur Annuitaet1
In der Prozedur Annuitaet1 wird die Annuität bei vorgegebener Darlehenssumme,
vorgegebener Laufzeit und vorgegebenem Zinssatz entsprechend der oben ange-
gebenen Formel berechnet.
Annuitaet1 := proc( Kredit, Laufzeit, Prozentzahl)
local n,q,p,K,Annuitaet;
begin
n:= Laufzeit:
p:= Prozentzahl:
q:= 1+p/100:
K:= Kredit:
Annuitaet:= K*q^n*(q-1)/(q^n-1):
runde(Annuitaet,2);
end_proc:
Test der Prozedur: Das Ergebnis entspricht dem Ergebnis einer manuellen Be-
rechnung und ist insofern richtig.
Annuitaet1(1000,3,5)
![]()
Definition der Prozedur Annuitaet2
In der Prozedur Annuitaet2 wird die Annuität bei vorgegebener Anfangstilgung
in Prozent der Darlehenssumme, vorgegebenem Zinssatz und vorgegebener Dar-
lehenssumme berechnet.
Annuitaet2 := proc( Kredit, Anfangstilgung, Prozentzahl)
local T1,Z1,p,K,Annuitaet;
begin
K:= Kredit:
p:= Prozentzahl:
T1:= Anfangstilgung*K/100:
Z1:= p*K/100:
Annuitaet:= Z1+T1:
Annuitaet:=runde(Annuitaet,2);
end_proc:
Test der Prozedur: Das Ergebnis ist richtig.
runde(Annuitaet2(1000,1,5),2)
![]()
Definition der Prozedur Gesamtdauer
Die Prozedur Gesamtdauer berechnet die maximale Laufzeit des Kredites bei vor-
gegebener Darlehenssumme, Annuitaet und Zinssatz. Da im letzten Jahr unter Um-
ständen noch eine Schlussrate fällig ist, die niedriger als die Annuität ist, ergeben
sich bei der Berechnung der Gesamtlaufzeit in der Regel keine natürlichen Zahlen.
Um die Schlussrate korrekt berücksichtigen zu können, muss der Wert der Ge-
samtlaufzeit auf die nächsthöhere natürliche Zahl aufgerundet werden.
Gesamtdauer := proc( Kredit, Annuitaet, Prozentzahl)
local p,q,A,K,T1;
begin
K:= Kredit:
p:= Prozentzahl:
A:= Annuitaet:
q:= 1+p/100:
Gesamtlaufzeit:= numeric::solve(K*q^n*(q-1)/(q^n-1)=A, n):
Gesamtlaufzeit:= ceil(Gesamtlaufzeit):
// nächsthöhere natürliche Zahl wegen der Schlussrate
Gesamtlaufzeit:= Gesamtlaufzeit[1];
// Auslesen aus der Lösungsmenge
end_proc:
Die Gesamtdauer kann wie folgt ausgelesen werden. Eine Rundung ist nicht erforderlich,
da das Ergebnis für die Zwecke des Tilgungsplans auf den nächsthöhere natürliche Zahl
gerundet wurde.
Gesamtdauer(1000,100,5)
![]()
Definition der Prozedur Restschulden
Die Prozedur Restschulden berechnet entsprechend der oben angegebenen Formel die
Restschuld nach einer vorgegebenen Anzahl von Jahren. Wenn die gewünschte Laufzeit
größer als die tatsächliche Laufzeit ist, wird eine Fehlermeldung ausgegeben. Die
Prozedur wurde in erster Linie für Testzwecke implementiert und kann zur Ermittlung von
Rundungsfehlern herangezogen werden.
Restschulden := proc( Kredit, Annuitaet, Prozentzahl, Laufzeit)
local p,q,n,nmax,A,K,T1;
begin
K:= Kredit: //Umkopieren von Variablen
p:= Prozentzahl: //wegen leichterer
A:= Annuitaet: //Vergleichbarkeit mit den
q:= 1+p/100: //Formeln
T1:= A-K*p/100:
n:= Laufzeit: //eingegebene Laufzeit
nmax:= Gesamtdauer(K,A,p): //theoretische Gesamtlaufzeit
if nmax <=n //Plausibilitätscheck
then
print(Unquoted,"Die eingegebene Laufzeit ist länger oder so groß");
print(Unquoted,"wie die theoretische Gesamtlaufzeit");
return();
end_if:
// Ausgabe
Restschuld:=runde(K-T1*(q^n-1)/(q-1),2):
print(Unquoted,"nach ".expr2text(Laufzeit)."Jahren");
print(Unquoted,"bzw. zu Beginn des ".expr2text(Laufzeit+1)."ten Jahres");
print(Unquoted,"betraegt die Restschuld ".expr2text(Restschuld)." €");
end_proc:
Definition der Prozedur Tilgungsplan
Für die Prozedur Tilgungsplan wurde die Prozedur Prototyp um die im Pflichtenheft
angegebenen Aufgaben erweitert.
Tilgungsplan := proc( Kredit, Prozentzahl, Annuitaet ,Laufzeit)
local k, n, p, K, Ausgabe, vorzeitig, Sonderfall;
save Jahre, Restschuld, Zinsen, Tilgung, Gesamtzahlung;
begin
p:= Prozentzahl: //Umkopieren wegen leichterer
K:= Kredit: //Vergleichbarkeit mit Formeln
Gesamtzeit:= Gesamtdauer(Kredit,Annuitaet,Prozentzahl):
Sonderfall:= FALSE:
vorzeitig:= FALSE:
if Gesamtzeit > Laufzeit then vorzeitig := TRUE: end_if:
// Sonderfall: Die gewünschte Laufzeit ist um ein Jahr geringer
// als die theoretische Gesamtlaufzeit.
if Gesamtlaufzeit = Laufzeit+1 then
Laufzeit:= Laufzeit:
Sonderfall:= TRUE:
end_if:
n := min(Laufzeit,Gesamtzeit):
k := 2: // Anzahl der Iterationen Laufvariable initialisiert
if Prozentzahl <= 0 or Prozentzahl > 20 then // Ausschluss unerlaubter Prozente
print(Unquoted,"Es sind Prozentsätze zwischen 0 und 20 % erlaubt. ");
print(Unquoted,"Ändern Sie den Prozentsatz.");
return():
end_if:
if Kredit <= 0 then // Ausschluss unsinniger Kreditbeträge
print(Unquoted,"Sie haben keinen Kredit aufgenommen. ");
print(Unquoted,"Geben Sie einen Kreditbetrag ein.");
return():
end_if:
// Man sollte vor Rentenbeginn abgezahlt haben.
if n > 45 // Bei 1 % Anfangstilgung etwas über 30 Jahre
then
print(Unquoted,"Sie sollten eine größere Annuitaet wählen. ");
print(Unquoted,"Die Kreditlaufzeit kann maximal 45 Jahre betragen.");
return():
end_if:
if Annuitaet > Kredit // Kreditbedingungen so nicht sinnvoll
then
print(Unquoted,"Die Annuitaet ist größer als der Darlehensbetrag. ");
print(Unquoted,"Sie sollten Ihre Kreditbedingungen überprüfen.");
return():
end_if:
Ausgabe:= matrix(n+2,5); //Die Matrix wird definiert.
Ausgabe[1,1]:= Jahre: //Die Kopfzeile wird definiert.
Ausgabe[1,2]:= Restschuld:
Ausgabe[1,3]:= Zinsen:
Ausgabe[1,4]:= Tilgung:
Ausgabe[1,5]:= Gesamtrate:
// Die zweite Zeile mit den Startwerten wird beschrieben.
Ausgabe[2,1]:= 1:
Ausgabe[2,2]:= runde(Kredit,2):
Ausgabe[2,3]:= runde(Kredit*Prozentzahl/100,2):
Ausgabe[2,4]:= runde(Annuitaet-Ausgabe[2,3],2):
Ausgabe[2,5]:= runde(Annuitaet,2):
Anz_Zeilen:= 2:
for k from 2 to n+1 do
if k < n+1
then
Ausgabe[k+1,1]:= k:
Ausgabe[k+1,2]:= runde(Ausgabe[k,2]-Ausgabe[k,4],2):
Ausgabe[k+1,3]:= runde(Ausgabe[k+1,2]*Prozentzahl/100,2):
Ausgabe[k+1,4]:= runde(Ausgabe[k,5]-Ausgabe[k+1,3],2):
Ausgabe[k+1,5]:= runde(Ausgabe[k,5],2):
else
Ausgabe[k+1,1]:= k:
Ausgabe[k+1,2]:= runde(Ausgabe[k,2]-Ausgabe[k,4],2):
if Ausgabe[k+1,2] < 0 then
Ausgabe[k+1,2]:=0:
end_if:
end_if:
// Korrektur der letzen Zeile bei zu hoher Annuitaet
if Ausgabe[k,5]-Ausgabe[k+1,2]*Prozentzahl/100 > Ausgabe[k+1,2] then
Ausgabe[k+1,3]:=runde(Ausgabe[k+1,2]*Prozentzahl/100,2):
Ausgabe[k+1,4]:=runde(Ausgabe[k+1,2],2):
Ausgabe[k+1,5]:=runde(Ausgabe[k+1,2]+Ausgabe[k+1,3],2):
end_if:
end_for;
// Sonderfallbehandlung für die letzte Zeile: Ohne die Korrektur
// werden in der letzten Zeile unnötige Tilgungen und Zinsen
// ausgegeben.
if Sonderfall = TRUE then
Ausgabe[n+1,2]:= runde(Ausgabe[n,2]-Ausgabe[n,4],2):
Ausgabe[n+2,3]:= 0:
Ausgabe[n+2,4]:= 0:
Ausgabe[n+2,5]:= 0:
end_if:
// Berechnung der Gesamtsummen
Gesamtzins:= Ausgabe[2,3]:
Gesamttilgung:= Ausgabe[2,4]:
Gesamtzahlung:= Ausgabe[2,5]:
for k from 3 to n+1 do
Gesamtzins:= runde(Gesamtzins+Ausgabe[k,3],2):
Gesamttilgung:= runde(Gesamttilgung+Ausgabe[k,4],2):
Gesamtzahlung:= runde(Gesamtzahlung+Ausgabe[k,5],2):
end_for;
//Ausgabe der Gesamtsummen
print(Unquoted,"Die Kreditsumme betraegt: ".expr2text(K)." €");
print(Unquoted,"Der Zinssatz betraegt: ".expr2text(p)."%");
print(Unquoted,"Die Gesamtzinsen betragen: ".expr2text(Gesamtzins)." €");
print(Unquoted,"Die Gesamttilgung beträgt: ".expr2text(Gesamttilgung)." €");
print(Unquoted,"Die Gesamtzahlung beträgt: ".expr2text(Gesamtzahlung)." €");
print(Unquoted,"");
print(Unquoted,"Die Laufzeit beträgt: ".expr2text(n)." Jahre");
print(Unquoted,"");
if vorzeitig = TRUE then
print(Unquoted,"bei vorzeitigem Abbruch");
else
print(Unquoted,"bei vollständiger Rückzahlung");
end_if:
print(Unquoted,"Nun folgt der Tilgungsplan");
print(Unquoted,"");
Ausgabe;
end_proc:
Test der Prozeduren
Nun werden einige Tests der Prozeduren durchgeführt. Für Testzwecke werden die
Laufzeiten so kurz gewählt, dass Kontrollen durch manuelle Rechnungen möglich sind.
Zu Beginn werden einige Konstanten definiert.
Kredit := 1000: // Darlehensbetrag
Prozentzahl := 5:
Laufzeit := 40:
1. Fall: Der Kredit wird vollständig zurückgezahlt.
Für die Laufzeit (vierter Parameter) ist in der Prozedur Tilgungsplan ein Wert auszu-
geben, der größer ist als die tatsächliche Laufzeit des Kredites ist. Es bietet sich hier
der hohe Wert 40 an. Zunächst wird die Annuitaet bestimmt. Bei einer Laufzeit von
3 Jahren soll der Kredit vollständig zurückgezahlt werden. Dazu wird mit der Prozedur
Annuitaet1 die Annuitaet berechnet und dann in der Prozedur Tilgungsplan benutzt.
Annuitaet:= runde(Annuitaet1( Kredit, 3, Prozentzahl),2)
![]()
Tilgungsplan (Kredit,Prozentzahl, Annuitaet,40)
Die Kreditsumme betraegt: 1000 €
Der Zinssatz betraegt: 5%
Die Gesamtzinsen betragen: 101.63 €
Die Gesamttilgung beträgt: 1000.0 €
Die Gesamtzahlung beträgt: 1101.63 €
Die Laufzeit beträgt: 3 Jahre
bei vollständiger Rückzahlung
Nun folgt der Tilgungsplan

Es wird ein kurzer Test der Prozedur Restschuld durchgeführt.
Restschulden(Kredit,Annuitaet,Prozentzahl,2)
nach 2Jahren
bzw. zu Beginn des 3ten Jahres
betraegt die Restschuld 349.72 €
Manuelle Rechnungen bestätigen die Richtigkeit der Ergebnisse. Da in der letzten Zeile
Nullen stehen, ist erkennbar, dass der Kredit zurückgezahlt ist. Die Richtigkeit der Er-
gebnisse wird auch durch die Konsistenz der Ergebnisse der Prozeduren Tilgungsplan
und Restschuld sichergestellt, da beide unabhängig voneinander programmiert sind.
2. Fall: Die eingegebene Laufzeit ist kürzer als die theoretische Gesamtlaufzeit.
Tilgungsplan (Kredit,Prozentzahl, Annuitaet,1)
Die Kreditsumme betraegt: 1000 €
Der Zinssatz betraegt: 5%
Die Gesamtzinsen betragen: 50.0 €
Die Gesamttilgung beträgt: 317.21 €
Die Gesamtzahlung beträgt: 367.21 €
Die Laufzeit beträgt: 1 Jahre
bei vorzeitigem Abbruch
Nun folgt der Tilgungsplan

Auch hier bestätigen manuelle Rechnungen bzw. ein Vergleich mit den Ergebnissen des
ersten Testfalls die Ergebnisse des Tilgungsplans.
3. Fall: Die eingegebene Laufzeit entspricht der theoretischen Gesamtlaufzeit.
Tilgungsplan (Kredit,Prozentzahl, Annuitaet,3)
Die Kreditsumme betraegt: 1000 €
Der Zinssatz betraegt: 5%
Die Gesamtzinsen betragen: 101.63 €
Die Gesamttilgung beträgt: 1000.0 €
Die Gesamtzahlung beträgt: 1101.63 €
Die Laufzeit beträgt: 3 Jahre
bei vollständiger Rückzahlung
Nun folgt der Tilgungsplan

Auch hier bestätigen manuelle Rechnungen die Ergebnisse.
4. Fall: Die vorgegebene Laufzeit ist um ein Jahr geringer als die theoretische Gesamt-
laufzeit. Bei der derzeitigen Implementierung war für die Ausgabe in der letzten Zeile
des Tilgungsplans eine Sonderfallbehandlung nötig, die in der Prozedur Tilgungsplan
entsprechend gekennzeichnet ist.
Tilgungsplan (Kredit,Prozentzahl, Annuitaet,2)
Die Kreditsumme betraegt: 1000 €
Der Zinssatz betraegt: 5%
Die Gesamtzinsen betragen: 84.14 €
Die Gesamttilgung beträgt: 650.28 €
Die Gesamtzahlung beträgt: 734.42 €
Die Laufzeit beträgt: 2 Jahre
bei vorzeitigem Abbruch
Nun folgt der Tilgungsplan

Anwendungen der Prozeduren auf konkrete Probleme
Für die folgenden Anwendungen werden einige Konstanten definiert, die im weiteren
Verlauf benutzt und teilweise überschrieben werden.
Kredit := 100000: // Darlehensbetrag
Prozentzahl := 5:
Laufzeit := 39:
Anfangstilgung := 1:
1. Problem
Ein Kredit über 100 000,00 € soll in 10 Jahren komplett getilgt werden. Die Annuität
wird mit Hilfe der Prozedur Annuität1 berechnet.
Annuitaet:=Annuitaet1(Kredit, 10,Prozentzahl)
![]()
Nun wird die Prozedur Tilgungsplan aufgerufen. Für die Laufzeit wird die maximal
mögliche Laufzeit angenommen. Die Prozedur Tilgungsplan berechnet automatisch
die richtige Laufzeit von 10 Jahren mit Hilfe der Prozedur Laufzeit.
Tilgungsplan (Kredit,Prozentzahl, Annuitaet,Laufzeit)
Die Kreditsumme betraegt: 100000 €
Der Zinssatz betraegt: 5%
Die Gesamtzinsen betragen: 29504.57 €
Die Gesamttilgung beträgt: 100000.0 €
Die Gesamtzahlung beträgt: 129504.57 €
Die Laufzeit beträgt: 10 Jahre
bei vollständiger Rückzahlung
Nun folgt der Tilgungsplan

Offensichtlich ist die gesamte Zinslast einigermaßen niedrig. Die jährliche Belastung ist
allerdings recht hoch.
2. Problem
Ein Kredit über 100 000,00 € soll bei 1 % Anfangstilgung komplett getilgt werden. Die
Annuität wird mit Hilfe der Prozedur Annuitaet2 berechnet.
Kredit := 100000: // Darlehensbetrag
Prozentzahl := 7:
Laufzeit := 40:
Anfangstilgung := 1:
Annuitaet:= Annuitaet2( Kredit, Anfangstilgung, Prozentzahl)
![]()
Nun wird die Prozedur Tilgungsplan aufgerufen. Für die Laufzeit wird die maximal
mögliche Laufzeit angenommen. Die Prozedur Tilgungsplan berechnet automatisch
die richtige Laufzeit von 10 Jahren mit Hilfe der Prozedur Laufzeit.
Tilgungsplan (Kredit,Prozentzahl, Annuitaet,Laufzeit)
Die Kreditsumme betraegt: 100000 €
Der Zinssatz betraegt: 7%
Die Gesamtzinsen betragen: 145927.03 €
Die Gesamttilgung beträgt: 100000.0 €
Die Gesamtzahlung beträgt: 245927.03 €
Die Laufzeit beträgt: 31 Jahre
bei vollständiger Rückzahlung
Nun folgt der Tilgungsplan

Zum Vergleich wird die Restschuld nach 30 Jahren bzw. zu Beginn des 31. Jahres
berechnet.
Restschulden(Kredit,Annuitaet,Prozentzahl,30)
nach 30Jahren
bzw. zu Beginn des 31ten Jahres
betraegt die Restschuld 5539.21 €
Die Rundungsdifferenz bei der Restschuld nach 30 Jahren beträgt hier 0,07 € und ist
im Vergleich zur Gesamtsumme gering, jedoch möglicherweise aus juristischen Gründen
relevant.
3. Problem
Ein Kredit über 100 000,00 € soll bei 2 % Anfangstilgung komplett getilgt werden. Die
Annuität wird mit Hilfe der Prozedur Annuitaet2 berechnet. Die Ausgabe kann durch
einen Doppelpunkt unterdrückt werden.
Kredit := 100000: // Darlehensbetrag
Prozentzahl := 7:
Laufzeit := 39:
Anfangstilgung := 2:
Annuitaet:= Annuitaet2( Kredit, Anfangstilgung, Prozentzahl)
![]()
Nun wird die Prozedur Tilgungsplan aufgerufen. Für die Laufzeit wird die maximal
mögliche Laufzeit angenommen. Die Prozedur Tilgungsplan berechnet automatisch
die richtige Laufzeit von 10 Jahren mit Hilfe der Prozedur Laufzeit.
Tilgungsplan(Kredit, Prozentzahl, Annuitaet, Laufzeit)
Die Kreditsumme betraegt: 100000 €
Der Zinssatz betraegt: 7%
Die Gesamtzinsen betragen: 100127.75 €
Die Gesamttilgung beträgt: 100000.0 €
Die Gesamtzahlung beträgt: 200127.75 €
Die Laufzeit beträgt: 23 Jahre
bei vollständiger Rückzahlung
Nun folgt der Tilgungsplan

4. Problem
Ein Kredit über 100 000,00 € soll bei 1 % Anfangstilgung komplett getilgt werden. Die
Annuität wird mit Hilfe der Prozedur Annuitaet2 berechnet. Die Ausgabe kann durch
einen Doppelpunkt unterdrückt werden. Der Zinssatz ist im Vergleich zu oben um 2 %
erhöht.
Kredit := 100000: // Darlehensbetrag
Prozentzahl := 9:
Laufzeit := 39:
Anfangstilgung := 1:
Annuitaet:= Annuitaet2( Kredit, Anfangstilgung, Prozentzahl)
![]()
Nun wird die Prozedur Tilgungsplan aufgerufen. Für die Laufzeit wird die maximal
mögliche Laufzeit angenommen. Die Prozedur Tilgungsplan berechnet automatisch
die richtige Laufzeit von 10 Jahren mit Hilfe der Prozedur Laufzeit.
Tilgungsplan (Kredit,Prozentzahl, Annuitaet,Laufzeit)
Die Kreditsumme betraegt: 100000 €
Der Zinssatz betraegt: 9%
Die Gesamtzinsen betragen: 167276.91 €
Die Gesamttilgung beträgt: 100000.0 €
Die Gesamtzahlung beträgt: 267276.91 €
Die Laufzeit beträgt: 27 Jahre
bei vollständiger Rückzahlung
Nun folgt der Tilgungsplan

Offensichtlich verkürzt sich die Gesamtlaufzeit im Vergleich im Vergleich zu Fall 2 bei
höherer Annuität und höherem Gesamtzins.
5. Problem
Ein Kredit über 100 000,00 € 5 Jahre lang bei 1 % Anfangstilgung und einem Zinssatz von
5 % teilrückgezahlt werden. Anschließend wird der Zinssatz auf 6 % heraufgesetzt und
der Kredit soll nun in 15 Jahren vollständig getilgt werden. Die Rückzahlung des Kredites
soll dokumentiert werden.
a) 1. Zeitraum:
Annuität wird mit Hilfe der Prozedur Annuitaet2 berechnet. Die Ausgabe kann durch
einen Doppelpunkt unterdrückt werden.
Kredit := 100000: // Darlehensbetrag
Prozentzahl := 5:
Laufzeit := 39:
Anfangstilgung := 1:
Annuitaet:= Annuitaet2( Kredit, Anfangstilgung, Prozentzahl)
![]()
Nun wird die Prozedur Tilgungsplan aufgerufen. Für die Laufzeit wird die maximal
mögliche Laufzeit angenommen. Die Prozedur Tilgungsplan berechnet automatisch
die richtige Laufzeit von 10 Jahren mit Hilfe der Prozedur Laufzeit.
Tilgungsplan(Kredit,Prozentzahl, Annuitaet,5)
Die Kreditsumme betraegt: 100000 €
Der Zinssatz betraegt: 5%
Die Gesamtzinsen betragen: 24474.37 €
Die Gesamttilgung beträgt: 5525.63 €
Die Gesamtzahlung beträgt: 30000.0 €
Die Laufzeit beträgt: 5 Jahre
bei vorzeitigem Abbruch
Nun folgt der Tilgungsplan

b) 2. Zeitraum
Die Annuität wird wird aus dem obigen Tilgungsplan abgelesen. Alternativ hätte
man die Restschuld auch ohne Ausgabe eines Tilgungsplan mit Hilfe der Prozedur
Restschulden berechnen können.
Kredit := 94474.37: // neuer Darlehensbetrag
Prozentzahl := 6:
Laufzeit := 15:
Annuitaet:= Annuitaet1(Kredit, Laufzeit,Prozentzahl)
![]()
Nun wird die Prozedur Tilgungsplan erneut aufgerufen.
Tilgungsplan(Kredit,Prozentzahl, Annuitaet,Laufzeit)
Die Kreditsumme betraegt: 94474.37 €
Der Zinssatz betraegt: 6%
Die Gesamtzinsen betragen: 51435.77 €
Die Gesamttilgung beträgt: 94474.33 €
Die Gesamtzahlung beträgt: 145910.1 €
Die Laufzeit beträgt: 15 Jahre
bei vorzeitigem Abbruch
Nun folgt der Tilgungsplan

Offensichtlich ergibt sich auch hier eine geringe Rundungsdifferenz bezogen auf die
ganze Laufzeit. Aus diesem Grund gibt die Prozedur Tilgungsplan das mathematisch
korrekte Ergebnis "vorzeitiger Abbruch" an, obwohl die Rundungsdifferenz aus
praktischer Sicht belanglos ist.
Bei der derzeitigen Implementierung des Notebooks ist es nicht möglich, die beiden
Tilgungspläne kompakt als als Einzeltilgungsplan darzustellen.
Die Beträge von Gesamtzinsen und Gesamtzahlung müssen mit Hilfe der Ergebnisse
der beiden Durchläufe der Prozedur Tilgungsplan manuell berechnet werden. Diese
Berechnungen werden hier nicht durchgeführt.
Bewertung der bisherigen Ergebnisse:
1) Bei gleichbleibender Anfangstilgung verkürzt sich die Laufzeit des Kredites, wenn
der Zinssatz ansteigt. Andererseits wird dabei aber die Gesamtzahlung höher.
2) Bei gleichbleibendem Zinssatz verringern sich sowohl Gesamtlaufzeit als auch
die Gesamtzahlung erheblich, wenn man die Anfangstilgung von 1 % auf 2 % der
Kreditsumme vergrößert oder noch größere Anfangstilgungen wählt.
3) Die Gesamtzinsen vergrößern sich mit wachsender Laufzeit und können bei
niedrigen Anfangstilgungen erheblich über dem Kreditbetrag liegen.
4) Das Darlehen ist erst zu einem sehr spätern Zeitpunkt bis zur Hälfte getilgt. Während
der ersten Jahre erhöhen sich die Tilgungbeträge bei niedrigen Anfangstilgungen nur
unwesentlich.
Einige Anregungen zur selbstständigen Weiterarbeit:
1. Teil: Verbesserungen der Prozedur:
a) Man sollte den Tilgungsplan auf nachschüssige monatliche (vierteljährliche) Tilgung
und Verzinsung mit monatlicher (vierteljährlicher) Ausgabe der Daten umstellen.
Die Wahl des Zeitraums sollte vom Benutzer in der Prozedursteuerung wählbar sein.
b) Man sollte eine zweite Rundungsvariante implementieren und die Ergebnisse in
verschiedenen Fällen mit den hier erzielten Ergebnissen vergleichen. Bei Benutzung
der oben erwähnten Restschuldformel wird mit maximaler Genauigkeit gerechnet.
Ein sinnvoller Vergleich ist beispielsweise möglich, wenn man die Ergebnisse der
Restschuldberechnung mit der bisherigen Methode und die Ergebnisse, die man mit
Hilfe der Restschuldformel erzielt, in einer gemeinsamen Tabelle einander
gegenüberstellt.
c) Man sollte bei monatlicher (vierteljährlicher) Abrechnung die Daten nur noch jährlich
ausgeben. In diesem Fall sollten die monatlich bzw. vierteljährlich erhobenen Daten
zum Jahresende zum Zweck der Ausgabe addiert werden.
d) Üblicherweise bleiben Zinssätze nur für vertraglich festgeschriebene Zeiträume konstant.
Man sollte die Prozedur so ändern, dass nach einer vorgegebenen Anzahl von Jahren
ein neuer Zinssatz eingeführt werden kann. Der Tilgungsplan soll die Änderungen des
Zinssatzes berücksichtigen und den Verlauf von der Kreditaufnahme bis zur
vollständigen Tilgung kompakt in einem Tilgungsplan darstellen.
e) In einigen Verträgen werden Sondertilgungsmöglichkeiten eingeräumt. Sehen Sie auch
in der Prozedur eine Sondertilgungsmöglichkeit bis zu einer vorgegebenen Höhe nach
einer vorgegebenen Laufzeit vor.
f) Bislang sind alle bisherigen Rechnungen prinzipiell auch ohne EDV-Unterstützung
durchführbar. Es sollte eine Prozedur zur Effektivzinsberechnung erstellt werden. Zu
diesem Zweck sollte ein Algorithmus zur Berechnung des Effektivzinssatzes aus der
Literatur beschafft werden.
g) Sehen Sie die Möglichkeit für ein Danum vor.
h) Man sollte den Verlauf von Zinsen und Tilgung und Restschuld graphisch darstellen.
2. Teil: Experimente mit der Prozedur
Experimentieren Sie bei selbstgewählten Ausgangssituationen die Auswirkungen auf
den Tilungsplan.
Beispiele:
a) Wie wirken sich Änderungen des Zinssatzes auf die Laufzeit, die Annuität und die
Gesamtzahlung aus?
b) Welche durchschnittlichen Laufzeiten ergeben sich bei aktuellen Zinssätzen bei
Anfangstilgungen von 1%, 2%, 3% etc.
c) Vergleichen Sie Auswirkungen von jährlichen, monatlichen und vierteljährlichen
Abrechnungszeiträumen auf Gesamtzahlung, Effektivzinssatz und Laufzeit, nachdem
Sie die entsprechenden Optionen implementiert haben.
d) Welche Laufzeit ergibt sich, wenn man einen Kredit mit 1 % Anfangstilgung bei einem
Zinssatz von 5 % nach einer Laufzeit von 5 Jahren beeendet und dann einen
Anschlusskredit über einen Zinssatz von 6 % ebenfalls bei 1 % Anfangstilgung aufnimmt?
________________________________________________________________________________
Anmerkungen:
1. Weitere Anregungen finden Sie in der Unterrichsmaterialsammlung unter schule.mupad.de. In diesen
Notebooks werden eine Vielzahl unterschiedlichster mathematischer Probleme mit MuPAD Pro gelöst.
2. In der Materialsammlung des MuPAD Servers findet sich ein Notebook des Autors zum Newtonverfahren,
bei dem ebenfalls Matrizen zur Datenausgabe und Datenspeicherung benutzt werden. Sie finden dies
Notebook beispielsweise, indem Sie in der Volltextsuche nach dem Namen des Autors suchen.
3. MuPAD stellt auch Funktion für Tabellen und Arrays zur Verfügung. Informationen über diese Funktion finden
sich unter anderem im MuPAD Tutorium oder in der Hilfe zu MuPAD. Die Möglichkeiten der Nutzung
dieser Funktionen für die tabellarische Darstellung eines Tilgungsplans werden hier nicht untersucht.
4. Es soll hervorgehoben werden, dass Abweichungen zu von Banken oder anderen Institutionen herausgegebenen
Tilgungsplänen möglich sind. Diese können unter anderem begründet sein durch
a) andere als jährliche Abrechnungszeiträume. In diesem Fall sind die Abweichungen unter Umständen
erheblich.
b) andere Zahlungszeitpunkte (vorschüssig oder mittelschüssig statt nachschüssig)
c) andere Rundungsverfahren.
Für die Ergebnisse der oben dargestellten Prozeduren kann keine Gewähr übernommen werden.
Im Abweichungsfall gelten die von Banken oder anderen Institutionen herausgegebenen Tilgungspläne.
________________________________________________________________________________