function [d,V]=howard1(P1,R1,P2,R2)

% HOWARDOVA ITERACNI METODA PRO URCENI STRATEGII

%  [D,V]=howard1(P1,R1,P2,R2)

%

% vstup: P1,P2 = matice prechodu

%        R1,R2 = odpovidajici matice vynosu

% vystup: D = matice, jejiz sloupce tvori vektory strategii pro jednotlive kroky

%             (radky odpovidaji jednotlivym stavum)

%         V = matice relativnich vah strednich hodnot celkovych vynosu



% (c) Ondrej Petrik, 13.12.2007



 [m1,n1]=size(P1);

 [m2,n2]=size(P2);

 [r1,s1]=size(R1);

 [r2,s2]=size(R2);



if (m1==r1 && m2==r2 && n1==s1 && n2==s2 && m1==m2)     % kontrola vstupnich hodnot



% inicializace

 q1=sum((P1.*R1)')';

 q2=sum((P2.*R2)')';

 v=zeros(n1,1);

 iterace=0;

 d1=[-1;-1];

 d2=[0;0];



 while (sum(d1==d2) ~= length(d1==d2))

  iterace=iterace+1;

  K=[(q1+P1*v)'; (q2+P2*v)'];

  [maxi,ind]=max(K);

  d(:,iterace)=ind';



% sestaveni matice podle vektoru strategii

  if (d(1,iterace)==1)

   P(1,:)=P1(1,:); q(1,1)=q1(1,1);

  else 

   P(1,:)=P2(1,:); q(1,1)=q2(1,1);

  end;



  if (d(2,iterace)==1)

   P(2,:)=P1(2,:); q(2,1)=q1(2,1);

  else 

   P(2,:)=P2(2,:); q(2,1)=q2(2,1);

  end;



% vypocet neznamych g,vi

  P=P-eye(m1,n1);

  P(:,end)=-ones(m1,1);

  v=inv(P)*(-q);



%  g=v(end)   % nepotrebujeme

  v(end)=0;

  V(:,iterace)=v;

  d1=d2;

  d2=d(:,iterace);



 end; %while



else disp('Vsechny matice musi byt ctvercove a stejnych rozmeru!')

end; % if

