Nie wiem, jak u Was, ale u mnie to czêsty problem. Mam jakies elementy w szufladzie i trzeba zrobiæ z nich dzielnik na jakie¶ napiêcie albo rezystor o pewnej warto¶ci.
W koñcu siê wkurzy³em i zrobi³em skrypt do matlaba/octave do liczenia dzielnika rezystancyjnego z dwoma równoleg³ymi rezystorami w obu ga³êziach, czy razem na czterech rezystorach.
Pyskaczom mówi±cym ¿e stosuj±c rezystory 5 % to b³±d bêdzie ho-ho odpowiadam, ¿e to tylko do prototypów i nag³ych spraw, potem montujê oczywi¶cie najwy¿szej klasy precyzyjne rezystory ;-)
Skryptowi podaje mu siê jakie mamy elementy i ile ma byæ, a w wyniku mamy posortowane wzglêdem b³êdu warianty:
Podzia³ B³±d[%] Górna ga³±¼ Dolna ga³±¿
0.2976 0.2 4.70 inf 470.00 2.00
0.2981 0.4 4.70 4.70 470.00 1.00
0.2985 0.5 4.70 4.70 1.00 inf
0.2985 0.5 4.70 4.70 2.00 2.00
0.2985 0.5 4.70 inf 2.00 inf
Oto skrypt:
wartosci=[ 470 1 2 4.7 inf]; % warto¶ci, którymi dysponujemy zadany=0.297; % ¿±dany stopieñ podzia³u tol=5; % tolerancja w procentach, gorsze wyniki nie s± % wy¶wietlane
% koniec zmiennych pocz±tkowych
podz=[0 0 0 0 0 0]; ilel=length(wartosci); for x=1:ilel for y=x:ilel % jedziemy po pierwszej ga³êzi i=wartosci(x); j=wartosci(y); % je¿eli obie warto¶ci to nieskoñczono¶æ - kicha if ((i==inf) & (j == inf)) continue;end
for v=1:ilel for z=v:ilel
k=wartosci(v); l=wartosci(z);
if ((k==inf) & (l == inf)) continue;end gora=1/(1/i+1/j); dol=1/(1/k+1/l); wyn=dol/(gora+dol); blad=abs((wyn-zadany)/zadany*100); if (blad<tol) podz=[podz; wyn blad i j k l]; end end end end end % kasujemy pierwszy wiersz, bo to same zera podz=podz(2:length(podz),:); % sortujemy [a,i]=sort(podz); %bierzemy indeksy sortowania b³êdów i=i(:,2);
printf(' Podzia³ B³±d[%%] Górna ga³±¼ Dolna ga³±¿\n'); for a=i' printf('%8.4f %5.1f %8.2f %8.2f %8.2f %8.2f\n',podz(a,1),podz(a,2),podz(a,3),podz(a,4),podz(a,5),podz(a,6)); end