Přenos energie mezi dvěma oscilátory

Následující aplet umožňuje zobrazit závislost okamžité výchylky na čase pro dva rezonátory, které jsou vzájemně spojené vazbou. Pomocí posuvníků lze měnit:
	hmotnost m tělesa, které koná kmitavý pohyb;
	tuhost pružiny k;
	tuhost vazby (Subscript[k, vazby]), kterou jsou dané oscilátory spojeny.
Dále lze pomocí posuvníků ovlivňovat počáteční podmínky daného oscilátoru, tj. jeho počáteční výchylku (Subscript[y, 0]) a velikost počáteční rychlosti (Subscript[v, 0]).

Volitelně lze zobrazit "ukazovátko" okamžité polohy, pomocí kterého lze zkoumat okamžité hodnoty obou oscilátorů.

Tlačítkem Ulož obrázek se uloží právě zobrazené "bílé" okno do aktuální složky (složka, v níž je uložen tento notebook) pod jménem, které je uloženo v proměnné jmenosouboru. K tomuto jménu souboru je při opakovaném ukládání grafu přidáváno pořadové číslo.
Pozor! Při každém spuštění tohoto apletu se začínají soubory číslovat opět od jedné! Tak může dojít k přepsání minule uložených obrázků.

© Jaroslav Reichl, 2009

Příprava pro vykreslení grafu

ClearAll["Global`*"];
jmenosouboru="kmitani_prenos_energie_.jpg";
cesta=NotebookDirectory[];
pocetulozeni=0;

x1=0;x2=50;
y1=-10;y2=-y1;

m0=0.5; mmin=0.1;mmax=5;deltam=0.1;
k0=2.5; kmin=0.01;kmax=5;deltak=0.01;
k20=0.5; k2min=0.0;k2max=1;deltak2=0.01;
y010=5;y01min=0.5;y01max=5;deltay01=0.1;
v010=0;v01min=0;v01max=5;deltav01=0.1;
y020=1;y02min=0.5;y02max=5;deltay02=0.1;
v020=0;v02min=0;v02max=5;deltav02=0.1;
cas0=0; casmin=0;casmax=x2;deltacas=0.1;

tloustka=0.005;
velikostbodu=0.02;

barva=Black;
barvagrafu1=Blue;
barvagrafu2=Orange;
barvabodu=Red;

PrenosEnergie=Manipulate[Deploy[
ukazatelokamzitepolohy=Line[{{cas,y1},{cas,y2}}];
pohybovarce1= m oscy1''[t]+k oscy1[t]+kvazby (oscy1[t]-oscy2[t])==0;
pohybovarce2= m oscy2''[t]+k oscy2[t]+kvazby (-oscy1[t]+oscy2[t])==0;
y1pocatecni=oscy1[0]==y01;
v1pocatecni=oscy1'[0]==v01;
y2pocatecni=oscy2[0]==y02;
v2pocatecni=oscy2'[0]==v02;
pom=DSolve[{pohybovarce1,pohybovarce2,y1pocatecni,v1pocatecni,y2pocatecni,v2pocatecni},{oscy1[t],oscy2[t]},t];
okamzitavychylka1=oscy1[t]/.First[pom];
okamzitavychylka2=oscy2[t]/.Last[pom];

grafik=Grid[{
{Show[
Plot[okamzitavychylka1,{t,0,x2},PlotStyle->{barvagrafu1,Thickness[tloustka]},PlotRange->All,PerformanceGoal->"Quality",AxesLabel->{"(t/s)","(y/m)"}],
Graphics[{
If[zobrazitokamzitoupolohu,
{barvabodu,Dashed,Thickness[0.75tloustka],ukazatelokamzitepolohy},
Text[""]]
}],
FormatType->StandardForm,AspectRatio->Automatic,PlotRange->{{x1,x2},{y1,y2}},ImageSize->450
]},
{Show[
Plot[okamzitavychylka2,{t,0,x2},PlotStyle->{barvagrafu2,Thickness[tloustka]},PlotRange->All,PerformanceGoal->"Quality",AxesLabel->{"(t/s)","(y/m)"}],
Graphics[{
If[zobrazitokamzitoupolohu,
{barvabodu,Dashed,Thickness[0.75tloustka],ukazatelokamzitepolohy},
Text[""]]
}],
FormatType->StandardForm,AspectRatio->Automatic,PlotRange->{{x1,x2},{y1,y2}},ImageSize->450
]}
}]
],

{{m,m0,Style["m",15,barva]},mmin,mmax,deltam,Appearance->"Labeled"},
{{k,k0,Style["k",15,barva]},kmin,kmax,deltak,Appearance->"Labeled"},
{{kvazby,k20,Style["(Subscript[k, vazby])",15,barva]},k2min,k2max,deltak2,Appearance->"Labeled"},
Delimiter,
Item[Style["Počáteční podmínky:",15,barva,FontFamily->Times,Bold,Underlined]],
{{y01,y010,Style["(Subscript[y, 01])",15,barva]},y01min,y01max,deltay01,Appearance->"Labeled"},
{{v01,v010,Style["(Subscript[v, 01])",15,barva]},v01min,v01max,deltav01,Appearance->"Labeled"},
{{y02,y020,Style["(Subscript[y, 02])",15,barva]},y02min,y02max,deltay02,Appearance->"Labeled"},
{{v02,v020,Style["(Subscript[v, 02])",15,barva]},v02min,v02max,deltav02,Appearance->"Labeled"},
Delimiter,
{{cas,cas0,Style["t",15,barva]},casmin,casmax,deltacas,Appearance->"Labeled"},
Delimiter,
Item[Style["Zobrazit:",15,barva,FontFamily->Times,Bold,Underlined]],
{{zobrazitokamzitoupolohu,False,Style["- okamžitou polohu",15,barvabodu,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
Button[" Ulož obrázek ",{pocetulozeni=pocetulozeni+1,Export[StringInsert[StringJoin[cesta,jmenosouboru],ToString[pocetulozeni],-5],grafik]},ImageSize->{100,Automatic}],
ControlPlacement->Left,
FrameLabel->{Style["© Jaroslav Reichl, 2009",10,Black,FontFamily->Times],"",Style["Přenos energie mezi dvěma oscilátory",25,Black,FontFamily->Times],""}];

Spuštění animace
Zpracujte běžným způsobem následující buňku a na dotaz, který se objeví, odpovězte ANO.

PrenosEnergie