.. Berechnet die Rendite eines Wertpapieres

function rendite (x)
## berechnet die Rendite von Zahlungen x zu Perioden 0,1,2,3,...
    if sum(x)<0; error("Rendite negativ?"); endif;
    q=polydif(x);
    c=1;
    repeat
        cnew=c-polyval(x,c)/polyval(q,c);
        if c~=cnew; break; endif;
        c=cnew;
    end;
    return (1/cnew-1)*100;
endfunction

function rendite2 (x,n)
## berechnet die Rendite von Zahlungen x zu gebrochenen Perioden n.
    if sum(x)<0; error("Rendite negativ?"); endif;
    k2=x*n; n2=n-1;
    k2=k2[2:length(x)]; n2=n2[2:length(x)];
    c=1;
    repeat
        cnew=c-sum(x*c^n)/sum(k2*c^n2);
        if c~=cnew; break; endif;
        c=cnew;
    end;
    return (1/cnew-1)*100;
endfunction

function anlageformel (f,k0,r,k1,n,i0,i1)
	return k0*f^n+r*f^i1*(f^(n-i0-i1+1)-1)/(f-1)+k1
endfunction

function anlage1 (kapital,rate,endkapital,laufzeit,start,halten)
	f=bisect("anlageformel",1.0000001,2,kapital,rate, ..
			endkapital,laufzeit,start,halten);
	return (f-1)*100;
endfunction

function anlage (kapital,rate,endkapital,laufzeit,start=1,halten=1)
## Berechnet die Rendite einer Anlage oder eines Darlehens in %.
## kapital : Zahlung zu Beginn
## rate : Zahlung zu Beginn von Periode "start"
##        bis Beginn Periode "laufzeit"-"halten"
## endkapital : Auszahlung bzw. Endkapital nach laufzeit
## Zahlung müssen negativ eingegeben werden !
## Die Rendite muá zwischen 0 und 100 % liegen.
## Beispiel: anlage(-104,8.75,100,8)
	return map("anlage1",kapital,rate,endkapital,laufzeit,start,halten);
endfunction

function effzins (kurs,laufzeit,zins)
## berechnet den effektiven Zins eines Wertpapieres.
## kurs und zins in %, laufzeit in Zinsperioden.
## z.B. effzins(104,8,8.75).
	return anlage(-kurs,zins,100,laufzeit,1,0);
endfunction

function rate (darlehen,laufzeit,zins,rest=0,faellig=1)
## Berechnet die Rate für ein Darlehen mit Restschuld.
## Der Zins wird in % angegeben.
## Die erste Zahlung wird nach der faellig-sten Zinsperiode f„llig.
## Die letzte Rate wird nach der n-ten Zinsperiode f„llig.
## Die Restschuld ist die Schuld nach der n-ten Periode.
    f=1+zins/100;
    return (darlehen*f^laufzeit-rest)*(f-1)/(f^(laufzeit-faellig+1)-1);
endfunction

function darlzins (darlehen,laufzeit,rate,rest=0,faellig=1)
## Berechnet den Zinssatz eines Darlehens in %.
## Die anderen Parameter sind wie bei "rate".
	return anlage(darlehen,-rate,-rest,laufzeit,faellig,0);
endfunction

function restschuld (darlehen,laufzeit,zins,rate,faellig=1)
## Berechnet die Restschuld.
## Die Parameter sind wie bei "rate".
	f=1+zins/100;
	return darlehen*f^laufzeit-rate*(f^(laufzeit-faellig+1)-1)/(f-1);
endfunction

function restschulden (darlehen,laufzeit,zins,rate,faellig=1)
## Berechnet einen Vektor mit Restschulden.
## Die Parameter sind wie bei "rate".
## Die Funktion kann nicht mit Vektoren aufgerufen werden.
	r=dup(darlehen,laufzeit+1)';
	f=1+zins/100;
	if faellig==0; r[1]=r[1]-rate; endif;
	loop 2 to laufzeit+1;
		r[#]=r[#-1]*f;
		if #>faellig;
			r[#]=r[#]-rate;
		endif;
	end;
	return r;
endfunction

function sparzins (rate,laufzeit,endkapital)
## Berechnet den effektiven Zins eines Sparvertrages.
    return darlehen(0,-rate,endkapital,laufzeit,0,1);
endfunction

function endkap (rate,laufzeit,zins)
## Berechnet das Endkapital eines Sparvertrages.
	p=1+zins/100;
    return p*rate*(p^laufzeit-1)/(p-1);
endfunction

"rendite(zahlungen) definiert."
"rendite2(zeiten,zahlungen) definiert."
"anlage(startkapital,rate,endkapital,laufzeit,start,halten) definiert"
"effzins(kurs%,laufzeit,zins%) definiert."
"rate(darlehen,laufzeit,zins%,rest=0,faellig=1) definiert."
"darlzins(darlehen,laufzeit,rate,rest=0,faellig=1) definiert."
"restschuld(darlehen,laufzeit,rate,faellig=1) definiert."
"restschulden(darlehen,laufzeit,rate,faellig=1) definiert."
"sparzins(rate,laufzeit,endkapital) definiert."
"endkap(rate,laufzeit,zins%) definiert."

"Benutzen Sie help ... für weitere Informationen."

