Limita ve vlastním bodě - zavedení pojmu

Tento interaktivní notebook umožňuje zobrazit průběh nespojité funkce a interaktivně vysvětlit pojem limita funkce ve vlastním bodě.
Lze vybírat ze tří funkcí:
	funkce y = (((x^2) - (a^2))/(x + a)), kterou lze dodefinovat v bodě x = -a tak, aby byla spojitá;
	funkce y = sgn x, kterou nelze dodefinovat tak, aby byla spojitá;
	funkce, jejíž graf je složen ze dvou grafů lineárně lomené funkce a kterou není možné dodefinovat tak, aby byla spojitá.

Volitelně lze zobrazit:
	δ interval v okolí bodu a na ose x;
	ε interval v okolí limity L (resp. funkční hodnoty funkce v bodě a) na ose y;
	výpis funkčních hodnot u prvního typu funkce.

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

Příprava pro vykreslení grafu

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

x1=-10;x2=-x1;
y1=-10;y2=-y1;
stredx=((x1+x2)/2);stredy=((y1+y2)/2);

delta0=1;deltamin=0.01;deltamax=6;deltadelta=0.01;
epsilon0=2;epsilonmin=0.01;epsilonmax=7;deltaepsilon=0.01;

tloustka=0.005;
velikostpisma=18;
velikostbodu=0.02;
velikostsipky=0.02;

barva=Black;
barvafce=Blue;
barvabodu=Red;
barvabodu1=Orange;
barvabodu2=Magenta;
barvadelta=Black;
barvaepsilon=Darker[Green];

seznamfci={"y = (((x^2) - (a^2))/(x + a))","nespojitost I.","nespojistost II."};
funkcedefce[x_,akoef_,bkoef_,ckoef_,dkoef_,ekoef_]:={
(((x^2)-(akoef^2))/(x+akoef)),
(Piecewise[{{-akoef, x<bkoef}, {0, x==bkoef}, {akoef, x>bkoef}}]),
(Piecewise[{{((-akoef)/(x-bkoef))-ckoef, x<ekoef}, {Indeterminate, x==ekoef}, {(akoef/(x-dkoef))+ckoef, x>ekoef}}])};
defaultnifce=seznamfci[[1]];

