%=============================================================================
%(0) Vorbemerkungen
%Ist s=sum_ja_jB_{j,k} ein Spline der Ordnung k, so werden die Koeffizienten
%a' von s'=sum_ja'_jB_{j,k-1} berechnet. Gegeben ist eine Knotenfolge t_j,
%nicht fallend (das wird vom Programm nicht geprüft), mehrfache Knoten erlaubt, 
%die die B-Splines B_{j,k} und B_{j,k-1} eindeutig definiert. 
%Die Knoten dürfen, damit der Splines s differenzierbar ist, 
%höchstens (k-2)-fache Vielfachheit haben, im Programm
%wird jedoch nur t(j+k-1)-t(j)>0 für alle j verlangt. Ist t(j+k-1)-t(j)=0,
%so ist B_{j,k-1}=0 und B_{j,k} ist möglichweise noch nicht einmal 
%stetig bie t_j. Im Programm ist a'=aableitg. Geht die Summe für s von 1 bis n,
%so müssen die Knoten von 1 bis n+k laufen. Das Ergebnis ist 
%a'=(0,a_2',a_3',...,a_n'). Will man durch Wiederholung höhere Ableitungen
%ausrechnen, so ist jeweils, a'(1) und Knoten(1) wegzulassen. Die Koeffizienten
%werden nach der folgenden Formel berechnet:
%a_j':=(k-1)(a_j-a_{j-1})/(t_{j+k-1}-t_j) sofern t_{j+k-1}-t_j>0 und j>1.
%Im Falle t_{j+k-1}-t_j=0 ist a_j'=Inf (bei a_j-a_{j-1} nicht Null) 
%oder a_j'=NaN (bei a_j-a_{j-1}=0). Will man nur die Ableitungen der B-Splines
%bestimmen, ist es einfacher, diese direkt zu bestimmen.
%Das Programm (Gerhard Opfer, 17. Juli 2000) hat die Form:
%
%          function aableitg=astrich(Knoten,Koeff,Ordnung);

function aableitg=astrich(Knoten,Koeff,Ordnung);
%=============================================================================
%(1) Umbenennungen
k=Ordnung;t=Knoten;a=Koeff;
%=============================================================================
%(2) Berechnung der Knotendifferenzen
n=length(a);
Knotenrechts=t(k+1:n+k-1);
Knotenlinks=t(2:n);
deltat=Knotenrechts-Knotenlinks;
%=============================================================================
%(3) Prüfen auf nichtdifferenzierbare Stellen (Rand nicht mitgerechnet)
J=find(deltat==0);
if isempty(J)==0
  Kn=unique(Knotenrechts(J)); %(mehrfache Knoten werden eliminiert)
  disp(['Spline an den Knoten ',num2str(Kn),' nicht differenzierbar']);
  %An den Randknoten werden Unstetigkeiten nicht bemerkt.
end; %if
%=============================================================================
%(4) Berechnung der Koeffizientendifferenzen 
Koeffrechts=a(2:n);
Koefflinks=a(1:n-1);
deltaa=Koeffrechts-Koefflinks;
%=============================================================================
%(5) Berechnung der Koeffizienten der Ableitung
aableitg(1)=0;
aableitg(2:n)=(k-1)*deltaa./deltat;
%=============================================================================
%(6) Schlu\ss
return;
%=============================================================================
