Určitý integrál - obsah plochy pod grafem funkce

Tento interaktivní notebook umožňuje pochopit význam určitého integrálu funkce pomocí hledání obsahu plochy pod grafem spojité funkce. V notebooku je možné nastavit:
	a - počáteční bod intervalu, na kterém se uvedená plocha vyšetřuje;
	b - koncový bod tohoto intervalu;
	n - počet dělení intervalu <a; b>.

Volitelně lze zobrazit:
	krajní body intervalu na ose x kartézského systému souřadnic, v němž je vykreslen graf vyšetřované funkce;
	dělení - zobrazí se body na ose x, které dělí interval <a; b> (pro n = 1 se nezobrazí nic - krajní body intervalu <a; b> jsou zobrazeny přes tyto dělící body);
	horní obdélníky - obdélníky opsané ploše, jejíž obsah hledáme;
	dolní obdélníky - obdélníky vepsané ploše, jejíž obsah hledáme;
	popis - zobrazí se obsah horních obdélníků, obsah dolních obdélníků a přesný obsah vypočtený pomocí integrálu.

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 a Aleš Ryšavý, 2010

Příprava pro vykreslení grafu

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

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

dolnimez0=0.5x1;dolnimezmin=x1;dolnimezmax=0.5x2;deltadolnimez=0.05(x2-x1);
hornimez0=0.5x2;hornimezmin=0.5x1;hornimezmax=x2;deltahornimez=0.05(x2-x1);
n0=1;nmin=1;nmax=10;deltan=1;

tloustka=0.005;
velikostbodu=0.02;
velikostpisma=17;

barva=Black;
barvafce=Blue;
barvabodu1=Darker[Red];
barvabodu2=Lighter[Red];
barvabodudeleni=Lighter[Gray,0.4];
barvacarydolnichobdelniku=Darker[Orange];
barvadolnichobdelniku=Orange;
barvacaryhornichobdelniku=Darker[Green];
barvahornichobdelniku=Lighter[Green];
barvaplochy=Magenta;

bodydelenix=Table[Null,{i,1,nmax,1}];
bodydeleni=Table[Null,{i,1,nmax,1}];
vrcholhorniho=Table[Null,{i,1,nmax,1}];
vrcholdolniho=Table[Null,{i,1,nmax,1}];

minuladolnimez=dolnimez0;
minulahornimez=hornimez0;
(*funkce[x_]:=-0.1x+5;*)
funkce[x_]:=5 Log[2,x-1.2x1]-0.5 x-5;

UrcityIntegral=Manipulate[Deploy[
If[dolnimez≥hornimez,
If[minuladolnimez≠dolnimez,
dolnimez=hornimez-deltadolnimez,
hornimez=dolnimez+deltahornimez],
""];
minuladolnimez=dolnimez;
minulahornimez=hornimez;

dolnibod=Point[{dolnimez,stredy}];
hornibod=Point[{hornimez,stredy}];
bodydelenix=Table[dolnimez+((hornimez-dolnimez)/n)i,{i,0,n,1}];
bodydeleni=Table[Point[{bodydelenix[[i]],stredy}],{i,1,n,1}];
vrcholdolniho=Table[
If[funkce[bodydelenix[[i]]]>0∨funkce[bodydelenix[[i+1]]]>0,
Quiet[First[FindMinimum[{funkce[x] ,bodydelenix[[i]]≤ x≤ bodydelenix[[i+1]]},{x,((bodydelenix[[i]]+bodydelenix[[i+1]])/2)}]]],
Quiet[First[FindMaximum[{funkce[x] ,bodydelenix[[i]]≤ x≤ bodydelenix[[i+1]]},{x,((bodydelenix[[i]]+bodydelenix[[i+1]])/2)}]]]],
{i,1,n,1}];
vrcholhorniho=Table[
If[funkce[bodydelenix[[i]]]>0∨funkce[bodydelenix[[i+1]]]>0,
Quiet[First[FindMaximum[{funkce[x] ,bodydelenix[[i]]≤ x≤ bodydelenix[[i+1]]},{x,((bodydelenix[[i]]+bodydelenix[[i+1]])/2)}]]],
Quiet[First[FindMinimum[{funkce[x] ,bodydelenix[[i]]≤ x≤ bodydelenix[[i+1]]},{x,((bodydelenix[[i]]+bodydelenix[[i+1]])/2)}]]]],
{i,1,n,1}];
Sdolnich=((hornimez-dolnimez)/n)(∑_(i=1)^n)vrcholdolniho[[i]];
Shornich=((hornimez-dolnimez)/n)(∑_(i=1)^n)vrcholhorniho[[i]];
Spresny=(∫_dolnimez^hornimez)funkce[x]\[DifferentialD]x;

pisdolniS=StringJoin[ToString[Style["(Subscript[S, dolní])",barvacarydolnichobdelniku],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[Sdolnich,0.01]],barvacarydolnichobdelniku],StandardForm],ToString[Style[" (j^2)",barva],StandardForm]];
pishorniS=StringJoin[ToString[Style["(Subscript[S, horní])",barvacaryhornichobdelniku],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[Shornich,0.01]],barvacaryhornichobdelniku],StandardForm],ToString[Style[" (j^2)",barva],StandardForm]];
pispresnyS=StringJoin[ToString[Style["S",barvaplochy],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[Spresny,0.01]],barvaplochy],StandardForm],ToString[Style[" (j^2)",barva],StandardForm]];

