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
Mám nádrž s teplou vodou, která se chladí dvěma cestami současně - chladičem a přirozeně svým povrchem.
Naměřené hodnoty teploty v čase bych chtěl proložit křivkou danou funkcí
[mathjax]T = T_0 + A e^{-\alpha t} + B e^{-\beta t}[/mathjax]
kde [mathjax]t[/mathjax] je čas, [mathjax]T[/mathjax] teplota a [mathjax]T_0[/mathjax], [mathjax]A[/mathjax], [mathjax]\alpha[/mathjax], [mathjax]B[/mathjax], [mathjax]\beta[/mathjax] jsou hledané parametry funkce. Slibuju si od toho, že najdu časové konstanty obou chladičů a budu moci predikovat další průběh teploty v čase.
Už jsem si ověřil, že řešení lze jednoznačně nalézt metodou Monte Carlo, ale abych dosáhl přijatelné přesnosti, potřebuju udělat tak miliardu pokusů, což trvá hodiny a to je moc dlouho.
Napadlo mě zkusit gradientní metodu. Vymyslím nějaký počáteční odhad, zkusím všechny parametry postupně trochu změnit a tu změnu, která vede ke zmenšení součtu čtverců odchylek funkce od naměřených dat použiju pro další iteraci. Tahle metoda konverguje celkem rychle, ale bohužel většinou k nesprávnému výsledku :-) Vypadá to, jako kdybych při výpočtu uvíznul v nějakém lokálním minimu nebo stacionárním bodě, ale tady bohužel moje znalosti končí a neumím zjistit, jestli tam nějaké lokální minimum je, nebo jestli je ta metoda tak nestabilní, nebo jestli tam mám prostě programátorskou chybu. Velmi pravděpodobně řeším už vyřešené a stačilo by to někde najít, ale ani s tím jsem neměl úspěch. Prosím o nějaké navedení nebo zmínku co bych asi tak mohl dělat blbě. Případně jestli ta celá úvaha není úplně blbě a vycházelo mi to jen náhodou. Díky.
Offline
↑ Aleš13:
Takze jestli to chapu dobre, ty mas nejaka namerena data [mathjax] [t_i,T_i], i=1,2,\dots,n, [/mathjax] a ty koeficienty [mathjax] T_0,A,\alpha,B,\beta [/mathjax] nahodne tipujes tak, aby napr. [mathjax] \max\left|T_0 + A e^{-\alpha t_i} + B e^{-\beta t_i}-T_i\right|[/mathjax] bylo co mozna nejmensi? Taky mi neni prilis jasne, co znamena spojeni "řešení lze jednoznačně nalézt metodou Monte Carlo" ?
Offline
Přesně tak, náhodně to zkouším, jenom jako kritérium jsem použil součet čtverců odchylek, ale to asi není podstatné.
Že lze nalézt řešení "jednoznačně" je pouze můj dojem vyšlý z experimentů, žádný lepší důkaz na to nemám. Chtěl jsem tím říct jenom, že metodou Monte Carlo řešení najdu a gradientní metodou ne.
Offline
↑ Aleš13:
skusal si simulovane zihanie alebo nieco podobne - v pythone je podobna metoda implementovana ako
Basin hopping
dalo by sa povedat ze taketo metody su "typu monte carlo" ale mali by konvergovat rychlo
ja mam skor problem s modelom, mas za nim aj nejaku fyziku?
Offline
Simulované žíhání jsem nezkoušel, dík za připomenutí, hraju si s tím a dívám se i na ten basin hopping.
Co se týká modelu, nějak moc fyzikální teorie za tím taky nestojí. Spíš je to tak, že jsem zkoušel aproximaci exponenciálou a vyšlo mi to "divně". Exponenciála ve tvaru [mathjax]T_0 + Ae^{-\alpha t}[/mathjax] třikrát protíná křivku naměřených hodnot, což se mi zdálo divné. Pro ilustraci to vypadá asi takhle (ve WolframAlpha)
plot 24+35 e^(-0.019 t)+21.5 e^(-0.076 t) plot 26.8+50.6 e^(-0.031 t) from 0 to 150
Proto jsem zkusil ten tvar aproximační funkce [mathjax]T_0 + Ae^{-\alpha t}+ Be^{-\beta t}[/mathjax] a naměřená data a aproximace se mi na grafu prakticky překryly (až na šum), suma čtverců odchylek (pro [mathjax]t_i, i = 0,1,2,...,150[/mathjax]) byla menší než 10, tak mi přišlo, že jsem našel co hledám a dál to moc neřešil. Ale jestli je nějaké správnější vysvětlení toho co jsem naměřil, bylo by to skvělé.
Offline
Díky, jenže já bohužel s diferenciálními rovnicemi moc neumím. Ani si teď nedovedu představit jak popsat ten fyzikální děj diferenciální rovnicí, resp. jaká je mezi tím vazba. Ale dík za naznačení směru, podívám se na to a třeba si vzpomenu :-)
Offline
Pokud se to chladí vedením i chladičem do stejné okolní teploty, neměly by to být dvě časové konstanty, protože tepelný tok je obou případech úměrný rozdílu teplot (který je stejný). Aspoň teda v prvním přiblížení...takže bych zkusil nejprve aproximaci systémem prvního řádu, tedy
[mathjax]\Delta T=\Delta T_0(1-e^{-\alpha t})[/mathjax]
Ty "delty" jsou rozdíly od okolní teploty (oteplení). A časovou konstantu odhadneš pro začátek tak, že zjistíš, kdy kleslo oteplení na poloviční hodnotu.
Taky můžeš teda použít nějakou tu interpolaci, a v tomhle případě dokonce lineární, protože když rovnici upravíš na tvar
[mathjax]1-\frac{\Delta T}{\Delta T_0}=e^{-\alpha t}[/mathjax]
a pak zlogaritmuješ, tedy
[mathjax]\ln(1-\frac{\Delta T}{\Delta T_0})={-\alpha t}[/mathjax]
tak máš (vzhledem k "alfa") lineární rovnici. Ta se interpoluje snadno, je na to vztah.
Offline
A jinak bych doporučoval si chladič vypnout a změřit si chladnutí samostatně ... a pak už budeš řešit jen ten chladič...dále je možné, že to nějak závisí na proudění okolního vzduchu v závislosti na teplotě - a pak to nebude lineární, a zvyšování řádu ti nepomůže.
Pokud ti to zchladne na polovinu z teploty T1 za jiný čas než z teploty T2, tak to lineární není ...
Zvyšování řádu znamená, že se prodlužuje doba, než to začne chladnout...což podle mě není ten případ. Dávalo by to smysl, když by voda byla v nějaké tlustostěné nádobě, jejíž tepelná kapacita by se na tom projevovala taky. Ale pokud je jediná (nebo převažující) tepelná kapacita ta voda, měl by to být první řád (ať už lineární nebo nelineární). Chladič přece nepotřebuje nějakou dodatečnou dobu na to, aby začal chladit...
Offline
Díky, s tou tepelnou kapacitou mě to nenapadlo, při tom ji asi nebudu moct úplně zanedbat. Já jsem původně myslel, že to bude jasná exponenciála a že není co řešit, ale zarazil mě tam ten "hrbolatý" průběh a hledal jsem, kde se tam bere ta nelinearita. K té rovnici jsem se dostal zkusmo a teď vidím, že jsem si ji vysvětloval špatně :-)
Zkusím to udělat jak píšeš nahoře, díky.
Offline
Jinak jsem mezitím pokročil s tím simulovaným žíháním (díky za navedení), zkusil jsem úplně jednoduché provedení a výpočet se zrychlil řádově. Plus jsem to ještě rozložil na víc jader procesoru současně a to je další řád k dobru :-) Takže teď už to začalo být spočítatelné v reálném čase, což by z praktického hlediska stačilo, ale samozřejmě mnohem raději bych pochopil proč se ten systém chová zrovna takhle, tak se teď vrhnu na tu další matiku :-)
Offline
↑ Brano:, ↑ MichalAld: máte pravdu, ten fyzikální model jsem neměl úplně chytře vymyšlený. Začínám chápat, že za tu ne úplně přesnou exponenciálu opravdu může tepelná kapacita v sérii, ne paralelní chlazení povrchem a chladičem. A v simulaci mi to taky vychází.
Offline
↑ Aleš13:
Ahoj, zatiaľ do tvojej pozornosti aj túto Strejcovu metódu
identifikácie sústav.
https://adoc.pub/queue/automatizace-ulo … trejc.html
Offline
Jo jo, taky jsme to tak dělali...akorát tenkrát ještě na milimetrovém papíře s pravítkem v ruce. A řekl bych, že je to snad i jednodušší (najít ten inflexní bod a určit směrnici tečny), a výsledek je stejně dobrý.
Nejlépe se model získává z frekvenční charakteristiky, ale u topných soustav je to docela těžké ji změřit, protože to trvá hrozně dlouho. Třeba u motorů to jde hezky...
Ale nezapomeň, že ta zmíněná metoda potřebuje, aby jsi změřil odezvu na jednotkový skok ... nemusí být nutně kladný, může být i směrem dolů ... ale důležité je, aby mu předcházel zcela ustálený stav (na nějaké teplotě). Aby se ti tam projevil ten náběh přechodového děje...
Offline
Pokud má ten přechodový děj ten náběh - že to nějaký čas trvá, než ta teplota začne narůstat, tak tam musí být minimálně dvojitá exponenciála. Z jednoduché tohle nedostaneš, jednoduchá exponenciála má největší strmost (nejrychlejší nárust) hned na počátku.
Ještě mi vysvětli, jak jsi dokázal skokově změnit teplotu vody, když - jak říkáš, jsi začínal z ustáleného stavu...
Offline
On to není nárůst teploty, ale pokles různou rychlostí, ta modrá křivka (červeně je pro srovnání aproximace jednoduchou exponenciálou)
https://www.wolframalpha.com/input?i=pl … m+0+to+150
Z ustáleného stavu to vyvedu tak, že odstraním tepelnou izolaci + současně zapnu čerpadlo chladiče. Ale zrovna dneska jsem si vyzkoušel, že ten chladič má vliv jen na rychlost chladnutí, ale když ho nepoužiju (viz tvé doporučení výše), tak to pořád chladne po té "dvojité" exponenciále, takže o tom chladiči jako bych nic neříkal :-) to byla jen moje blbá interpretace. Asi to budou ty tepelné kapacity v sérii.
Offline
Aleš13 napsal(a):
Asi to budou ty tepelné kapacity v sérii.
Nebudou. To by se tam objevil ten náběh. Ale ty na křivkách žádný náběh nemáš...
Důvodem je spíš, že tvůj systém není lineární ... že rychlost chladnutí neklesá s teplotou lineárně, ale rychleji. To při chlazení vzduchem celkem běžně nastává ... protože se kolem vytváří proudění vzduchu. A rychlost tohoto proudění závisí na teplotním rozdílu také. Ovšem komplikovaným způsobem, který neumíme jednoduš předpovídat, a lepší je to změřit.
Nevím ovšem, jakou funkcí to aproximovat, lepší by bylo hledat spíš vhodnou diferenciální rovnici.
[mathjax]y' + f(y) = 0[/mathjax]
Pokud je f(y) = k*y, bude to ta exponenciála. Já bych zkusil nějakou mocninnou závislost, [mathjax]f(y) = ky^n[/mathjax], kde n nemusí být nutně celé číslo, a bude někde v rozsahu 1...4. Možná to jde i vyřešit analyticky,
Offline
Hm, v diferenciálních rovnicích si pořád nejsem moc jistý, ale vydoloval jsem stará skripta a trošku jsem si zavzpomínal :-) tak se do toho vrhnu takhle, třeba se zadaří, díky. Zatím jsem předpokládal, že to nemůže být nic jiného než exponenciála, na nelinearitu způsobenou prouděním vzduchu jsem nepomyslel, resp. jsem ji úplně zanedbával.
Offline
Stránky: 1