%Schauders Basis Für einige einfache Fälle.
%Die Testfunktion kommt von außen: Testfunktion schaudertestfkt.m: 
                                           %[y]=schaudertestfkt(x)
%Ebenfalls schauderbasis.m:  function [b]=schauderbasis(x,dis);
%Literatur: R. M. Young: An introduction to nonharmonic Fourier
%series, Academic Press, 1980,  Seite 3.
%Programm: G. O. ab 7. 12. 1995
ende=4
le=2^ende+1;
disp(['Schauder-Basis mit ',num2str(le),' Elementen (ohne B_0) wird gezeichnet.']);
xx=zeros(1,2^ende+1);  %Für die Knoten
c=xx;                  %Für die Koeffizienten
xx(1)=0;xx(2)=1;
for n=1:ende  %Berechnung der Knoten
  s=2^(n-1)+1;
  for j=1:2^(n-1)
    xx(s+j)=(2*j-1)/(2^n);
  end;%for j
end;%for n
%[y,i]=sort(xx);
%In i erkennt man die Reihenfolge und Nachbarknoten der Knoten x: 
%Die Nachbarn von x(j) sind x(i(k-1)) und x(i(k+1)) mit j=i(k);
c(1)=schaudertestfkt(xx(1)); c(2)=schaudertestfkt(xx(2))-schaudertestfkt(xx(1));
for j=3:le
  x=xx(1:j);
  [y,i]=sort(x);
  k=find(i==j);
  km=x(j);kl=x(i(k-1));kr=x(i(k+1));
  c(j)=schaudertestfkt(km)-((schaudertestfkt(kl)-schaudertestfkt(kr))/(kl-kr)*(km-kl)+schaudertestfkt(kl));
end; %for j
dis=1025; %Anzahl der zu zeichnenden Punkte: dis > le, 
if dis<=le,disp('Warnung: Diskretisierung zu grob!');end;
B=schauderbasis(x,dis);
tt=linspace(x(1),x(2),dis);
for j=2:le    %Zum Zeichnen der Basiselemente
  subplot((le-1)/4,4,j-1);
  if j<3
    plot(tt,B(j,:));else
    plot(tt,B(j,:),x(j), 0,'o');
  end; %if
  xlabel(['Basis Nr. ',num2str(j-1)]);
end; %for j
disp('Pause, nach Drücken der Enter-Taste verschwinden die Basis!');
%print -dps SchauderBasis.ps
pause;close;
Bneu=diag(c)*B;
fle=sum(Bneu);
[y,text]=schaudertestfkt(tt);
figure(1)
plot(tt,fle);
xlabel(['Darstellung von ',text,' durch Schauder-Basis mit ' num2str(le),...
' Basiselementen']);
fe=max(abs(y-fle));
disp(['Fehler = ',num2str(fe),' bei ',text]);
figure(2)
plot(tt,y-fle);
xlabel(['Fehler von ',text,' durch Schauder-Basis mit ', num2str(le),' Basiselementen']);
%print -dps Schauderexp.ps
return;

