Logaritmická funkce y = a.(Subscript[log, b])(c.x + d) + e

Následující aplet umožňuje názorně pochopit konstrukci grafu funkce y = a.(Subscript[log, b])(c.x + d) + e. Pomocí posuvníků lze měnit parametry funkce (tj. koeficienty a, b, c, d a e).
Volitelně lze zobrazit:
	- graf inverzní funkce k dané funkce;
	- pomocné osy kartézského systému souřadnic;
	- předpis dané funkce i předpis funkce inverzní (předpisy nejsou z didaktických důvodů matematicky zjednodušeny - záměrně byly ponechány tak, aby bylo jasné, jak se změnily role jednotlivých koeficientů);
	- definiční obor a obor hodnot.

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

ClearAll["Global`*"];jmenosouboru="fce_logaritmicka_.jpg";
cesta=NotebookDirectory[];
pocetulozeni=0;
x1=-10;x2=-x1;
y1=-10;y2=-y1;

a0=1;amin=-5;amax=5;deltaa=0.1;
b0=2;bmin=0.1;bmax=10;deltab=0.1;
c0=1;cmin=-5;cmax=5;deltac=0.1;
d0=0;dmin=-5;dmax=5;deltad=0.1;
e0=0;emin=-5;emax=5;deltae=0.1;

tloustka=0.005;
velikostpisma=20;

barva=Black;
barvagrafu=Red;
barvaa=Darker[Red];
barvab=Blue;
barvac=Darker[Green,0.3];
barvad=Magenta;
barvae=Purple;
barvainv=Orange;

