% Berechne die durch 8 Relais auswaehlbaren Widerstandswerte 
% Dies ist Datei r2r8.m

%  r   1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16  
m = [ -1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; %m1 \ 
       0,-1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; %m2 \
       0, 0, 0,-1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; \
       0, 0, 0, 0, 0,-1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0 ; \
       0, 0, 0, 0, 0, 0, 0,-1, 1, 1, 0, 0, 0, 0, 0, 0 ; \
       0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 1, 1, 0, 0, 0, 0 ; \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 1, 1, 0, 0 ; \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,-1, 1, 1 ]; \
k = [ -1,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; % Knoten k1 \
       0, 0, 1,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; % Knoten k2 \
       0, 0, 0, 0, 1,-1,-1, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; % Knoten k3 \
       0, 0, 0, 0, 0, 0, 1,-1,-1, 0, 0, 0, 0, 0, 0, 0 ; % Knoten k4 \
       0, 0, 0, 0, 0, 0, 0, 0, 1,-1,-1, 0, 0, 0, 0, 0 ; % Knoten k5 \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,-1,-1, 0, 0, 0 ; % Knoten k6 \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,-1,-1, 0 ; % Knoten k7 \
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,-1 ] ; % Knoten k8
e = [  1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ] ; % EMK = 1V, nur im r(1)

rg = [ 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1] ; % Startwerte r1...r16


n = 8 ;		%% Anzahl der Relais / Schalter
%gv = 3.3 ; rg = [ 0, gv, 1, gv, 1, gv, 1, gv, 1, gv+0.2 ] ;
%gv = 2.9 ;


for i=1:n
	rg(i*2) = 2;
	rg(i*2-1) = 1;
endfor


% so 
gv = [ 1, -0.044, 0.0016, 0.310, -0.020, -0.0001 ];
printf("%6.3f %6.3f %7.4f %6.3f %6.3f %7.4f  ", gv(1), gv(2), gv(3), gv(4), gv(5), gv(6));
for i=1:n
	rg(i*2) = gv(1) + (i-4)*gv(2) + (i-4)*(i-4)*gv(3) ;
	rg(i*2-1) = gv(4) + (i-4)*gv(5) + (i-4)*(i-4)*gv(6) ;
endfor



xi= 0:2^n-1 ;
yi=linspace(0,0,2^n) ;
%yr=linspace(0,0,32)

% printf("code,I,R\n")
for s = 0 : 2^n-1
	r = rg ;
	% printf("******** code s=%d\n", s )
	s1 = s ; % Schalterstellung: s1 wird bitweise abgefragt
	for i = 0:n-1	% Durch alle Schalter-Bits
		j = n-1-i ;
		if s1 >= 2^j % MSB-Schalter ist ein, bit n-1 bis bit 0
			r(2+2*i) = 2E10 ; % SChaltet ist aus: unendlich grosser widerstand
			s1 = s1 - 2^j ; 
		endif
	endfor
	% Berechne alle Stroeme des elektrishen Netzwerkes aus r (Widerstaende), m (Maschen), k (Knoten)
	elnetz % Rufe das Programm von HJHerbert: elnetz.m
	yi(s+1)=i(1);	% Merke nur den Strom durch e(1) r(1), das ist i(1)
	%wr = 1/i(1);
	%if wr < 10
	%	yr(s+1)=i(1);
	%endif

%	printf("%d,%12.4f,%12.4f\n", s, i(1), 1/i(1) )

endfor

[syi, si] = sort(yi) ;
dmax = 0 ;
for i=8:2^n-1
% Lasse den niedrigsten Wert unbeachtet. Da ist der Strom = 0
	d = syi(i+1)-syi(i);
	di(i)=d;
	ri(i-1)=1/syi(i);
	xir(i-1)=i-1;
	if d > dmax
		dmax = d;
	endif
endfor
dmax
% plot ( xi, syi, "b-", xi, yi, "r-", xir, ri, "0-" )
plot ( xi, syi, "b+", xi, yi, "r+" )

%Ergebnisse
% di % Leitwert-Differenzen
% ri % Die Liste aller einstellbaren Widerstandswerte
% si % Die Code-Reihenfolge anzeigen
% yi % Die Liste aller Leitwerte
% syi % Die sortierte Liste aller Leitwerte
% ri % Die Liste aller einstellbaren Widerstandswerte
%plot ( xi, yr, "r-" )
