Rozložení velikostí rychlostí molekul ideálního plynu

Následující aplet názorně demonstruje rozložení velikostí rychlostí molekul (resp. atomů) ideálního plynu v závislosti na teplotě a molární hmotnosti plynu. Aplet má dvě části: v jedné lze měnit molekulovou hmotnost spojitě, ve druhé lze vybírat plyny. Pozor! Tato část apletu vyžaduje připojení počítače, na kterém je tento aplet spouštěn, k internetu. zároveň je nutné spouštět aplet ve verzi Mathematica 6.0.2.1!!!

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, 2008

Příprava pro vykreslení grafu

jmenosouboru="molekuly_rychlost_.jpg";
cesta=NotebookDirectory[];
pocetulozeni=0;

v1=0;v2=1000;
y1=0;y2=0.01;
Tmin=10;Tmax=500;
T0=300;

tloustka=0.004;
velikost=0.02;

barva=Black;
barvavp=Lighter[Blue,0.2];
barvavk=Orange;
barvavstr=Darker[Green,0.2];

<<PhysicalConstants`;
R=AvogadroConstant*BoltzmannConstant/.{Joule->1,Kelvin->1,Mole->1};

MolekulyIP=TabView[{
"Spojitý výběr atomové hmotnosti plynu"->
Manipulate[
vp=(Sqrt[((2R T)/(0.001M))]);
vk=(Sqrt[((3R T)/(0.001M))]);
vstr=(Sqrt[((8R T)/(0.001M π))]);
If[zobrazithodnoty,
{If[zobrazitvp,
vypisvp=StringJoin["(Subscript[v, p]) = \!\(\*SqrtBox[FractionBox[\(2  R\\ T\), \(M\)]]\) = ",ToString[Round[vp]]," m.(s^(-1))"],
vypisvp=""],
If[zobrazitvk,
vypisvk=StringJoin["(Subscript[v, k]) = \!\(\*SqrtBox[FractionBox[\(3  R\\ T\), \(M\)]]\) = ",ToString[Round[vk]]," m.(s^(-1))"],
vypisvk=""],
If[zobrazitvstr,
vypisvstr=StringJoin["(Overscript[v, __]) = \!\(\*SqrtBox[FractionBox[\(8  R\\ T\), \(π\\ M\)]]\) = ",ToString[Round[vstr]]," m.(s^(-1))"],
vypisvstr=""]},
{vypisvp="",
vypisvk="",
vypisvstr=""}];
rozdeleni[v_]:=4π (v^2)(Sqrt[(((((0.001M)/(2π R T))))^3)])(E^((-0.001M (v^2))/(2R T)));
bodvp=Point[{vp,rozdeleni[vp]}];
caravp=Line[{{vp,rozdeleni[vp]},{vp,y1}}];
bodvk=Point[{vk,rozdeleni[vk]}];
caravk=Line[{{vk,rozdeleni[vk]},{vk,y1}}];
bodvstr=Point[{vstr,rozdeleni[vstr]}];
caravstr=Line[{{vstr,rozdeleni[vstr]},{vstr,y1}}];

grafik=Deploy[
Show[
Plot[rozdeleni[v],{v,0,v2},PlotStyle->{RGBColor[1,0,0],Thickness[tloustka]},AxesOrigin->{0,0},PlotRange->{{0,v2},All}],
Graphics[{
Text[Style[StringJoin["M = ",ToString[Round[M]]," g.(mol^(-1))"],15,barva,FontFamily->Times,Bold],{v2,1.5y2},{Right,Center}],
Text[Style[StringJoin["T = ",ToString[Round[T]]," K"],15,barva,FontFamily->Times,Bold],{v2,1.4y2},{Right,Center}],
If[zobrazitvp,
{{barvavp,PointSize[velikost],bodvp},
{barvavp,Dashed,Thickness[0.5tloustka],caravp},
Text[Style["(Subscript[v, p]) - nejpravděpodobnější rychlost",15,barvavp,FontFamily->Times,Bold],{v2,1.3y2},{Right,Center}]},
Text[""]],
If[zobrazitvk,
{{barvavk,PointSize[velikost],bodvk},
{barvavk,Dashed,Thickness[0.5tloustka],caravk},
Text[Style["(Subscript[v, k]) - střední kvadratická rychlost",15,barvavk,FontFamily->Times,Bold],{v2,1.2y2},{Right,Center}]},
Text[""]],
If[zobrazitvstr,
{{barvavstr,PointSize[velikost],bodvstr},
{barvavstr,Dashed,Thickness[0.5tloustka],caravstr},
Text[Style["(Overscript[v, __]) - střední (průměrná) rychlost",15,barvavstr,FontFamily->Times,Bold],{v2,1.1y2},{Right,Center}]},
Text[""]]
}],
FormatType->StandardForm,PlotRange->{{v1,v2},{y1,1.6y2}},
AxesLabel->{"(v/(m . (s^(-1))))","(P/(s . (m^(-1))))"},ImageSize->500
]],

{{T,T0,Style["T",20,barva,Italic]},Tmin,Tmax,1},
{{M,16,Style["M",20,barva,Italic]},1,50,1},
Delimiter,
Item[Style["Zobrazit",15,barva,FontFamily->Times,Bold,Underlined],Alignment->Left],
{{zobrazitvp,True,Style["(Subscript[v, p])",15,barvavp,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitvk,True,Style["(Subscript[v, k])",15,barvavk,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitvstr,True,Style["(Overscript[v, __])",15,barvavstr,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
{{zobrazithodnoty,True,Style["hodnoty",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
Dynamic[
Grid[{
{Item[Style[vypisvp,15,barvavp,FontFamily->Times],Alignment->Left]},
{Item[Style[vypisvk,15,barvavk,FontFamily->Times],Alignment->Left]},
{Item[Style[vypisvstr,15,barvavstr,FontFamily->Times],Alignment->Left]}}]],
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, 2008",10,Black,FontFamily->Times],"",Style["Rozdělení velikostí rychlostí molekul ideálního plynu",25,Black,FontFamily->Times],""}
],

"Výběr atomové hmotnosti plynu podle dat ze serveru Wolframu"->
Grid[{{znackyplynu=ElementData["Gas","Abbreviation"];
Manipulate[
M=ElementData[ToString[prvek],"AtomicWeight"];
vp=(Sqrt[((2R T)/(0.001M))]);
vk=(Sqrt[((3R T)/(0.001M))]);
vstr=(Sqrt[((8R T)/(0.001M π))]);
If[zobrazithodnoty,
{If[zobrazitvp,
vypisvp=StringJoin["(Subscript[v, p]) = \!\(\*SqrtBox[FractionBox[\(2  R\\ T\), \(M\)]]\) = ",ToString[Round[vp]]," m.(s^(-1))"],
vypisvp=""],
If[zobrazitvk,
vypisvk=StringJoin["(Subscript[v, k]) = \!\(\*SqrtBox[FractionBox[\(3  R\\ T\), \(M\)]]\) = ",ToString[Round[vk]]," m.(s^(-1))"],
vypisvk=""],
If[zobrazitvstr,
vypisvstr=StringJoin["(Overscript[v, __]) = \!\(\*SqrtBox[FractionBox[\(8  R\\ T\), \(π\\ M\)]]\) = ",ToString[Round[vstr]]," m.(s^(-1))"],
vypisvstr=""]},
{vypisvp="",
vypisvk="",
vypisvstr=""}];
rozdeleni[v_]:=4π (v^2)(Sqrt[(((((0.001M)/(2π R T))))^3)])(E^((-0.001M (v^2))/(2R T)));
bodvp=Point[{vp,rozdeleni[vp]}];
caravp=Line[{{vp,rozdeleni[vp]},{vp,y1}}];
bodvk=Point[{vk,rozdeleni[vk]}];
caravk=Line[{{vk,rozdeleni[vk]},{vk,y1}}];
bodvstr=Point[{vstr,rozdeleni[vstr]}];
caravstr=Line[{{vstr,rozdeleni[vstr]},{vstr,y1}}];

grafik2=Deploy[
Show[
Plot[rozdeleni[v],{v,0,v2},PlotStyle->{RGBColor[1,0,0],Thickness[tloustka]},AxesOrigin->{0,0},PlotRange->{{0,v2},All}],
Graphics[{
Text[Style[StringJoin["M = ",ToString[Round[M]]," g.(mol^(-1))"],15,barva,FontFamily->Times,Bold],{v2,1.5y2},{Right,Center}],
Text[Style[StringJoin["T = ",ToString[Round[T]]," K"],15,barva,FontFamily->Times,Bold],{v2,1.4y2},{Right,Center}],
If[zobrazitvp,
{{barvavp,PointSize[velikost],bodvp},
{barvavp,Dashed,Thickness[0.5tloustka],caravp},
Text[Style["(Subscript[v, p]) - nejpravděpodobnější rychlost",15,barvavp,FontFamily->Times,Bold],{v2,1.3y2},{Right,Center}]},
Text[""]],
If[zobrazitvk,
{{barvavk,PointSize[velikost],bodvk},
{barvavk,Dashed,Thickness[0.5tloustka],caravk},
Text[Style["(Subscript[v, k]) - střední kvadratická rychlost",15,barvavk,FontFamily->Times,Bold],{v2,1.2y2},{Right,Center}]},
Text[""]],
If[zobrazitvstr,
{{barvavstr,PointSize[velikost],bodvstr},
{barvavstr,Dashed,Thickness[0.5tloustka],caravstr},
Text[Style["(Overscript[v, __]) - střední (průměrná) rychlost",15,barvavstr,FontFamily->Times,Bold],{v2,1.1y2},{Right,Center}]},
Text[""]]
}],
FormatType->StandardForm,PlotRange->{{v1,v2},{y1,1.6y2}},
AxesLabel->{"(v/(m . (s^(-1))))","(P/(s . (m^(-1))))"},ImageSize->500
]],

{{T,T0,Style["T",20,barva,Italic]},Tmin,Tmax,1,Appearance->"Labeled"},
{{prvek,znackyplynu[[3]],Style["prvek",20,barva,Italic]},znackyplynu,ControlType->PopupMenu},
Delimiter,
Item[Style["Zobrazit",15,barva,FontFamily->Times,Bold,Underlined],Alignment->Left],
{{zobrazitvp,True,Style["(Subscript[v, p])",15,barvavp,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitvk,True,Style["(Subscript[v, k])",15,barvavk,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitvstr,True,Style["(Overscript[v, __])",15,barvavstr,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
{{zobrazithodnoty,True,Style["hodnoty",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
Dynamic[
Grid[{
{Item[Style[vypisvp,15,barvavp,FontFamily->Times],Alignment->Left]},
{Item[Style[vypisvk,15,barvavk,FontFamily->Times],Alignment->Left]},
{Item[Style[vypisvstr,15,barvavstr,FontFamily->Times],Alignment->Left]}}]],
Delimiter,
Button[" Ulož obrázek ",{pocetulozeni=pocetulozeni+1,Export[StringInsert[StringJoin[cesta,jmenosouboru],ToString[pocetulozeni],-5],grafik2]},ImageSize->{100,Automatic}],
ControlPlacement->Left,
FrameLabel->{Style["© Jaroslav Reichl, 2008",10,Black,FontFamily->Times],"",Style["Rozdělení velikostí rychlostí molekul ideálního plynu",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.

MolekulyIP