Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1 2
Zdravím,
Mám spousty odporů 1000 Ohmů.
Odpory mohu řadit seriově nebo paralelně dle libosti.
Napadá vás jakou zvolit serio-paralelní kombinaci abych se dostal k celkovému odporu 420 Ohmů?
Já se zmohl k tupému ťukání do kalkulačky a doufal, že najdu nějakej vzor...
[mathjax]R_{ser}=R_{1}+R_{2}+...+R_{n}[/mathjax]
[mathjax]\frac{1}{R_{par}}=\frac{1}{R_{1}}+\frac{1}{R_{2}}+...+\frac{1}{R_{n}}[/mathjax]
Je to takovej dětinskej inside joke pro testování osazovačky a pece na pájení SMD komponent :)
Offline
S použitím 26 odporů takto:
Par(Par(Par(21000, 3000), 1000), 1000) = 420 Ω
Možná to jde i s menším množstvím ...
Offline
Pokud potřebujeme trefit nějakou přesnou hodnotu (tj. řešit to v celých číslech), tak to vypadá jako NP problém - tj jediná možnost je zkoušet všechny varianty. Nevím, jestli to tak je, ale moc si nedokážu představit algoritmus, který by mě k cíli dovedl.
Pokud by stačilo hodnoty dosáhnout přibližně, tak na to možná postup existovat bude. Nějaký iterační. Protože přidáním jednoho odporu v nějaké složité síti se odpor změní jen málo ... a čím větší síť, tím se změní méně. Čímž lze dosáhnout libovolné přesnosti.
Jedna z možností, co mě napadá a nepřijde mi zas až tak náročná na odpory je vyrobit si z nich dvojkovou řadu. Tj zapojíme 2 paralelně, čímž získáme polovinu původní hodnoty, pak 4 paralelně, čímž získáme čtvrtinu, pak 8 - čímž získáme osminu...
A každé číslo (menší než jedna) můžeme libovolně přesně poskládat jako součet řady
1/2 + 1/4 + 1/8 + 1/16 + 1/32 + ...
samozřejmě s tím, že vhodné členy vynecháme. Které? No, stačí naše číslo v desítkové soustavě převést do dvojkové, a kde budou nuly, tam člen vynecháme. Ale je to jen přibližné, řada má obecně nekonečný počet prvků.
Offline
Ondry napsal(a):
↑ mák: Díky. Můžu se zeptat jak jste na takový kombo přišel?
No, na to je takový ten univerzální matematický postup - uhádnout správné řešení a pak ověřit, že je správné. Pro NP problémy je to dokonce jediný možný postup - ale já netvrdím, že tohle je nutně NP problém.
Offline
Nejbližší hodnota je 500 Ω, která lze získat paralelním spojením dvou odporů (to je jasné).
Teď si spočítám jak velký odpor musím paralelně připojit k němu abych získal 420 Ω.
[mathjax]420={{X\,500}\over{X+500}}[/mathjax]
Vyjde hodnota 2625 Ω.
A obdobně zjistím kolik odporů musím paralelně spojit, abych získal tuto hodnotu (výsledek celá hodnota pro 3 odpory - tedy 3000 Ω):
[mathjax]2625={{X\,3000}\over{X+3000}}[/mathjax]
X=21000
A je to...
Offline
Optimální počet by šel zjistit napsáním nějakého programu.
Offline
Mně to vyšlo s 9 odpory. Když pro paralelní spojení odporů použiju operátor A|B = 1/(1/A+1/B) tak pro R=1000 vyjde
(((((((R+R)|R)+R)|R)+R)+R)|R)|R=420
Řeším to programem, hrubou silou. Procházím rekurzivně strom (do maximální hloubky vnoření 10).
Kořen stromu má parametry (R1=1000,R2=1000) a jeho čtyři větve (R1+R2,R1), (R1+R2,R2),
(R1|R2,R1), (R1|R2,R2) a vypisuji všechna vyhovující řešení. Pak vyberu to nejkratší (čímž zároveň získám důkaz, že lepší řešení neexistuje).
Pro hloubku vnoření 10 trvá výpočet na běžném PC tak 10 vteřin,
kdybych to trochu optimalizoval tak odhaduji, že se odstanu na 1 s a tím pádem na
rozumně řešitelné úlohy s hloubkou vnoření řekněme tak do 15.
Offline
Šlo by to i graficky:
420 Ω jde rozložit na 21 * 20 Ω.
Odpor 20 Ω jde udělat paralelním spojením padesáti odporů o hodnotě 1000 Ω.
Takže máme sério-paralelní sít 50*21 odporů.
Využijeme toho, že 2x2 odpory dají opět hodnotu 1000 Ω.
Obdobně 3x3, 4x4 atd...
Na obrázku jsem zvýraznil čtverce které jdou zjednodušit na jeden odpor.
Žlutý čtverec má tedy hodnotu 1000 Ω. Obdobně růžový. Oba paralelním spojením vytvoří hodnotu 500 Ω.
Zbývající část je tvořena seriovým zapojením dvou odporů [světle zelená] a [bledě modrá] a paralelní kombinací [oranžové] atd...
Celkově tedy:
Par(Par(1000,1000),1000+1000+Par(1000,1000+Par(1000,1000+1000))) = 420 Ω
Barevně:
Par(Par(žlutý,růžový),zelený+modrý+Par(oranžový,khaki+Par(fialový,bílý+bílý))) = 420 Ω
Je to pouze 9 odporů (Aleš se k tomu dostal jinou cestou).
Myslím, že je to snadno pochopitelné.
Offline
↑ Aleš13:
Upřímně nemám tušení o čem mluvíte :D ale když to nadlubu do kalkulačky tak mi vyjde požadovaných 420R, takže díky moc! 9 odporů je příjemnější než 26, páč pro mě bude rychlejší programování robota :)
Offline
↑ Ondry: nz :-) myslel jsem to takhle:
program odporova_sit; procedure kombinace (r1, r2 : double; vnoreni : integer; k1,k2 : string); var paralelne : double; seriove : double; begin seriove:=r1+r2; if abs(seriove-420)<0.00000001 then writeln(k1+'+'+k2); if vnoreni>0 then begin kombinace(seriove,r1,vnoreni-1,'('+k1+'+'+k2+')',k1); kombinace(seriove,r2,vnoreni-1,'('+k1+'+'+k2+')',k2); end; paralelne:=1/(1/r1+1/r2); if abs(paralelne-420)<0.00000001 then writeln(k1+'|'+k2); if vnoreni>0 then begin kombinace(paralelne,r1,vnoreni-1,'('+k1+'|'+k2+')',k1); kombinace(paralelne,r2,vnoreni-1,'('+k1+'|'+k2+')',k2); end; end; begin kombinace(1000,1000,10,'R','R'); end.
Offline
Zdravím,
udělal jsem program pro LibreOffice (Calc) - vyžaduje však funkčnost maker.
Výpočet je velmi rychlý pro běžné hodnoty (pod sekundu).
Odkaz ke stažení
Samotné makro by po překopírování mělo být funkční i v excelu.
Hloubka vnoření je omezena na maximálně 20 (kombinace 20 odporů), ale jde změnit.
Odkazovaný soubor byl vadný, opravil jsem jej
Offline
↑ Aleš13:
Ahoj,
akorát mi není jasné, zda ten program projde všechny možné kombinace. Např. dvě paralelní zapojení, které jsou za sebou v sérii.
Offline
Zrovna tohle projde (lze dokázat odstraněním podmínky zobrazení a vyhledáním ve výpisu). Podle mě by měl projít všechno, protože čtyři podstromy jsou založené na všech čtyřech kombinacích, ale obecný důkaz správnosti nemám, ani jsem se o něj vlastně nepokoušel.
Offline
Mně to vychází (možná je to stejné jako u kolegů):
P(S(1000,P(1000,1000)),P(1000,S(1000,P(S(1000,1000),P(1000,1000)))))
P je paralelní zapojení, S seriové, argumenty jsou velikosti odporů v daném zapojení, případně rekurzivně další zapojení.
V podstatě jde o palelelní zapojení 3 odporů s hodnotami 1500, 1000 a 1400.
Pak mi vyšla ještě další zapojení s 9 odpory, ale možná jsou ekvivaletní, to jsem nezjišťoval.
Offline
Aleš13 napsal(a):
Zrovna tohle projde (lze dokázat odstraněním podmínky zobrazení a vyhledáním ve výpisu).
Jakými kroky to tedy získám? Začnu s 1000,1000 a co potom? Kterou větví výpočtu se dám?
Ten algoritmus tedy pracuje odspoda, že jakoby nabaluje na ten obvod stále víc odporů?
Co vlastně vyjadřuje ta dvojice r1,r2?
Mně totiž připadá, že nebude umět zkonstruovat např. dva nějaké hodně složité obvody zapojené k sobě, ale možná se pletu.
Offline
r1,r2 jsou odpory které zkusmo spojím sériově a pak paralelně. Nejdřív se podívám, zda jsem tím nedosáhl požadovaného výsledku, pak znovu volám tutéž funkci, vždy pro každé spojení r1,r2 dvakrát, poprvé s r1 a podruhé s r2 jako druhým argumentem. Souběžně totéž, ale symbolicky, dělám s řetězci k1,k2 aby bylo co vypisovat. Takže ano, postupně to na sebe nabaluje další odpory, ale na ty hodně složité obvody to není, algoritmus má exponenciální složitost a trvalo by to věčnost.
Offline
Mě vyšlo 16 správných unikátních kombinací:
Par(1000,Par(1000,Par(1000,Par(1000,2000)+1000)+2000))
Par(1000,Par(1000,Par(1000,Par(2000,1000)+1000)+2000))
Par(1000,Par(1000,Par(Par(1000,2000)+1000,1000)+2000))
Par(1000,Par(1000,Par(Par(2000,1000)+1000,1000)+2000))
Par(1000,Par(Par(1000,Par(1000,2000)+1000)+2000,1000))
Par(1000,Par(Par(1000,Par(2000,1000)+1000)+2000,1000))
Par(1000,Par(Par(Par(1000,2000)+1000,1000)+2000,1000))
Par(1000,Par(Par(Par(2000,1000)+1000,1000)+2000,1000))
Par(Par(1000,Par(1000,Par(1000,2000)+1000)+2000),1000)
Par(Par(1000,Par(1000,Par(2000,1000)+1000)+2000),1000)
Par(Par(1000,Par(Par(1000,2000)+1000,1000)+2000),1000)
Par(Par(1000,Par(Par(2000,1000)+1000,1000)+2000),1000)
Par(Par(Par(1000,Par(1000,2000)+1000)+2000,1000),1000)
Par(Par(Par(1000,Par(2000,1000)+1000)+2000,1000),1000)
Par(Par(Par(Par(1000,2000)+1000,1000)+2000,1000),1000)
Par(Par(Par(Par(2000,1000)+1000,1000)+2000,1000),1000)
Offline
Pro zajímavost, tady jsem vypočítal, kolik je potřeba odporů o hodnotě 1000 Ω k sestavení obvodu o hodnotě 1 až 1000 Ω. Je tam tedy 1000 hodnot.
Offline
↑ Aleš13:
Mně šlo spíš o to, zda tak vygeneruje v principu všechny obvody.
Kromě toho že stále nevidím jak se vygenerují dva paralelně zapojené odpory a dvě kopie téhož za sebou v serii, tak třeba ani nevidím obecně n paralelně zapojených odporů a v sérii za tím m paralelně zapojených odporů.
Tedy S(P(1000,1000),P(1000,1000)).
Zkusil jsem si ten program pustit a nevygeneroval mi to....
Takže např. podle mě ti to nenajde pomocí odporů 10 a 40 obvod s odporem 16 pomocí 4 odporů - paralelně 40 a 10 a to celé 2x (v serii).
Offline
↑ mák:
Nepřipomíná to nějakou známou křivku?
Offline
↑ check_drummer:Aha, tak na to se kouknu, dík.
Offline
Já pořád přemýšlím nad tím, jak vymyslet nějaký formální zápis, pomocí kterého by šly jednoduše zrealizovat všechny možné kombinace. Když budeme používat symboly + a | musíme k tomu použít i závorky. (R + R) | R je něco jiného než R + (R | R). A i když je snadné hodnotu spočítat (napsat na to parser), tak je podle mě dost těžké vyrobit všechny možné kombinace. Nějak jednoduše - což znamená dokázat je seřadit do řady, aby byla jistota, že jsme žádnou nevynechali. To jestli používáme operátory nebo funkce už na problému zas až tolik nemění.
Napadlo mě využít Polskou notaci, ta závorky nepotřebuje, a nakonec i parser se na to dá napsat snadněji. Polská notace je něco ve stylu R R | R + R R R + | | a bere se to (v tomhle případě) zleva, tedy
(((R R |) R +) (R (R R +) |) |). Přičemž výraz (R R +) je výsledek sériové kombinace těch R, (R R |) je výsledek té paralelní. Je to to samé jako volání funkcí.
Akorát že se to hezky parsuje, prostě bereme zleva symbol po symbolu, když je to číslo, tak ho vložme na zásobník, a když je to operace tak vezmeme dvě poslední hodnoty ze zásobníku, provedeme na nich tu operaci a výsledek vrátíme na zásobník. Nakonec nám na zásobníku zůstane jedna hodnota - výsledek. Pokud jich tam zůstane víc, nebo tam nejsou aslespoň dvě během procesu, tak je to syntaktická chyba.
Tenhle zápis nepotřebuje závorky, priorita je určená čistě jen pořadím operátorů a číslic. Akorát že né všechny posloupnosti jsou plané. A celkové množství kombinací je [mathjax]3^n[/mathjax], pokud tedy uvažujeme jen jednu hodnotu odporu. A z nich je určitě velká část kombinací neplatných.
Nemáte někdo nějaký nápad, jak udělat syntaktický zápis těchto sérioparalelních kombinací tak, aby těch neplatných možností bylo malé množství (ideálně žádné) ale zároveň aby šly jednoduše vyrobit všechny kombinace?
Offline
Stránky: 1 2