<<PlotLegends`
p:=5/10 
q:=1-p
k:=2 

A=SparseArray[{{i_,1}/;i<k+1->q,{i_,j_}/;i+j==2i+1->p,{k+1,k+1}->1},{k+1,k+1},0];  (*matice pravděpodobnosti předchodu*)
l:=UnitVector[k+1,1]
r:=UnitVector[k+1,k]
Exact[n_]:=p*l.MatrixPower[A,IntegerPart[n]-1].r (*funkce pro výpočet přesné hodnoty pravděpodobnosti prvního výskytu iterace délky k po n krocích*)

CS12[n_]:=q*p^k*(Exp[-(IntegerPart[n]-2k)*p^k]) (*první a druhá Chen-Steinova aproximace*)

CS3[n_]:=q*p^k*(Exp[-(IntegerPart[n]-2k)*q*p^k]) (*třetí Chen-Steinova aproximace*)

ev[x_]:=SetAccuracy[1+q*p^k*x^(k+1),1000] (*pomocná funkce pro výpočet kořene z ve Fellerově aproximaci*)
z:=SetAccuracy[Nest[ev,1,500],10]
Feller[n_]:=q*p^k*((1-p*z)/((k+1-k*z)*q))*(1/(z^(n-k))) (*Fellerova aproximace*)

M[n_]:=q*p^k*((1-p^k)^(n-2k)+(1-q*p^k)^(n-2k))/2 (*aproximace M*)

FEUB[n_]:=Feller[n]+q*p^k*((2(k-1)*p^(n-k))/((k+1+k*p^(-1))*q
))  (*horní a dolní Fellerovy meze*)
FELB[n_]:=Feller[n]-q*p^k*((2(k-1)*p^(n-k))/((k+1+k*p^(-1))*q
))
FEUB2[n_]:=Feller[n]+q*p^k*((2(k-1)*p)/(k*q(1+p)))(*horní a dolní druhé Fellerovy meze*)


FELB2[n_]:=Feller[n]-q*p^k*((2(k-1)*p)/(k*q(1+p)))

CS1UB[n_]:=CS12[n]+q*p^k*((2k-1)*p^k+2(k-1)*p)(*Horní a dolní první Chen-Steinova mez*)
CS1LB[n_]:=CS12[n]-q*p^k*((2k-1)*p^k+2(k-1)*p)

CS2UB[n_]:=CS12[n]+q*p^k*(((2p)/q)*(1-p^(k-1))-(2k-3)*p^k)(*horní a dolní druhá Chen-Steinova mez*)
CS2LB[n_]:=CS12[n]-q*p^k*(((2p)/q)*(1-p^(k-1))-(2k-3)*p^k)

CS3UB[n_]:=CS3[n]+q*p^k*((2k*q+1)p^k)(*horní a dolní třetí Chen-Steinova mez*)
CS3LB[n_]:=CS3[n]-q*p^k*((2k*q+1)p^k)

HM[n_]:=q*p^k*(1-q*p^k)^(n-2k) (*horní a dolní meze HM a DM*)
DM[n_]:=q*p^k*(1-p^k)^(n-2k)

ShowLegend[DiscretePlot[{Abs[Exact[n]-CS3[n]],Abs[Exact[n]-M[n]],Abs[Exact[n]-CS12[n]],Abs[Exact[n]-Feller[n]]},{n,2k+1,120},
PlotRange->{{0,Automatic},{0,a*Max[Abs[Exact[2k+1]-CS3[2k+1]],Abs[Exact[2k+1]-M[2k+1]],Abs[Exact[2k+1]-Feller[2k+1]],1.3*Abs[Exact[2k+1]-Abs[CS12[2k+1]]]]}},PlotStyle->{Red,Blue,Magenta,Black},AxesLabel->{n,odchylka}],{{{Graphics[{Red,Point[{0,0}]}],"3. C-S aproximace"},{Graphics[{Blue,Point[{0,0}]}],"aproximace M"},{Graphics[{Magenta,Point[{0,0}]}],"1. a 2. C-S aproximace"},{Graphics[{Black,Point[{0,0}]}],"Fellerova aproximace"}},LegendPosition->{0.4,-0.2},LegendTextSpace->7}]
(*graf zaznamenávající absolutní odchylky aproximací od přesné hodnoty pravděpodobnosti, že k prvnímu výskytu iterace délky k dojde po n krocích *)

ShowLegend[DiscretePlot[{Exact[n],FEUB[n],FELB[n],CS1UB[n],CS1LB[n],CS2LB[n],CS2UB[n],CS3UB[n],CS3LB[n],DM[n],HM[n]},{n,2k+1,40},PlotRange->{{0,Automatic},{0,1.1*CS1UB[2k+1]}},PlotStyle->{Red,Black,Black,Green,Green,Orange,Orange,Blue,Blue,Magenta,Magenta},AxesLabel->{n, meze}],{{{Graphics[{Red,Point[{0,0}]}]," presna hodnota"},{Graphics[{Green,Point[{0,0}]}]," 1. C-S meze"},{Graphics[{Blue,Point[{0,0}]}]," 2. C-S meze"},{Graphics[{Magenta,Point[{0,0}]}]," meze HM a DM"},{Graphics[{Orange,Point[{0,0}]}]," 3. C-S meze"},{Graphics[{Black,Point[{0,0}]}]," Fellerovy meze"}},LegendPosition->{0.3,-0.18},LegendTextSpace->12,LegendBorderSpace->0.5}]
(*graf zaznamenávající přesnou hodnotu pravděpodobnosti, že k prvnímu výskytu iterace délky k dojde po n krocích a hodnoty horních a dolních mezích jednotlivých aproximací*)

ShowLegend[DiscretePlot[{Exact[n],FEUB[n],FELB[n],FEUB2[n],FELB2[n]},{n,2k+1,30},PlotRange->{{0,Automatic},Automatic},PlotStyle->{Red,Blue,Blue,Green,Green},AxesLabel->{n, meze}],{{{Graphics[{Red,Point[{0,0}]}],"presna hodnota"},{Graphics[{Blue,Point[{0,0}]}],"Fellerovy meze"},{Graphics[{Green,Point[{0,0}]}],"2. Fellerovy meze"}},LegendPosition->{0.3,0.15},LegendTextSpace->7}]
(*graf srovnávající první a druhé Fellerovy meze*)