LimitaVyklad=Manipulate[Deploy[
For[i=1,i≤Length[seznamfci],i++,
If[vybranafce==seznamfci[[i]],
Break[],
""]];
cislofce=i;
a=1;b=1;c=1;d=1;e=1;
kritickybod2=12;
kritickybod3=12;(*Druhý kritický bod pro funkce, u kterých nehraje roli.*)
If[cislofce==1,
{a=2,
kritickybod=-a,
limitakritbodu=Limit[funkce[x],x->kritickybod],
nedefinovanybod=Circle[{kritickybod,limitakritbodu},0.01(x2-x1)]},
If[cislofce==2,
{a=3,
b=0,
kritickybod=0,
limitakritbodu=0,
nedefinovanybod={Disk[{kritickybod,limitakritbodu},0.01(x2-x1)],Circle[{b,a},0.01(x2-x1)],Circle[{b,-a},0.01(x2-x1)]}},
If[cislofce==3,
{a=2,
b=-2,
c=3,
d=4,
kritickybod2=b,
kritickybod=e,
kritickybod3=d,
limitakritbodu=0(*Má význam pro názorné vykreslení limity.*)},
""]]];
funkce[x_]:=funkcedefce[x,a,b,c,d,e][[cislofce]];
If[cislofce==3,
{limitakritbodu1=Limit[funkce[x],x->kritickybod,Direction->1],
limitakritbodu2=Limit[funkce[x],x->kritickybod,Direction->-1],
nedefinovanybod={Circle[{kritickybod,limitakritbodu1},0.01(x2-x1)],Circle[{kritickybod,limitakritbodu2},0.01(x2-x1)]}},
""];

bod11=Point[{kritickybod-delta,stredy}];
bod12=Point[{kritickybod-delta,funkce[kritickybod-delta]}];
spojnice1=Line[{{kritickybod-delta,stredy},{kritickybod-delta,funkce[kritickybod-delta]}}];
bod21=Point[{kritickybod+delta,stredy}];
bod22=Point[{kritickybod+delta,funkce[kritickybod+delta]}];
spojnice2=Line[{{kritickybod+delta,stredy},{kritickybod+delta,funkce[kritickybod+delta]}}];
spojnicekritickybod=Line[{{kritickybod,stredy},{kritickybod,limitakritbodu}}];
spojnicekritickybod1=Line[{{kritickybod-delta,stredy},{kritickybod-delta,0.15y2}}];
spojnicekritickybod2=Line[{{kritickybod,stredy},{kritickybod,0.15y2}}];
spojnicekritickybod3=Line[{{kritickybod+delta,stredy},{kritickybod+delta,0.15y2}}];
intervaldelta1={
Arrowheads[{-velikostsipky,velikostsipky}],
Arrow[{{kritickybod-delta,0.15y2},{kritickybod,0.15y2}}]};
intervaldelta2={
Arrowheads[{-velikostsipky,velikostsipky}],
Arrow[{{kritickybod,0.15y2},{kritickybod+delta,0.15y2}}]};
spojnicelimita=Line[{{stredx,limitakritbodu},{kritickybod,limitakritbodu}}];
spojnicelimita1=Line[{{x1,limitakritbodu-epsilon},{x2,limitakritbodu-epsilon}}];
spojnicelimita2=Line[{{x1,limitakritbodu+epsilon},{x2,limitakritbodu+epsilon}}];
intervalepsilon1={
Arrowheads[{-velikostsipky,velikostsipky}],
Arrow[{{0.15x2,limitakritbodu-epsilon},{0.15x2,limitakritbodu}}]};
intervalepsilon2={
Arrowheads[{-velikostsipky,velikostsipky}],
Arrow[{{0.15x2,limitakritbodu+epsilon},{0.15x2,limitakritbodu}}]};

pisbodx=StringJoin[ToString[Style["a",barvabodu],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[kritickybod],barva]]];
pisdelta=StringJoin[ToString[Style["δ",barvadelta],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[delta],barva]]];
pisbodx1=StringJoin[ToString[Style["a - δ",barvabodu1],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[kritickybod-delta,0.001]],barva]]];
pisbody1=StringJoin[ToString[Style["f(",barva],StandardForm],ToString[Style["a - δ",barvabodu1],StandardForm],ToString[Style[") = ",barva],StandardForm],ToString[Style[ToString[Round[funkce[kritickybod-delta],0.001]],barva]]];
pisbodx2=StringJoin[ToString[Style["a + δ",barvabodu2],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[kritickybod+delta,0.001]],barva]]];
pisbody2=StringJoin[ToString[Style["f(",barva],StandardForm],ToString[Style["a + δ",barvabodu2],StandardForm],ToString[Style[") = ",barva],StandardForm],ToString[Style[ToString[Round[funkce[kritickybod+delta],0.001]],barva]]];
pispredpisfunkce=StringJoin[ToString[Style["f: y = ",barva],StandardForm],ToString[Style[ToString[funkce[x],TraditionalForm],barvafce],StandardForm]];

