function [cur,M,V] = kirchgensol(hmat,vmat)
% KIRCHGENSOL [cur,M,V] = kirchgensol(hmat,vmat)
% Kirchhoff-Loesung in einem Rechteckschema 
%   mit nhor x nvert quadratischen Maschen.
% hmat(nver+1,nhor) Widerstaende der horizontalen Linien
% vmat(nvert,nhor+1) Widerstaende der vertikalen Linien
[nhl,nhi] = size(hmat)
[nvi,nvl] = size(vmat)
if  nvl ~= nhi+1 | nhl ~= nvi+1
  disp('sorry')
else
% Zeilennummer = Knotennummer, dann Maschennummer
% Spaltennummer = Widerstandsnummer Zeilenweise aus hmat, vmat
% Abfolge:  alle hoizontalen, dann alle vert., dann i0
  nk = nvl*nhl-1;
  nh = nhi*nhl;
  nv = nvl*nvi;
  ndim = nh+nv +1;
  M = zeros(ndim);
  V = zeros(nhl,nvl);
  % Knoten-Schleife
  % 1. Zeile
  % 1. Knoten lru
  M(1,ndim) = 1; M(1,1) = -1; M(1,nh+1) = -1;
  % 1. Zeile, Mittelteil lru
  for kh = 2:(nvl-1)
    M(kh,kh-1) = 1; M(kh,kh) = -1; M(kh,nh+kh) = -1;
  end
  % 1. Zeile, Endknoten  lu
  M(nvl,nvl-1) = 1;  M(nvl,nh+nvl) = -1;
%
% Mittlere Knoten-Zeilengruppe
  for zei = 2:nhl-1
    kbas = (zei-1)*nvl;
    hbas = (zei-1)*nhi;
    % vorderster Knoten ou r 
    M(kbas+1,nh+kbas-nvl+1) = 1;   M(kbas+1,nh+kbas+1) = -1;  
    M(kbas+1,hbas+1) = -1;
    % mittlere Zeilen, Mittelteil ou lr
    for kh = 2:(nvl-1)
      M(kbas+kh,kbas-nvl+nh+kh) = 1;  M(kbas+kh,kbas+kh+nh) = -1;
      M(kbas+kh,hbas+kh-1) = 1; M(kbas+kh,hbas+kh) = -1;
    end
    % Mittlere Zeilen, Endknoten l ou
      M(kbas+nvl,hbas+nvl-1) = 1;
      M(kbas+nvl,kbas+nh) = 1;   M(kbas+nvl,kbas+nvl+nh) = -1; 
  end
%
% unterste Zeile
    kbas = (nhl-1)*nvl;
    hbas = (nhl-1)*nhi;
    % vorderster Knoten o r 
    M(kbas+1,nh+kbas-nvl+1) = 1;  
    M(kbas+1,hbas+1) = -1;
    % unterste Zeilen, Mittelteil o lr
    for kh = 2:(nvl-1)
      M(kbas+kh,kbas-nvl+nh+kh) = 1; 
      M(kbas+kh,hbas+kh-1) = 1; M(kbas+kh,hbas+kh) = -1;
    end
    % unterste Zeilen, Endknoten faellt weg
%Maschengleichungen
  ngl = nk;
  for mz = 1:nvi
    for ms = 1:nhi
      ngl = ngl  + 1;
      M(ngl,(mz-1)*nhi+ms) = hmat(mz,ms);
      M(ngl,(mz)*nhi+ms) = -hmat(mz+1,ms);
      M(ngl,nh+(mz-1)*nvl+ms) = -vmat(mz,ms);
      M(ngl,nh+(mz-1)*nvl+ms+1) = vmat(mz,ms+1);
    end
  end
% Schlussgleichung
  for k=1:nhi
     M(ndim,k) = hmat(1,k);
  end
  for k=1:nvi
     M(ndim,nh+k*nvl) = vmat(k,nvl);
  end
  b=zeros(ndim,1);
  b(ndim) = 1;
%  cur = 0
  cur=M\b;
%
    for spa = 2:nvl
      V(1,spa) = V(1,spa-1) + cur(spa-1)*hmat(spa-1,1) ;
    end
%  
  for zei = 2:nhl
    V(zei,1) = V(zei-1,1) + cur(nh+(zei-2)*nvl+1)*vmat(zei-1,1); 
    for spa = 2:nvl
      V(zei,spa) = V(zei,spa-1) + cur((zei-1)*nhi+spa-1)*hmat(zei,spa-1)  
    end
  end
end % end if
