Elementární funkce - cesta k derivaci

Následující aplet umožňuje pochopit "cestu k derivaci" elementárních funkcí. Graf příslušné funkce lze aproximovat pomocí lomené čáry - počet úseků čáry lze volit posuvníkem počet úseků. V pravém grafu lze zobrazit jak derivaci vybrané funkce, tak podíly ((Δy)/(Δx)) odpovící každé z částí lomené čáry, která je zobrazená v levém grafu.
Pomocí menu lze vybrat jednu z elementárních funkcí.
Pomocí posuvníku lze nastavit:
	počet úseků lomené čáry, která aproximuje graf kvadratické funkce.

Dále lze volitelně zobrazit:
	dělení intervalu, na kterém je vybraná funkce vykreslena a které vymezuje jednotlivé části lomené čáry (není-li tato volba zapnuta, není možné zobrazit lomenou čáru ani podíly);
	aproximaci grafu vybrané funkce lomenou čárou;
	podíly ((Δy)/(Δx)) určené na základě jednotlivých úseků zobrazené lomené čáry (tj. aproximace);
	graf derivace vybrané funkce.
	
Tlačítkem Ulož obrázky se uloží právě zobrazené grafy v "bílém" okně do aktuální složky (složka, v níž je uložen tento notebook) pod jmény, která jsou uložena v proměnných jmenosouboru1 a jmenosouboru2. K těmto jménům souborů jsou při opakovaném ukládání grafů přidávána pořadová čísla.
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`*"];
jmenosouboru1="derivace_uvod_vse1_.jpg";
jmenosouboru2="derivace_uvod_vse2_.jpg";
cesta=NotebookDirectory[];
pocetulozeni=0;

x1=-10;x2=10;
y1=-10;y2=10;
delta=0.000001;

n0=1;nmin=1;nmax=20;deltan=1;

seznamfci={"x","(x^2)","(x^3)","(Sqrt[x])","sin (x)","cos (x)","tg (x)","cotg (x)","(e^x)","ln (x)"};
defaultnifce=seznamfci[[1]];

tloustka=0.005;
velikostobrazku=400;

barva=Black;
barvagrafu=Blue;
barvacar=Gray;
barvaaproximace=Magenta;
barvaderivace=Orange;
barvapodilu=Red;

CestaKDerivaciElementarnichFci=Manipulate[Deploy[
(*funkce[x_]:=a (x^2);*)
xstart=x1;xkonec=x2;
nedefinovanyvyrazfce=x==1.5x2;
If[vybranafce==seznamfci[[1]],
funkce[x_]:=2x,
If[vybranafce==seznamfci[[2]],
funkce[x_]:=(y2/(x2^2)) (x^2),
If[vybranafce==seznamfci[[3]],
funkce[x_]:=(y2/(x2^3))(x^3),
If[vybranafce==seznamfci[[4]],
{funkce[x_]:=(y2/(Sqrt[x2]))(Sqrt[x]),
xstart=delta,xkonec=x2},
If[vybranafce==seznamfci[[5]],
funkce[x_]:=(x2/2)Sin[((2π)/x2) x],
If[vybranafce==seznamfci[[6]],
funkce[x_]:=(x2/2)Cos[((2π)/x2) x],
If[vybranafce==seznamfci[[7]],
{funkce[x_]:=(x2/2)Tan[(π/((1+delta)x2)) x],
nedefinovanyvyrazfce=Cos[(π/((1+delta)x2))x]==0},
If[vybranafce==seznamfci[[8]],
{funkce[x_]:=(x2/2)Cot[(π/((1+delta)x2)) x],
xstart=(1-delta)x1,
nedefinovanyvyrazfce=Sin[(π/((1+delta)x2))x]==0},
If[vybranafce==seznamfci[[9]],
funkce[x_]:=(y2/(E^x2))(E^x),
{funkce[x_]:=(y2/(Log[x2]))Log[x],
xstart=delta;xkonec=x2}]]]]]]]]];

derivace[x_]:=funkce'[x];
useky=Table[
Line[{{xstart+(i/pocetuseku)(xkonec-xstart),y1},{xstart+(i/pocetuseku)(xkonec-xstart),y2}}],
{i,0,pocetuseku,1}];
aproximace=Table[
Line[{{xstart+(i/pocetuseku)(xkonec-xstart),funkce[xstart+(i/pocetuseku)(xkonec-xstart)]},{xstart+((i+1)/pocetuseku)(xkonec-xstart),funkce[xstart+((i+1)/pocetuseku)(xkonec-xstart)]}}],
{i,0,pocetuseku-1,1}];
podily=Table[
Line[{{xstart+(i/pocetuseku)(xkonec-xstart),(pocetuseku/((xkonec-xstart)))(funkce[xstart+((i+1)/pocetuseku)(xkonec-xstart)]-funkce[xstart+(i/pocetuseku)(xkonec-xstart)])},{xstart+((i+1)/pocetuseku)(xkonec-xstart),(pocetuseku/((xkonec-xstart)))(funkce[xstart+((i+1)/pocetuseku)(xkonec-xstart)]-funkce[xstart+(i/pocetuseku)(xkonec-xstart)])}}],
{i,0,pocetuseku-1,1}];

Grid[{
{graf1=Show[
Plot[funkce[x],{x,xstart,xkonec},PlotStyle->{barvagrafu,Thickness[tloustka]},Exclusions->{nedefinovanyvyrazfce},ExclusionsStyle->{Lighter[barvagrafu],Dashed,Thickness[0.25tloustka]}],
Graphics[{
If[zobrazitcary,
{{barvacar,Dashed,Thickness[0.5tloustka],useky},
If[zobrazitaproximaci,
{barvaaproximace,Thickness[1.25tloustka],aproximace},
Text[""]]},
Text[""]]
}],
FormatType->StandardForm,PlotRange->{{x1,x2},{y1,y2}},Ticks->None,AxesLabel->{"x","y"},AxesOrigin->{0,0},ImageSize->velikostobrazku],
graf2=Show[
If[zobrazitderivaci,
Plot[derivace[x],{x,xstart,xkonec},PlotStyle->{barvaderivace,Thickness[tloustka]}],
Plot[0,{x,x1,x1+0.001},PlotStyle->{barva,Thickness[0.001tloustka]}]],
Graphics[{
If[zobrazitcary∧(zobrazitpodily∨zobrazitderivaci),
{{barvacar,Dashed,Thickness[0.5tloustka],useky},
If[zobrazitpodily,
{barvapodilu,Thickness[1.25tloustka],podily},
Text[""]]},
Text[""]]
}],
FormatType->StandardForm,PlotRange->{{x1,x2},{y1,y2}},Ticks->None,AxesLabel->{"x","y"},AxesOrigin->{0,0},ImageSize->velikostobrazku]}
}]],

{{vybranafce,defaultnifce,Style["funkce",15,barva,FontFamily->Times]},seznamfci,ControlType->PopupMenu},
Delimiter,
{{pocetuseku,n0,Style["počet úseků",15,barva,Italic]},nmin,nmax,deltan},
Delimiter,
Item[Style["Zobrazit",20,barva,FontFamily->Times,Bold,Underlined],Alignment->Left],
{{zobrazitcary,False,Style["- dělení",15,barvacar,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitaproximaci,False,Style["- aproximaci",15,barvaaproximace,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitpodily,False,Style["- podíly",15,barvapodilu,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitderivaci,False,Style["- derivaci",15,barvaderivace,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
Button[" Ulož obrázky ",{pocetulozeni=pocetulozeni+1,{Export[StringInsert[StringJoin[cesta,jmenosouboru1],ToString[pocetulozeni],-5],graf1],Export[StringInsert[StringJoin[cesta,jmenosouboru2],ToString[pocetulozeni],-5],graf2]}},ImageSize->{100,Automatic}],
ControlPlacement->{Top,Top,Top,Bottom,Bottom,Bottom,Bottom,Bottom,Bottom},
FrameLabel->{Style["© Jaroslav Reichl, 2009",10,Black,FontFamily->Times],"",Style[StringJoin[ToString[Style["Elementární funkce",barvagrafu],StandardForm]," - cesta k ",ToString[Style["derivaci",barvaderivace],StandardForm]],25,barva,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.

CestaKDerivaciElementarnichFci