grafik=Show[
Plot[funkce[x],{x,x1,x2},PlotStyle->{barvafce,Thickness[tloustka]}],
Graphics[{
If[zobrazitdolniobdelniky,
{{barva,Thickness[0.5tloustka],Dashed,Line[{{dolnimez,stredy},{dolnimez,funkce[dolnimez]}}]},
{barvadolnichobdelniku,Opacity[0.5],Table[Rectangle[{bodydelenix[[i]],stredy},{bodydelenix[[i+1]],vrcholdolniho[[i]]}],{i,1,n,1}]},
{barvacarydolnichobdelniku,Thickness[tloustka],Table[Line[{{bodydelenix[[i]],stredy},{bodydelenix[[i]],vrcholdolniho[[i]]},{bodydelenix[[i+1]],vrcholdolniho[[i]]},{bodydelenix[[i+1]],stredy}}],{i,1,n,1}]}},
Text[""]],
If[zobrazithorniobdelniky,
{{barvahornichobdelniku,Opacity[0.5],Table[Rectangle[{bodydelenix[[i]],stredy},{bodydelenix[[i+1]],vrcholhorniho[[i]]}],{i,1,n,1}]},
{barvacaryhornichobdelniku,Thickness[tloustka],Table[Line[{{bodydelenix[[i]],stredy},{bodydelenix[[i]],vrcholhorniho[[i]]},{bodydelenix[[i+1]],vrcholhorniho[[i]]},{bodydelenix[[i+1]],stredy}}],{i,1,n,1}]}},
Text[""]],
If[zobrazitbodydeleni,
{barvabodudeleni,PointSize[0.75velikostbodu],bodydeleni},
Text[""]],
If[zobrazitkrajeintervalu,
{{barvabodu1,PointSize[velikostbodu],dolnibod},
{barvabodu2,PointSize[velikostbodu],hornibod}},
Text[""]]
}],
FormatType->StandardForm,AspectRatio->Automatic,PlotRange->{{x1,x2},{y1,y2}},AxesOrigin->{0,0},AxesLabel->{Style["x",15,barva,FontFamily->Times],Style["y",15,barva,FontFamily->Times]},ImageSize->500
]],

{{dolnimez,dolnimez0,Style["a",15,barvabodu1]},dolnimezmin,dolnimezmax,deltadolnimez},
{{hornimez,hornimez0,Style["b",15,barvabodu2]},hornimezmin,hornimezmax,deltahornimez},
{{n,n0,Style["n",15,barva]},nmin,nmax,deltan},
Delimiter,
Item[Style["Zobrazit",20,barva,FontFamily->Times,Bold,Underlined],Alignment->Left],
{{zobrazitkrajeintervalu,True,Style["- kraje intervalu",15,barva,FontFamily->Times]},{True,False},
ControlType->Checkbox},
{{zobrazitbodydeleni,True,Style["- dělení",15,barva,FontFamily->Times]},{True,False},
ControlType->Checkbox},
{{zobrazithorniobdelniky,True,Style["- horní obdélníky",15,barvacaryhornichobdelniku,FontFamily->Times]},{True,False},
ControlType->Checkbox},
{{zobrazitdolniobdelniky,True,Style["- dolní obdélníky",15,barvacarydolnichobdelniku,FontFamily->Times]},{True,False},
ControlType->Checkbox},
{{zobrazitpopis,True,Style["- popis",15,barva,FontFamily->Times]},{True,False},
ControlType->Checkbox},
Delimiter,
Dynamic[
Grid[{
{If[zobrazitpopis,
Item[Style[pishorniS,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitpopis,
Item[Style[pispresnyS,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[zobrazitpopis,
Item[Style[pisdolniS,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, Aleš Ryšavý, 2010",10,Black,FontFamily->Times],"",Style["Určitý integrál",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.

UrcityIntegral