LogaritmickaFunkce=Manipulate[Deploy[
funkce[x_]:=a Log[b,c x+d]+e;
funkceinv[x_]:=(1/c) (b^((x-e)/a))-(d/c);
If[c≠0,
{pomocnaosax=Line[{{x1,e},{x2,e}}],
pomocnaosay=Line[{{-(d/c),y1},{-(d/c),y2}}],
If[a≠0,
{pomocnainvosax=Line[{{x1,-(d/c)},{x2,-(d/c)}}],
pomocnainvosay=Line[{{e,y1},{e,y2}}]},
""]},
""];

(*Hledání předpisu funkce.*)
predpisfunkce="f: y = ";
If[b≠1&&(c≠0∨(c==0&&d>0)),
{If[a≠0,
{If[a<0,
predpisfunkce=StringJoin[predpisfunkce,ToString[Style["- ",barva],StandardForm]],
""],
If[Abs[a]≠1,
predpisfunkce=StringJoin[predpisfunkce,ToString[Style[ToString[Abs[a]],barvaa],StandardForm]," "],
""],
If[b≠10,
predpisfunkce=StringJoin[predpisfunkce,ToString[Style[ToString[Subscript["log",ToString[Style[ToString[b],barvab],StandardForm]],StandardForm],barva],StandardForm]],
predpisfunkce=StringJoin[predpisfunkce,"log"]],
If[c≠0,
{If[c>0,
predpisfunkce=StringJoin[predpisfunkce,"("],
predpisfunkce=StringJoin[predpisfunkce,"(-"]],
If[Abs[c]≠1,
predpisfunkce=StringJoin[predpisfunkce,ToString[Style[ToString[Abs[c]],barvac],StandardForm]],
""],
predpisfunkce=StringJoin[predpisfunkce,"x"]},
predpisfunkce=StringJoin[predpisfunkce,"("]],
If[d≠0,
{If[d>0,
If[c≠0,
predpisfunkce=StringJoin[predpisfunkce," + "],
""],
predpisfunkce=StringJoin[predpisfunkce," - "]],
predpisfunkce=StringJoin[predpisfunkce,ToString[Style[ToString[Abs[d]],barvad],StandardForm],")"]},
predpisfunkce=StringJoin[predpisfunkce,")"]],
If[e≠0,
{If[e>0,
predpisfunkce=StringJoin[predpisfunkce," + "],
predpisfunkce=StringJoin[predpisfunkce," - "]],
predpisfunkce=StringJoin[predpisfunkce,ToString[Style[ToString[Abs[e]],barvae],StandardForm]]},
""]},
If[e<0,
predpisfunkce=StringJoin[predpisfunkce,"-",ToString[Style[ToString[Abs[e]],barvae],StandardForm]],
predpisfunkce=StringJoin[predpisfunkce,ToString[Style[ToString[Abs[e]],barvae],StandardForm]]]]},
predpisfunkce="Funkce není definována!"];
(*Hledání předpisu funkce.*)

(*Hledání předpisu inverzní funkce.*)
exponent=" ";
If[a≠0&&b≠1&&c≠0,
{If[a>0,
znamenko="",
znamenko="-"],
exponent=StringJoin[exponent,znamenko,ToString[DisplayForm[FractionBox["x",ToString[Style[ToString[Abs[a]],barvaa],StandardForm]]],StandardForm]],
If[e≠0,
{If[a e>0,
znamenko=" - ",
znamenko=" + "],
exponent=StringJoin[exponent,znamenko,ToString[DisplayForm[FractionBox[ToString[Style[ToString[Abs[e]],barvae],StandardForm],ToString[Style[ToString[Abs[a]],barvaa],StandardForm]]],StandardForm]]},
""],
predpisinvfce="(f^(-1)): y = ",
If[c>0,
znamenko="",
znamenko="-"],
predpisinvfce=StringJoin[predpisinvfce,znamenko,ToString[DisplayForm[FractionBox["1",ToString[Style[ToString[Abs[c]],barvac],StandardForm]]],StandardForm],ToString[Style[ToString[Superscript[ToString[Style[ToString[b],barvab],StandardForm],exponent],StandardForm],barva],StandardForm]],
If[d≠0,
{If[c d>0,
znamenko=" - ",
znamenko=" + "],
predpisinvfce=StringJoin[predpisinvfce,znamenko,ToString[DisplayForm[FractionBox[ToString[Style[ToString[Abs[d]],barvad],StandardForm],ToString[Style[ToString[Abs[c]],barvac],StandardForm]]],StandardForm]]},
""]},
predpisinvfce="Inverzní funkce není definována!"];
(*Hledání předpisu inverzní funkce.*)

(*Definiční obor a obor hodnot.*)
If[b≠1&&(c≠0∨(c==0&&d>0)),
{If[a==0∨(c==0&&d>0),
{defobor="ℝ",
oborhodnot=StringJoin["{",ToString[Round[a Log[b,d]+e,0.1]],"}"]},
{If[c d>0,
znamenko="-",
znamenko=""],
If[c<0,
defobor=StringJoin["(-∞; ",znamenko,ToString[DisplayForm[FractionBox[ToString[Style[ToString[Abs[d]],barvad],StandardForm],ToString[Style[ToString[Abs[c]],barvac],StandardForm]]],StandardForm],")"],
defobor=StringJoin["(",znamenko,ToString[DisplayForm[FractionBox[ToString[Style[ToString[Abs[d]],barvad],StandardForm],ToString[Style[ToString[Abs[c]],barvac],StandardForm]]],StandardForm],"; ∞)"]],
oborhodnot="ℝ"}]}];

If[zobrazitinverznifci,
If[a≠0&&b≠1&&c≠0,
{defobor=StringJoin[ToString[Style[ToString[Subscript["D",ToString[Style["f",barvagrafu],StandardForm]],StandardForm],barva],StandardForm]," = ",ToString[Style[ToString[Subscript["H",Superscript[ToString[Style["f",barvainv],StandardForm],ToString[Style["-1",barvainv],StandardForm]]],StandardForm],barva],StandardForm]," = ",defobor],
oborhodnot=StringJoin[ToString[Style[ToString[Subscript["H",ToString[Style["f",barvagrafu],StandardForm]],StandardForm],barva],StandardForm]," = ",ToString[Style[ToString[Subscript["D",Superscript[ToString[Style["f",barvainv],StandardForm],ToString[Style["-1",barvainv],StandardForm]]],StandardForm],barva],StandardForm]," = ",oborhodnot]}],
{defobor=StringJoin[ToString[Style[ToString[Subscript["D",ToString[Style["f",barvagrafu],StandardForm]],StandardForm],barva],StandardForm]," = ",defobor],
oborhodnot=StringJoin[ToString[Style[ToString[Subscript["H",ToString[Style["f",barvagrafu],StandardForm]],StandardForm],barva],StandardForm]," = ",oborhodnot]}];
(*Definiční obor a obor hodnot.*)

grafik=Show[
If[zobrazitinverznifci,
If[a≠0&&b≠1&&c≠0,
Plot[{funkce[x],funkceinv[x]},{x,x1,x2},PlotStyle->{{barvagrafu,Thickness[tloustka]},{barvainv,Thickness[tloustka]}},PlotRange->{{x1,x2},{y1,y2}},AxesOrigin->{0,0}],
Plot[0,{x,x1,x2},PlotStyle->{barva,Thickness[0.1tloustka]},PlotRange->{{x1,x2},{y1,y2}},AxesOrigin->{0,0}]],
If[b≠1&&(c≠0∨(c==0&&d>0)),
Plot[funkce[x],{x,x1,x2},PlotStyle->{barvagrafu,Thickness[tloustka]},PlotRange->{{x1,x2},{y1,y2}},AxesOrigin->{0,0}],
Plot[0,{x,x1,x2},PlotStyle->{barva,Thickness[0.1tloustka]},PlotRange->{{x1,x2},{y1,y2}},AxesOrigin->{0,0}]]],

Graphics[{
If[zobrazitpomocneosy&&b≠1&&c≠0&&a≠0,
{{barvagrafu,Dashed,Thickness[0.4tloustka],pomocnaosax},
{barvagrafu,Dashed,Thickness[0.4tloustka],pomocnaosay},
If[zobrazitinverznifci,
{{barvainv,Dashed,Thickness[0.4tloustka],pomocnainvosax},
{barvainv,Dashed,Thickness[0.4tloustka],pomocnainvosay}},
Text[""]]},
Text[""]],
If[(zobrazitinverznifci==False&&(b==1∨(c==0&&(c≠0∨ d≤0))))∨(zobrazitinverznifci&&(a==0∨b==1∨c==0)),
Text[Style["G R A F   F U N K C E   N E L Z E   Z O B R A Z I T !",20,barvagrafu,FontFamily->Times,Bold],{((x1+x2)/2),((y1+y2)/2)},{Center,Bottom}],
Text[""]]
}],
FormatType->StandardForm,AspectRatio->Automatic,PlotRange->{{x1,x2},{y1,y2}},AxesLabel->{"x","y"},ImageSize->500
]],

{{a,a0,Style["a",15,barvaa]},amin,amax,deltaa},
{{b,b0,Style["b",15,barvab]},bmin,bmax,deltab},
{{c,c0,Style["c",15,barvac]},cmin,cmax,deltac},
{{d,d0,Style["d",15,barvad]},dmin,dmax,deltad},
{{e,e0,Style["e",15,barvae]},emin,emax,deltae},

Delimiter,
Item[Style["Zobrazit",15,barva,FontFamily->Times,Bold,Underlined],Alignment->Left],
{{zobrazitinverznifci,False,Style["inverzní funkci",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitpomocneosy,False,Style["pomocné osy",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
{{zobrazitdh,True,Style["D a H",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitpredpisfce,True,Style["předpis f",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitpredpisinvfce,False,Style["předpis (f^(-1))",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
Dynamic[
Grid[{
{If[zobrazitpredpisfce,
Item[Style[predpisfunkce,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{Item[Style[" ",1.5velikostpisma,barva,FontFamily->Times],Alignment->Left]},
{If[zobrazitinverznifci&&zobrazitpredpisinvfce,
Item[Style[predpisinvfce,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{Item[Style[" ",2velikostpisma,barva,FontFamily->Times],Alignment->Left]},
{If[(zobrazitdh&&zobrazitinverznifci==False&&b≠1&&(c≠0∨(c==0&&d>0)))∨(zobrazitdh&&zobrazitinverznifci&&a≠0&&b≠1&&c≠0),
Item[Style[defobor,velikostpisma,barva,FontFamily->Times],Alignment->Left],
""]},
{If[(zobrazitdh&&zobrazitinverznifci==False&&b≠1&&(c≠0∨(c==0&&d>0)))∨(zobrazitdh&&zobrazitinverznifci&&a≠0&&b≠1&&c≠0),
Item[Style[oborhodnot,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, 2008",10,Black,FontFamily->Times],"",Style["Logaritmická funkce y = a.(Subscript[log, b])(c.x + d) + e",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.

LogaritmickaFunkce