{"id":185,"date":"2022-01-11T19:30:06","date_gmt":"2022-01-11T18:30:06","guid":{"rendered":"http:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/?p=185"},"modified":"2022-02-06T15:39:13","modified_gmt":"2022-02-06T14:39:13","slug":"simulace-ode-v-pythonu","status":"publish","type":"post","link":"https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/2022\/01\/11\/simulace-ode-v-pythonu\/","title":{"rendered":"Simulace ODE v Pythonu"},"content":{"rendered":"\n<p>Dnes se pod\u00edv\u00e1me na problematiku simulace oby\u010dejn\u00e9 diferenci\u00e1ln\u00ed rovnice ODE v pythonu.  Budeme vyu\u017e\u00edvat modul scipy, kter\u00fd obsahuje mnoho algortim\u016f pro numerickou matematiku. Pro \u0159e\u0161en\u00ed dynamick\u00e9ho syst\u00e9m\u016f (ten je pops\u00e1n diferenci\u00e1ln\u00edmi rovnicemi) pou\u017eijeme numerickou metodu. Rozd\u00edl mezi numerick\u00fdm a analytick\u00e9m \u0159e\u0161en\u00edm je ten, \u017ee analytick\u00e9 \u0159e\u0161en\u00ed je zcela p\u0159esn\u00e9, ale lze takto vy\u0159e\u0161it jen omezenou sadu \u00faloh. Naopak numerika je velmi pou\u017e\u00edvan\u00e1 v in\u017een\u00fdrsk\u00e9 praxi. <\/p>\n\n\n\n<p>Jak vypad\u00e1 takov\u00e1 ODE?<\/p>\n\n\n\n<div class=\"wp-block-katex-display-block katex-eq\" data-katex-display=\"true\"><pre>\\large\\frac{dx}{dt}= ax <\/pre><\/div>\n\n\n\n<p>Tak nap\u0159\u00edklad v\u00fd\u0161e m\u00e1me ODE prvn\u00edho \u0159\u00e1du. Na lev\u00e9 stran\u011b m\u00e1me derivaci <em>x<\/em> podle \u010dasu.  Pro tuto jednoduchou ODE je zn\u00e1m\u00e9 analytick\u00e9 \u0159e\u0161en\u00ed. \u0158e\u0161en\u00edm ODE je funkce:<\/p>\n\n\n\n<div class=\"wp-block-katex-display-block katex-eq\" data-katex-display=\"true\"><pre>\\large x(t)= e^{at}x(0)<\/pre><\/div>\n\n\n\n<p>Take se m\u016f\u017eeme setkat s term\u00ednem &#8222;\u0159e\u0161en\u00ed po\u010d\u00e1te\u010dn\u00edho probl\u00e9mu&#8220;. M\u016fs\u00edme tedy zn\u00e1t po\u010d\u00e1te\u010dn\u00ed podm\u00ednku <em>x(0)<\/em>. <\/p>\n\n\n\n<p>My budeme \u0159e\u0161it rovnice numerickou metodou. K tomu vyu\u017eijeme modul scipy a funkci solve_ipv. V prv\u00e9 \u0159ad\u011b mus\u00edme nadefinovat funkci, kterou bude numerick\u00e1 metoda volat a z\u00edsk\u00e1vat tak \u0159e\u0161en\u00ed v ka\u017ed\u00e9m v\u00fdpa\u010detn\u00edm kroku. D\u00e1le interval na jak\u00e9m budeme \u0159e\u0161en\u00ed cht\u00edt nap\u0159. \u010das simulace. Bude pot\u0159eba zadata po\u010d\u00e1te\u010dn\u00ed podm\u00ednky.  Funkce solve_ipv tak\u00e9 nab\u00edz\u00ed n\u011bkolik numerick\u00fdch metod. Pro za\u010d\u00e1tek je nejvhodn\u011bj\u0161\u00ed volit RK45. Jedn\u00e1 se o metodu s adaptivn\u00edm krokem simulace. Velikost v\u00fdpo\u010detn\u00edho kroku upravuje dle odhadu chyby \u0159e\u0161en\u00ed. Konkr\u00e9tn\u011b se jedn\u00e1 o motedu z rodiny Runge\u2013Kutta\u2013Fehlberg, co\u017e je velmi dobr\u00e1 explicitn\u00ed metoda 4-5 \u0159\u00e1du. Pro n\u011bkter\u00e9 typy \u00faloh v\u0161ak vhodn\u00e1 nen\u00ed. jedn\u00e1 se zejm\u00e9na o tzv. stiff probl\u00e9my. <\/p>\n\n\n\n<p>Vy\u0159e\u0161\u00edme jednoduchou ODE1 (prvn\u00edho \u0159\u00e1du)<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" src=\"https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/01\/ODE_explination-1024x410.png\" alt=\"\" class=\"wp-image-238\" width=\"512\" height=\"205\" srcset=\"https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/01\/ODE_explination-1024x410.png 1024w, https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/01\/ODE_explination-300x120.png 300w, https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/01\/ODE_explination-150x60.png 150w, https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/01\/ODE_explination-768x308.png 768w, https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/01\/ODE_explination.png 1402w\" sizes=\"(max-width: 512px) 100vw, 512px\" \/><\/figure><\/div>\n\n\n\n<p><em>\u03c4<\/em> = 0.1 <br><em>k<\/em> = 10<br><em>u<\/em> &lt;0-0.1&gt; = 0 ; &lt;0.1-1&gt; = 1<\/p>\n\n\n\n<p>Vstupem tedy bude jednotkov\u00fd skok v \u010dase <em>0,1 s<\/em>.<\/p>\n\n\n\n<p>P\u0159\u00edklad \u0159e\u0161en\u00ed vykreslen v matplotlib:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"640\" height=\"480\" src=\"https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/01\/ODE1.png\" alt=\"\" class=\"wp-image-235\" srcset=\"https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/01\/ODE1.png 640w, https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/01\/ODE1-300x225.png 300w, https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/01\/ODE1-150x113.png 150w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/figure><\/div>\n\n\n\n<p>D\u00e1le vy\u0159e\u0161\u00edme rovnici, kter\u00e1 je asi nejpou\u017e\u00edvan\u011bj\u0161\u00ed ve \u0161koln\u00edm prost\u0159ed\u00ed. Jedn\u00e1 se o hmotu s pru\u017einou a tlumi\u010dem. Tento syst\u00e9m m\u00e1 i pom\u011brn\u011b dobr\u00e9 praktick\u00e9 vyu\u017eit\u00ed nap\u0159. nejednodu\u0161\u0161\u00ed model zav\u011b\u0161en\u00ed n\u00e1prav automobilu. <\/p>\n\n\n\n<div class=\"wp-block-image is-style-default\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"361\" height=\"210\" src=\"http:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/01\/spring_mass_picture-1.png\" alt=\"\" class=\"wp-image-229\" srcset=\"https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/01\/spring_mass_picture-1.png 361w, https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/01\/spring_mass_picture-1-300x175.png 300w, https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/01\/spring_mass_picture-1-150x87.png 150w\" sizes=\"(max-width: 361px) 100vw, 361px\" \/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-katex-display-block katex-eq\" data-katex-display=\"true\"><pre>\\large \\ddot{x}m+\\dot{x}b+ kx = F(t) <\/pre><\/div>\n\n\n\n<p>Setrva\u010dn\u00e1, tlum\u00edc\u00ed a potencion\u00e1ln\u00ed (s\u00edla pru\u017einy) je v tomto p\u0159\u00edpad\u011b rovna bud\u00edc\u00ed s\u00edle. Tentokr\u00e1t jsme pou\u017eili tzv. Newton\u016fv z\u00e1pis. Jedna te\u010dka nad <em>x<\/em> znam\u00e9n\u00e1 prvn\u00ed derivaci podle \u010dasu atd.<\/p>\n\n\n\n<p>P\u0159i prvn\u00edm pohledu zjist\u00edme, \u017ee se jedn\u00e1 o ODE druh\u00e9ho \u0159\u00e1du, co\u017e je typick\u00e9 pro mechanick\u00e9 syst\u00e9my. Numerick\u00e9 \u0159e\u0161i\u010de \u0159e\u0161\u00ed soustavy ODE prvn\u00edho \u0159\u00e1du a je tedy nutn\u00e9 na\u0161i rovnici upravit. Tato \u00faprava je mo\u017en\u00e1 v\u017edy a tedy rovnice vy\u0161\u0161\u00edch \u0159\u00e1d\u016f m\u016f\u017eeme p\u0159ev\u00e9st na soustavu rovnic \u0159\u00e1du prvn\u00edho.<\/p>\n\n\n\n<p>Upraven\u00e1 ovnice vhodn\u00e1 pro simulaci bude vypadat takto:<\/p>\n\n\n\n<div class=\"wp-block-katex-display-block katex-eq\" data-katex-display=\"true\"><pre>\\large \\dot{x}=v \\\\ \\dot{v} = \\frac{1}{m}(F(t) - vb - xk)<\/pre><\/div>\n\n\n\n<p>Takto upraven\u00e1 rovnice je u\u017e vhodn\u00e1 k simulaci. Jedn\u00e1 se o soustavu ODE, kde m\u00e1me prvn\u00ed derivace izolovan\u00e9 na jedn\u00ed stran\u011b rovnic.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"640\" height=\"480\" src=\"https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/02\/spring_mass_dumper.png\" alt=\"\" class=\"wp-image-248\" srcset=\"https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/02\/spring_mass_dumper.png 640w, https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/02\/spring_mass_dumper-300x225.png 300w, https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/02\/spring_mass_dumper-150x113.png 150w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"640\" height=\"480\" src=\"https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/02\/spring_mass_resonance.png\" alt=\"\" class=\"wp-image-249\" srcset=\"https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/02\/spring_mass_resonance.png 640w, https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/02\/spring_mass_resonance-300x225.png 300w, https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/02\/spring_mass_resonance-150x113.png 150w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" width=\"640\" height=\"480\" src=\"https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/02\/Spring_mass_dumper_stiff.png\" alt=\"\" class=\"wp-image-250\" srcset=\"https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/02\/Spring_mass_dumper_stiff.png 640w, https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/02\/Spring_mass_dumper_stiff-300x225.png 300w, https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-content\/uploads\/2022\/02\/Spring_mass_dumper_stiff-150x113.png 150w\" sizes=\"(max-width: 640px) 100vw, 640px\" \/><\/figure><\/div>\n\n\n<div class=\"codecolorer-container python geshi\" style=\"overflow:auto;white-space:nowrap;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/>47<br \/>48<br \/>49<br \/>50<br \/>51<br \/>52<br \/>53<br \/>54<br \/>55<br \/>56<br \/>57<br \/>58<br \/>59<br \/>60<br \/>61<br \/>62<br \/>63<br \/>64<br \/>65<br \/>66<br \/>67<br \/>68<br \/>69<br \/>70<br \/>71<br \/>72<br \/>73<br \/>74<br \/>75<br \/>76<br \/>77<br \/>78<br \/>79<br \/>80<br \/>81<br \/>82<br \/>83<br \/>84<br \/>85<br \/>86<br \/>87<br \/>88<br \/>89<br \/>90<br \/>91<br \/>92<br \/>93<br \/>94<br \/>95<br \/>96<br \/>97<br \/>98<br \/>99<br \/>100<br \/>101<br \/>102<br \/>103<br \/>104<br \/>105<br \/>106<br \/>107<br \/>108<br \/>109<br \/>110<br \/>111<br \/>112<br \/>113<br \/><\/div><\/td><td><div class=\"python codecolorer\" style=\"white-space:nowrap\"><span style=\"color: #ff7700;font-weight:bold;\">import<\/span> numpy <span style=\"color: #ff7700;font-weight:bold;\">as<\/span> np<br \/>\n<span style=\"color: #ff7700;font-weight:bold;\">from<\/span> scipy <span style=\"color: #ff7700;font-weight:bold;\">import<\/span> integrate<br \/>\n<span style=\"color: #ff7700;font-weight:bold;\">import<\/span> matplotlib.<span style=\"color: black;\">pyplot<\/span> <span style=\"color: #ff7700;font-weight:bold;\">as<\/span> plt<br \/>\n<br \/>\n<br \/>\n<span style=\"color: #ff7700;font-weight:bold;\">def<\/span> ode1<span style=\"color: black;\">&#40;<\/span>t<span style=\"color: #66cc66;\">,<\/span> x<span style=\"color: black;\">&#41;<\/span>:<br \/>\n&nbsp; &nbsp; tau <span style=\"color: #66cc66;\">=<\/span> <span style=\"color: #ff4500;\">0.1<\/span><br \/>\n&nbsp; &nbsp; k <span style=\"color: #66cc66;\">=<\/span> <span style=\"color: #ff4500;\">10<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span style=\"color: #ff7700;font-weight:bold;\">if<\/span> t <span style=\"color: #66cc66;\">&lt;<\/span> <span style=\"color: #ff4500;\">0.1<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; u <span style=\"color: #66cc66;\">=<\/span> <span style=\"color: #ff4500;\">0<\/span><br \/>\n&nbsp; &nbsp; <span style=\"color: #ff7700;font-weight:bold;\">else<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; u <span style=\"color: #66cc66;\">=<\/span> <span style=\"color: #ff4500;\">1<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; dx <span style=\"color: #66cc66;\">=<\/span> <span style=\"color: black;\">&#40;<\/span>-x + k * u<span style=\"color: black;\">&#41;<\/span> \/ tau<br \/>\n<br \/>\n&nbsp; &nbsp; <span style=\"color: #ff7700;font-weight:bold;\">return<\/span> dx<br \/>\n<br \/>\n<span style=\"color: #ff7700;font-weight:bold;\">def<\/span> ode2<span style=\"color: black;\">&#40;<\/span>t<span style=\"color: #66cc66;\">,<\/span> x<span style=\"color: black;\">&#41;<\/span>:<br \/>\n<br \/>\n&nbsp; &nbsp; F <span style=\"color: #66cc66;\">=<\/span> <span style=\"color: #ff4500;\">100<\/span><br \/>\n&nbsp; &nbsp; k <span style=\"color: #66cc66;\">=<\/span> <span style=\"color: #ff4500;\">10<\/span><br \/>\n&nbsp; &nbsp; b <span style=\"color: #66cc66;\">=<\/span> <span style=\"color: #ff4500;\">3<\/span><br \/>\n&nbsp; &nbsp; m <span style=\"color: #66cc66;\">=<\/span> <span style=\"color: #ff4500;\">1<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; dx1 <span style=\"color: #66cc66;\">=<\/span> x<span style=\"color: black;\">&#91;<\/span><span style=\"color: #ff4500;\">1<\/span><span style=\"color: black;\">&#93;<\/span><br \/>\n&nbsp; &nbsp; dx2 <span style=\"color: #66cc66;\">=<\/span> <span style=\"color: black;\">&#40;<\/span>F - k*x<span style=\"color: black;\">&#91;<\/span><span style=\"color: #ff4500;\">0<\/span><span style=\"color: black;\">&#93;<\/span> - b*x<span style=\"color: black;\">&#91;<\/span><span style=\"color: #ff4500;\">1<\/span><span style=\"color: black;\">&#93;<\/span><span style=\"color: black;\">&#41;<\/span>\/m<br \/>\n<br \/>\n&nbsp; &nbsp; dx <span style=\"color: #66cc66;\">=<\/span> <span style=\"color: black;\">&#91;<\/span>dx1<span style=\"color: #66cc66;\">,<\/span> dx2<span style=\"color: black;\">&#93;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span style=\"color: #ff7700;font-weight:bold;\">return<\/span> dx<br \/>\n<br \/>\n<span style=\"color: #ff7700;font-weight:bold;\">def<\/span> ode3<span style=\"color: black;\">&#40;<\/span>t<span style=\"color: #66cc66;\">,<\/span> x<span style=\"color: black;\">&#41;<\/span>:<br \/>\n<br \/>\n&nbsp; &nbsp; F <span style=\"color: #66cc66;\">=<\/span> <span style=\"color: #ff4500;\">1<\/span><br \/>\n&nbsp; &nbsp; k <span style=\"color: #66cc66;\">=<\/span> <span style=\"color: #ff4500;\">10<\/span><br \/>\n&nbsp; &nbsp; b <span style=\"color: #66cc66;\">=<\/span> <span style=\"color: #ff4500;\">0<\/span><br \/>\n&nbsp; &nbsp; m <span style=\"color: #66cc66;\">=<\/span> <span style=\"color: #ff4500;\">1<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; omg <span style=\"color: #66cc66;\">=<\/span> np.<span style=\"color: black;\">sqrt<\/span><span style=\"color: black;\">&#40;<\/span>k\/m<span style=\"color: black;\">&#41;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; dx1 <span style=\"color: #66cc66;\">=<\/span> x<span style=\"color: black;\">&#91;<\/span><span style=\"color: #ff4500;\">1<\/span><span style=\"color: black;\">&#93;<\/span><br \/>\n&nbsp; &nbsp; dx2 <span style=\"color: #66cc66;\">=<\/span> <span style=\"color: black;\">&#40;<\/span>F*np.<span style=\"color: black;\">sin<\/span><span style=\"color: black;\">&#40;<\/span>omg*t<span style=\"color: black;\">&#41;<\/span> - k*x<span style=\"color: black;\">&#91;<\/span><span style=\"color: #ff4500;\">0<\/span><span style=\"color: black;\">&#93;<\/span> - b*x<span style=\"color: black;\">&#91;<\/span><span style=\"color: #ff4500;\">1<\/span><span style=\"color: black;\">&#93;<\/span><span style=\"color: black;\">&#41;<\/span>\/m<br \/>\n<br \/>\n&nbsp; &nbsp; dx <span style=\"color: #66cc66;\">=<\/span> <span style=\"color: black;\">&#91;<\/span>dx1<span style=\"color: #66cc66;\">,<\/span> dx2<span style=\"color: black;\">&#93;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span style=\"color: #ff7700;font-weight:bold;\">return<\/span> dx<br \/>\n<br \/>\n<span style=\"color: #ff7700;font-weight:bold;\">def<\/span> ode4<span style=\"color: black;\">&#40;<\/span>t<span style=\"color: #66cc66;\">,<\/span> x<span style=\"color: black;\">&#41;<\/span>:<br \/>\n<br \/>\n&nbsp; &nbsp; k <span style=\"color: #66cc66;\">=<\/span> <span style=\"color: #ff4500;\">1000<\/span><br \/>\n&nbsp; &nbsp; b <span style=\"color: #66cc66;\">=<\/span> <span style=\"color: #ff4500;\">1001<\/span><br \/>\n&nbsp; &nbsp; m <span style=\"color: #66cc66;\">=<\/span> <span style=\"color: #ff4500;\">1<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; dx1 <span style=\"color: #66cc66;\">=<\/span> x<span style=\"color: black;\">&#91;<\/span><span style=\"color: #ff4500;\">1<\/span><span style=\"color: black;\">&#93;<\/span><br \/>\n&nbsp; &nbsp; dx2 <span style=\"color: #66cc66;\">=<\/span> <span style=\"color: black;\">&#40;<\/span>- k*x<span style=\"color: black;\">&#91;<\/span><span style=\"color: #ff4500;\">0<\/span><span style=\"color: black;\">&#93;<\/span> - b*x<span style=\"color: black;\">&#91;<\/span><span style=\"color: #ff4500;\">1<\/span><span style=\"color: black;\">&#93;<\/span><span style=\"color: black;\">&#41;<\/span>\/m<br \/>\n<br \/>\n&nbsp; &nbsp; dx <span style=\"color: #66cc66;\">=<\/span> <span style=\"color: black;\">&#91;<\/span>dx1<span style=\"color: #66cc66;\">,<\/span> dx2<span style=\"color: black;\">&#93;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; <span style=\"color: #ff7700;font-weight:bold;\">return<\/span> dx<br \/>\n<br \/>\n<span style=\"color: #ff7700;font-weight:bold;\">def<\/span> ode_sim<span style=\"color: black;\">&#40;<\/span><span style=\"color: black;\">&#41;<\/span>:<br \/>\n<br \/>\n&nbsp; &nbsp; xt2 <span style=\"color: #66cc66;\">=<\/span> integrate.<span style=\"color: black;\">solve_ivp<\/span><span style=\"color: black;\">&#40;<\/span>fun<span style=\"color: #66cc66;\">=<\/span>ode2<span style=\"color: #66cc66;\">,<\/span> t_span<span style=\"color: #66cc66;\">=<\/span><span style=\"color: black;\">&#91;<\/span><span style=\"color: #ff4500;\">0.0<\/span><span style=\"color: #66cc66;\">,<\/span> <span style=\"color: #ff4500;\">10.0<\/span><span style=\"color: black;\">&#93;<\/span><span style=\"color: #66cc66;\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;y0<span style=\"color: #66cc66;\">=<\/span><span style=\"color: black;\">&#91;<\/span><span style=\"color: #ff4500;\">0.0<\/span><span style=\"color: #66cc66;\">,<\/span> <span style=\"color: #ff4500;\">0.0<\/span><span style=\"color: black;\">&#93;<\/span><span style=\"color: #66cc66;\">,<\/span> max_step<span style=\"color: #66cc66;\">=<\/span><span style=\"color: #ff4500;\">0.01<\/span><span style=\"color: #66cc66;\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;method<span style=\"color: #66cc66;\">=<\/span><span style=\"color: #483d8b;\">&quot;RK45&quot;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; xt1 <span style=\"color: #66cc66;\">=<\/span> integrate.<span style=\"color: black;\">solve_ivp<\/span><span style=\"color: black;\">&#40;<\/span>fun<span style=\"color: #66cc66;\">=<\/span>ode1<span style=\"color: #66cc66;\">,<\/span> t_span<span style=\"color: #66cc66;\">=<\/span><span style=\"color: black;\">&#91;<\/span><span style=\"color: #ff4500;\">0.0<\/span><span style=\"color: #66cc66;\">,<\/span> <span style=\"color: #ff4500;\">1.0<\/span><span style=\"color: black;\">&#93;<\/span><span style=\"color: #66cc66;\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;y0<span style=\"color: #66cc66;\">=<\/span><span style=\"color: black;\">&#91;<\/span><span style=\"color: #ff4500;\">0.0<\/span><span style=\"color: #66cc66;\">,<\/span> <span style=\"color: #ff4500;\">0.0<\/span><span style=\"color: black;\">&#93;<\/span><span style=\"color: #66cc66;\">,<\/span> max_step<span style=\"color: #66cc66;\">=<\/span><span style=\"color: #ff4500;\">0.01<\/span><span style=\"color: #66cc66;\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;method<span style=\"color: #66cc66;\">=<\/span><span style=\"color: #483d8b;\">&quot;RK45&quot;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; xt3 <span style=\"color: #66cc66;\">=<\/span> integrate.<span style=\"color: black;\">solve_ivp<\/span><span style=\"color: black;\">&#40;<\/span>fun<span style=\"color: #66cc66;\">=<\/span>ode3<span style=\"color: #66cc66;\">,<\/span> t_span<span style=\"color: #66cc66;\">=<\/span><span style=\"color: black;\">&#91;<\/span><span style=\"color: #ff4500;\">0.0<\/span><span style=\"color: #66cc66;\">,<\/span> <span style=\"color: #ff4500;\">10.0<\/span><span style=\"color: black;\">&#93;<\/span><span style=\"color: #66cc66;\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;y0<span style=\"color: #66cc66;\">=<\/span><span style=\"color: black;\">&#91;<\/span><span style=\"color: #ff4500;\">0.0<\/span><span style=\"color: #66cc66;\">,<\/span> <span style=\"color: #ff4500;\">0.0<\/span><span style=\"color: black;\">&#93;<\/span><span style=\"color: #66cc66;\">,<\/span> max_step<span style=\"color: #66cc66;\">=<\/span><span style=\"color: #ff4500;\">0.01<\/span><span style=\"color: #66cc66;\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;method<span style=\"color: #66cc66;\">=<\/span><span style=\"color: #483d8b;\">&quot;RK45&quot;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; xt4 <span style=\"color: #66cc66;\">=<\/span> integrate.<span style=\"color: black;\">solve_ivp<\/span><span style=\"color: black;\">&#40;<\/span>fun<span style=\"color: #66cc66;\">=<\/span>ode4<span style=\"color: #66cc66;\">,<\/span> t_span<span style=\"color: #66cc66;\">=<\/span><span style=\"color: black;\">&#91;<\/span><span style=\"color: #ff4500;\">0.0<\/span><span style=\"color: #66cc66;\">,<\/span> <span style=\"color: #ff4500;\">10.0<\/span><span style=\"color: black;\">&#93;<\/span><span style=\"color: #66cc66;\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;y0<span style=\"color: #66cc66;\">=<\/span><span style=\"color: black;\">&#91;<\/span><span style=\"color: #ff4500;\">1.0<\/span><span style=\"color: #66cc66;\">,<\/span> <span style=\"color: #ff4500;\">0.0<\/span><span style=\"color: black;\">&#93;<\/span><span style=\"color: #66cc66;\">,<\/span> max_step<span style=\"color: #66cc66;\">=<\/span><span style=\"color: #ff4500;\">0.1<\/span><span style=\"color: #66cc66;\">,<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;method<span style=\"color: #66cc66;\">=<\/span><span style=\"color: #483d8b;\">&quot;BDF&quot;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">figure<\/span><span style=\"color: black;\">&#40;<\/span><span style=\"color: #ff4500;\">1<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">plot<\/span><span style=\"color: black;\">&#40;<\/span>xt2.<span style=\"color: black;\">t<\/span><span style=\"color: #66cc66;\">,<\/span> xt2.<span style=\"color: black;\">y<\/span><span style=\"color: black;\">&#91;<\/span><span style=\"color: #ff4500;\">0<\/span><span style=\"color: black;\">&#93;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">title<\/span><span style=\"color: black;\">&#40;<\/span><span style=\"color: #483d8b;\">&quot;Spring-mass-dumper&quot;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">xlabel<\/span><span style=\"color: black;\">&#40;<\/span><span style=\"color: #483d8b;\">&quot;time [t]&quot;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">ylabel<\/span><span style=\"color: black;\">&#40;<\/span><span style=\"color: #483d8b;\">&quot;x [m]&quot;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">grid<\/span><span style=\"color: black;\">&#40;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">figure<\/span><span style=\"color: black;\">&#40;<\/span><span style=\"color: #ff4500;\">2<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">plot<\/span><span style=\"color: black;\">&#40;<\/span>xt1.<span style=\"color: black;\">t<\/span><span style=\"color: #66cc66;\">,<\/span> xt1.<span style=\"color: black;\">y<\/span><span style=\"color: black;\">&#91;<\/span><span style=\"color: #ff4500;\">0<\/span><span style=\"color: black;\">&#93;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">title<\/span><span style=\"color: black;\">&#40;<\/span><span style=\"color: #483d8b;\">&quot;ode 1&quot;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">xlabel<\/span><span style=\"color: black;\">&#40;<\/span><span style=\"color: #483d8b;\">&quot;time [t]&quot;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">ylabel<\/span><span style=\"color: black;\">&#40;<\/span><span style=\"color: #483d8b;\">&quot;x [m]&quot;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">grid<\/span><span style=\"color: black;\">&#40;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">figure<\/span><span style=\"color: black;\">&#40;<\/span><span style=\"color: #ff4500;\">3<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">plot<\/span><span style=\"color: black;\">&#40;<\/span>xt3.<span style=\"color: black;\">t<\/span><span style=\"color: #66cc66;\">,<\/span> xt3.<span style=\"color: black;\">y<\/span><span style=\"color: black;\">&#91;<\/span><span style=\"color: #ff4500;\">0<\/span><span style=\"color: black;\">&#93;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">title<\/span><span style=\"color: black;\">&#40;<\/span><span style=\"color: #483d8b;\">&quot;Spring-mass-resonance&quot;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">xlabel<\/span><span style=\"color: black;\">&#40;<\/span><span style=\"color: #483d8b;\">&quot;time [t]&quot;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">ylabel<\/span><span style=\"color: black;\">&#40;<\/span><span style=\"color: #483d8b;\">&quot;x [m]&quot;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">grid<\/span><span style=\"color: black;\">&#40;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">figure<\/span><span style=\"color: black;\">&#40;<\/span><span style=\"color: #ff4500;\">4<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">plot<\/span><span style=\"color: black;\">&#40;<\/span>xt4.<span style=\"color: black;\">t<\/span><span style=\"color: #66cc66;\">,<\/span> xt4.<span style=\"color: black;\">y<\/span><span style=\"color: black;\">&#91;<\/span><span style=\"color: #ff4500;\">0<\/span><span style=\"color: black;\">&#93;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">title<\/span><span style=\"color: black;\">&#40;<\/span><span style=\"color: #483d8b;\">&quot;Spring-mass-dumper-stiff&quot;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">xlabel<\/span><span style=\"color: black;\">&#40;<\/span><span style=\"color: #483d8b;\">&quot;time [t]&quot;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">ylabel<\/span><span style=\"color: black;\">&#40;<\/span><span style=\"color: #483d8b;\">&quot;x [m]&quot;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">grid<\/span><span style=\"color: black;\">&#40;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n<br \/>\n&nbsp; &nbsp; plt.<span style=\"color: black;\">show<\/span><span style=\"color: black;\">&#40;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span style=\"color: #ff7700;font-weight:bold;\">print<\/span><span style=\"color: black;\">&#40;<\/span><span style=\"color: #008000;\">len<\/span><span style=\"color: black;\">&#40;<\/span>xt4.<span style=\"color: black;\">t<\/span><span style=\"color: black;\">&#41;<\/span><span style=\"color: black;\">&#41;<\/span><br \/>\n<br \/>\n<br \/>\n<span style=\"color: #ff7700;font-weight:bold;\">if<\/span> __name__ <span style=\"color: #66cc66;\">==<\/span> <span style=\"color: #483d8b;\">'__main__'<\/span>:<br \/>\n&nbsp; &nbsp; ode_sim<span style=\"color: black;\">&#40;<\/span><span style=\"color: black;\">&#41;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Dnes se pod\u00edv\u00e1me na problematiku simulace oby\u010dejn\u00e9 diferenci\u00e1ln\u00ed rovnice ODE v pythonu. Budeme vyu\u017e\u00edvat modul scipy, kter\u00fd obsahuje mnoho algortim\u016f pro numerickou matematiku. Pro \u0159e\u0161en\u00ed dynamick\u00e9ho syst\u00e9m\u016f (ten je pops\u00e1n diferenci\u00e1ln\u00edmi rovnicemi) pou\u017eijeme numerickou metodu. Rozd\u00edl mezi numerick\u00fdm a analytick\u00e9m \u0159e\u0161en\u00edm je ten, \u017ee analytick\u00e9 \u0159e\u0161en\u00ed je zcela p\u0159esn\u00e9, ale lze takto vy\u0159e\u0161it jen omezenou&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[2],"tags":[6,4,7],"_links":{"self":[{"href":"https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-json\/wp\/v2\/posts\/185"}],"collection":[{"href":"https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-json\/wp\/v2\/comments?post=185"}],"version-history":[{"count":31,"href":"https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-json\/wp\/v2\/posts\/185\/revisions"}],"predecessor-version":[{"id":254,"href":"https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-json\/wp\/v2\/posts\/185\/revisions\/254"}],"wp:attachment":[{"href":"https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-json\/wp\/v2\/media?parent=185"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-json\/wp\/v2\/categories?post=185"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mechatronicz.eu\/domains\/mechatronicz.eu\/wp-json\/wp\/v2\/tags?post=185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}