%Es soll das cg-Verfahren ausprobiert werden an einem konventionellen Beispiel.
%Gehört zu Numerik, Aufgabenblatt 19, SS 1998
n=4;
A=invhilb(n);     %schwieriges Beispiel, erzeugt große Rundungsfehler.
%A(1,1)=-A(1,1);  %Wir verderben die positive Definitheit: Verfahren geht aber durch
%A(2,1)=2*A(2,1); %Wir verderben auch die Symmetrie, führt zum Chaos
b=sum(A)';
x=zeros(n,1);r=x;h=x;hilfs=x;            %Startwert Nullvektor
h=b-A*x; r=h;                            %(5.53)
step=0;
%x,h,r
tic  %Stoppuhr beginnt.
y=norm(r,inf);Y=[y];
while y>=1e-10 & step <=50  
  step=step+1;
  hilfs=A*h;
  alpha=r'*r/(h'*hilfs);                 %(5.54)
  x=x+alpha*h;                           %(5.55)
  r2hilfs=r'*r;
  r=r-alpha*hilfs;                       %(5.56)
  beta=r'*r/r2hilfs;                     %(5.57)
  halt=h;
  h=r+beta*h;                            %(5.58)
  test0=halt'*A*h;                       %Test auf Konjugiertheit
  y=norm(r,inf);Y=[Y,y];
  [step y test0]
end; %while
toc %Stoppuhr stoppt.
%In dem Beispiel mit n=4 protokollieren wir den Fehler
%und zeichnen den Abfall auf einer halblogarithmischen Skala.
semilogy(Y);