grafik=Show[
If[cislofce≠3,
Plot[funkce[x],{x,x1,x2},AxesOrigin->{0,0},PlotStyle->{barvafce,Thickness[tloustka]},Exclusions->{x==kritickybod,x==kritickybod2,x==kritickybod3},Ticks->{{{kritickybod,"a"}},{{limitakritbodu,"L"}}},TicksStyle->Directive[barvabodu,20,Bold]],
Plot[funkce[x],{x,x1,x2},AxesOrigin->{0,0},PlotStyle->{barvafce,Thickness[tloustka]},Exclusions->{x==kritickybod,x==kritickybod2,x==kritickybod3},Ticks->{{{kritickybod,"a"}},None},TicksStyle->Directive[barvabodu,20,Bold]]],

Graphics[{
{barvabodu,Thickness[tloustka],nedefinovanybod},
{barvabodu1,PointSize[velikostbodu],bod11},
{barvabodu1,PointSize[velikostbodu],bod12},
{barvabodu1,Thickness[0.5tloustka],Dotted,spojnice1},
{barvabodu2,PointSize[velikostbodu],bod21},
{barvabodu2,PointSize[velikostbodu],bod22},
{barvabodu2,Thickness[0.5tloustka],Dotted,spojnice2},
If[zobrazitdelta,
{{barva,Thickness[0.25tloustka],Dashed,spojnicekritickybod},
{barva,Thickness[0.25tloustka],Dashed,spojnicekritickybod1},
{barva,Thickness[0.25tloustka],Dashed,spojnicekritickybod2},
{barva,Thickness[0.25tloustka],Dashed,spojnicekritickybod3},
{barvadelta,Thickness[0.25tloustka],Dashed,intervaldelta1},
{barvadelta,Thickness[0.25tloustka],Dashed,intervaldelta2},
Text[Style["δ",15,barvadelta,FontFamily->Times],{kritickybod-0.5delta,0.1y2},{Center,Top}],
Text[Style["δ",15,barvadelta,FontFamily->Times],{kritickybod+0.5delta,0.1y2},{Center,Top}]},
Text[""]],
If[zobrazitepsilon,
{{barva,Thickness[0.25tloustka],Dashed,spojnicelimita},
{barvaepsilon,Thickness[0.25tloustka],Dashed,spojnicelimita1},
{barvaepsilon,Thickness[0.25tloustka],Dashed,spojnicelimita2},
If[cislofce≠3,
{{barvaepsilon,Thickness[0.25tloustka],Dashed,intervalepsilon1},
{barvaepsilon,Thickness[0.25tloustka],Dashed,intervalepsilon2},
Text[Style["ε",15,barvaepsilon,FontFamily->Times],{0.2x2,limitakritbodu-0.5epsilon},{Left,Center}],
Text[Style["ε",15,barvaepsilon,FontFamily->Times],{0.2x2,limitakritbodu+0.5epsilon},{Left,Center}]},
Text[""]]},
Text[""]]
}],
FormatType->StandardForm,AspectRatio->Automatic,PlotRange->{{x1,x2},{y1,y2}},AxesLabel->{Style["x",velikostpisma,barva,FontFamily->Times],Style["y",velikostpisma,barva,FontFamily->Times]},ImageSize->500
]],

{{vybranafce,defaultnifce,Style["funkce",15,barva,FontFamily->Times]},seznamfci,ControlType->PopupMenu},
{{delta,delta0,Style["δ",15,barva]},deltamin,deltamax,deltadelta},
{{epsilon,epsilon0,Style["ε",15,barva]},epsilonmin,epsilonmax,deltaepsilon},
Delimiter,
Item[Style["Zobrazit",20,barva,FontFamily->Times,Bold,Underlined],Alignment->Left],
{{zobrazitdelta,True,Style["- interval δ",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitepsilon,True,Style["- interval ε",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitvypishodnot,False,Style["- hodnoty",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
Dynamic[
Grid[{
{If[zobrazitvypishodnot∧cislofce==1,
Item[Style[pispredpisfunkce,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitvypishodnot∧cislofce==1,
Item[Style["",velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitvypishodnot∧cislofce==1,
Item[Style[pisbodx,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitvypishodnot∧cislofce==1,
Item[Style[pisdelta,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitvypishodnot∧cislofce==1,
Item[Style["",velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitvypishodnot∧cislofce==1,
Item[Style[pisbodx1,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitvypishodnot∧cislofce==1,
Item[Style[pisbody1,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitvypishodnot∧cislofce==1,
Item[Style["",velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitvypishodnot∧cislofce==1,
Item[Style[pisbodx2,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitvypishodnot∧cislofce==1,
Item[Style[pisbody2,velikostpisma,barva,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, 2010",10,Black,FontFamily->Times],"",Style["Limita ve vlastním bodě - zavedení pojmu",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.

LimitaVyklad