function [] = prog1main()

mode(0);

ieee(1);


disp('SOR Verfahren:')
disp('Nach 10 SOR-Iterationen ist x ')
A=[169 13 39 -26 52 13 -39 65; 13 226 3 13 34 -14 -33 50;39 3 333 30 66 -69 81 123;-26 13 30 109 40 -61 4 5;52 34 66 40 334 -30 -5 44;13 -14 -69 -61 -30 143 4 8;-39 -33 81 4 -5 4 164 -7;65 50 123 5 44 8 -7 227];
b=[4693 -1034 6051 -1353 3384 355 1652 3144] ;
x=[0 0 0 0 0 0 0 0] ;
w=[1/2 1 3/2];// w=1,1/2,3/2
for t=1:3
  
  for k=1:10
     //N(1:8)=0;
     M(1:8)=0;
     for i=1:8
        
        //N(i)=b(i);
        for j=1:i-1
            M(i)=M(i)+(-A(i,j))*x(j);
        end;
        for j=i+1:8
            M(i)=M(i)+(-A(i,j))*x(j);
        end;
        y(i)=x(i);//hier ist x hoch k
        x(i)=(M(i)+b(i))/A(i,i); //hier ist x hoch k+(1/2)       
        x(i)=(1-w(t))*y(i)+w(t)*x(i);//hier ist x hoch k+1 
      end;
        
   end;
  W=w(t) 
  
  disp(x)
end;

disp('optimaler w fuer SOR Verfahren')
for i=1:8
D(i,i)=A(i,i);
I(i,i)=1;
end
B=I-D^(-1)*A; // Jacobi iterator Matrix von A
p=spec(B)     //groesste Eigenwert von B zu suchen.
// max(p') funktion nich ,    p ist ein Array,warum geht max(p) oder  nicht?
optimalw=2/(1+sqrt(1-0.9640934^2)) //man soll  groesste Zahl von p bei manuelle bestimmen. 

disp('Richardson Verfahren nach 50 Iteration')
 seta=2/(50.987401+511.89691)
 x=[0 0 0 0 0 0 0 0] ;
 x=x'
  for i=1:50
   x=x-seta*(A*x-b');
  end
disp(x)  

disp('Gradientenverfahren nach 50 Iteration')
   x=[0 0 0 0 0 0 0 0] ;
   r=b;
   for i=1:50
      rr=(A*r')';
      oben=0;
      unten=0;
      for j=1:8
         oben=oben+r(j)*r(j);
         unten=unten+rr(j)*r(j);
      end
      labuda=oben/unten;
      x=x+labuda*r;
      r=r-labuda*rr;
    end
disp(x)  
    
endfunction

