Operace s komplexními čísly

Následující aplet umožňuje názorně pochopit základní operace s komplexními čísly:
	sčítání,
	odčítání,
	násobení,
	dělení,
	umocňování.
Pomocí posuvníků lze měnit reálnou a imaginární část dvou komplexních čísel a mocninu. Volby umožňují zobrazit také k daným komplexním číslům popisky, průvodiče, argumenty.
V případě volby operace sčítání, odčítání, násobení nebo dělení, NEMÁ VÝZNAM nastavování posuvníku n. V případě operace umocňování NEMÁ VÝZNAM nastavování koeficientů (Subscript[a, 2]) a (Subscript[b, 2]).

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

jmenosouboru="komplex_operace_.jpg";
cesta=NotebookDirectory[];
pocetulozeni=0;

x1=-10;x2=-x1;
y1=-10;y2=-y1;
deltax=1;deltay=1;
deltaa=0.5;deltab=0.5;
n1=0;n2=4;deltan=0.1;
polomer=0.075x2;

seznamoperaci={"Součet","Rozdíl","Součin","Podíl","Mocnina"};

tloustka=0.005;
velikostbodu=0.02;

barva=Black;
barvacislo1=Blue;
barvacislo2=Red;
barvaa1=Darker[barvacislo1];
barvab1=Lighter[barvacislo1];
barvaa2=Darker[barvacislo2];
barvab2=Lighter[barvacislo2];
barvacislo=Magenta;
barvapruvodic1=barvacislo1;
barvapruvodic2=barvacislo2;
barvapruvodic=barvacislo;
barvan=Orange;
barvavarovani=Red;

OperaceKomplexy=Manipulate[Deploy[
z1=a1+b1 I;
z2=a2+b2 I;
chyba=False;
If[typoperace==seznamoperaci[[1]],
{vysledek=z1+z2,
nadpis=StringJoin[ToString[Style["z",barvacislo],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style["(Subscript[z, 1])",barvacislo1],StandardForm],ToString[Style[" + ",barva],StandardForm],ToString[Style["(Subscript[z, 2])",barvacislo2],StandardForm]]},
If[typoperace==seznamoperaci[[2]],
{vysledek=z1-z2,
nadpis=StringJoin[ToString[Style["z",barvacislo],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style["(Subscript[z, 1])",barvacislo1],StandardForm],ToString[Style[" - ",barva],StandardForm],ToString[Style["(Subscript[z, 2])",barvacislo2],StandardForm]]},
If[typoperace==seznamoperaci[[3]],
{vysledek=z1*z2,
nadpis=StringJoin[ToString[Style["z",barvacislo],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style["(Subscript[z, 1])",barvacislo1],StandardForm],ToString[Style[" * ",barva],StandardForm],ToString[Style["(Subscript[z, 2])",barvacislo2],StandardForm]]},
If[typoperace==seznamoperaci[[4]],
{If[Abs[z2]≠0,
vysledek=(z1/z2),
chyba=True],
nadpis=StringJoin[ToString[Style["z",barvacislo],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style["(Subscript[z, 1])",barvacislo1],StandardForm],ToString[Style[" : ",barva],StandardForm],ToString[Style["(Subscript[z, 2])",barvacislo2],StandardForm]]},
If[typoperace==seznamoperaci[[5]],
{vysledek=(z1^n),
nadpis=StringJoin[ToString[Style["z",barvacislo],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style["(Subscript[z, 1])",barvacislo1],StandardForm],ToString[Style[Superscript["",n],barvan],StandardForm]]},
""]]]]];

prumetcisla1x=Line[{{a1,0},{a1,b1}}];
prumetcisla1y=Line[{{0,b1},{a1,b1}}];
prumetcisla2x=Line[{{a2,0},{a2,b2}}];
prumetcisla2y=Line[{{0,b2},{a2,b2}}];
pruvodic1=Line[{{0,0},{a1,b1}}];
cislo1=Point[{a1,b1}];
pruvodic2=Line[{{0,0},{a2,b2}}];
cislo2=Point[{a2,b2}];
pruvodicvysledek=Line[{{0,0},{Re[vysledek],Im[vysledek]}}];
cislovysledek=Point[{Re[vysledek],Im[vysledek]}];

fi1=Arg[z1];
fi2=Arg[z2];
If[fi1<0,
fi1=2π+Arg[z1],
""];
If[fi2<0,
fi2=2π+Arg[z2],
""];
If[chyba==False,
{fivysledek=Arg[vysledek];
If[fivysledek<0,
fivysledek=2π+Arg[vysledek],
""],
argumentvysledek=Circle[{0,0},2polomer,{0,fivysledek}],
avysledek=Round[Re[vysledek],0.01],
bvysledek=Round[Im[vysledek],0.01],
predpis=StringJoin[ToString[Style["z",barvacislo],StandardForm],ToString[Style[" = ",barva],StandardForm]],
If[avysledek≠0,
predpis=StringJoin[predpis,ToString[Style[ToString[avysledek],barvacislo],StandardForm]],
""],
If[bvysledek≠0,
If[bvysledek>0,
If[avysledek≠0,
predpis=StringJoin[predpis,ToString[Style[" + ",barva],StandardForm],ToString[Style[ToString[bvysledek],barvacislo],StandardForm],ToString[Style["I",barva],StandardForm]],
predpis=StringJoin[predpis,ToString[Style[ToString[bvysledek],barvacislo],StandardForm],ToString[Style["I",barva],StandardForm]]],
If[avysledek≠0,
predpis=StringJoin[predpis,ToString[Style[" + (",barva],StandardForm],ToString[Style[ToString[bvysledek],barvacislo],StandardForm],ToString[Style[")I",barva],StandardForm]],
predpis=StringJoin[predpis,ToString[Style[ToString[bvysledek],barvacislo],StandardForm],ToString[Style["I",barva],StandardForm]]]],
If[avysledek==0,
predpis=StringJoin[predpis,ToString[Style[ToString[avysledek],barvacislo],StandardForm]],
""]],
pisuhel=StringJoin[ToString[Style["φ",barvacislo],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[((180.fivysledek)/π),0.01]],barvacislo],StandardForm],ToString[Style["°",barva],StandardForm]],
pruvodicpom=Line[{{0,0},{2polomer Cos[fivysledek],2polomer Sin[fivysledek]}}]},
""];

argument1=Circle[{0,0},polomer,{0,fi1}];
argument2=Circle[{0,0},1.5polomer,{0,fi2}];
pruvodic2pom=Line[{{0,0},{2polomer Cos[fi2],2polomer Sin[fi2]}}];
predpis1=StringJoin[ToString[Style["(Subscript[z, 1])",barvacislo1],StandardForm],ToString[Style[" = ",barva],StandardForm]];
If[a1≠0,
predpis1=StringJoin[predpis1,ToString[Style[ToString[a1],barvaa1],StandardForm]],
""];
If[b1≠0,
If[b1>0,
If[a1≠0,
predpis1=StringJoin[predpis1,ToString[Style[" + ",barva],StandardForm],ToString[Style[ToString[b1],barvab1],StandardForm],ToString[Style["I",barva],StandardForm]],
predpis1=StringJoin[predpis1,ToString[Style[ToString[b1],barvab1],StandardForm],ToString[Style["I",barva],StandardForm]]],
If[a1≠0,
predpis1=StringJoin[predpis1,ToString[Style[" + (",barva],StandardForm],ToString[Style[ToString[b1],barvab1],StandardForm],ToString[Style[")I",barva],StandardForm]],
predpis1=StringJoin[predpis1,ToString[Style[ToString[b1],barvab1],StandardForm],ToString[Style["I",barva],StandardForm]]]],
If[a1==0,
predpis1=StringJoin[predpis1,ToString[Style[ToString[a1],barvaa1],StandardForm]],
""]];
predpis2=StringJoin[ToString[Style["(Subscript[z, 2])",barvacislo2],StandardForm],ToString[Style[" = ",barva],StandardForm]];
If[a2≠0,
predpis2=StringJoin[predpis2,ToString[Style[ToString[a2],barvaa2],StandardForm]],
""];
If[b2≠0,
If[b2>0,
If[a2≠0,
predpis2=StringJoin[predpis2,ToString[Style[" + ",barva],StandardForm],ToString[Style[ToString[b2],barvab2],StandardForm],ToString[Style["I",barva],StandardForm]],
predpis2=StringJoin[predpis2,ToString[Style[ToString[b2],barvab2],StandardForm],ToString[Style["I",barva],StandardForm]]],
If[a2≠0,
predpis2=StringJoin[predpis2,ToString[Style[" + (",barva],StandardForm],ToString[Style[ToString[b2],barvab2],StandardForm],ToString[Style[")I",barva],StandardForm]],
predpis2=StringJoin[predpis2,ToString[Style[ToString[b2],barvab2],StandardForm],ToString[Style["I",barva],StandardForm]]]],
If[a2==0,
predpis2=StringJoin[predpis2,ToString[Style[ToString[a2],barvaa2],StandardForm]],
""]];
pisuhel1=StringJoin[ToString[Style["(Subscript[φ, 1])",barvacislo1],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[((180.fi1)/π),0.01]],barvacislo1],StandardForm],ToString[Style["°",barva],StandardForm]];
pisuhel2=StringJoin[ToString[Style["(Subscript[φ, 2])",barvacislo2],StandardForm],ToString[Style[" = ",barva],StandardForm],ToString[Style[ToString[Round[((180.fi2)/π),0.01]],barvacislo2],StandardForm],ToString[Style["°",barva],StandardForm]];

grafik=Show[
Graphics[{
If[chyba==False,
{Text[Style[nadpis,20,FontFamily->Times],{x1-deltax,y2+2deltay},{Left,Top}],
{barvacislo1,PointSize[velikostbodu],cislo1},
If[typoperace≠seznamoperaci[[5]],
{barvacislo2,PointSize[velikostbodu],cislo2},
Text[""]],
{barvacislo,PointSize[velikostbodu],cislovysledek},
If[popsat,
{Text[Style["(Subscript[z, 1])",15,barvacislo1,FontFamily->Times],{a1+0.05x2,b1},{Left,Center}],
If[zobrazitprumety,
{{barvacislo1,Dotted,Thickness[0.2tloustka],prumetcisla1x},
{barvacislo1,Dotted,Thickness[0.2tloustka],prumetcisla1y},
Text[Style[ToString[Round[a1,0.1]],10,barvaa1,FontFamily->Times],{a1,0.02y1},{Center,Top}],
Text[Style[ToString[Round[b1,0.1]],10,barvab1,FontFamily->Times],{0.02x1,b1},{Right,Center}]},
Text[""]],
If[typoperace≠seznamoperaci[[5]],
{Text[Style["(Subscript[z, 2])",15,barvacislo2,FontFamily->Times],{a2+0.05x2,b2},{Left,Center}],
If[zobrazitprumety,
{{barvacislo2,Dotted,Thickness[0.2tloustka],prumetcisla2x},
{barvacislo2,Dotted,Thickness[0.2tloustka],prumetcisla2y},
Text[Style[ToString[Round[a2,0.1]],10,barvaa2,FontFamily->Times],{a2,0.02y1},{Center,Top}],
Text[Style[ToString[Round[b2,0.1]],10,barvab2,FontFamily->Times],{0.02x1,b2},{Right,Center}]},
Text[""]]},
Text[""]],
Text[Style["z",15,barvacislo,FontFamily->Times],{Re[vysledek]+0.05x2,Im[vysledek]},{Left,Center}]},
Text[""]],
If[zobrazitpruvodic,
{{barvapruvodic1,Thickness[0.4tloustka],pruvodic1},
{barvapruvodic,Dotted,Thickness[0.4tloustka],pruvodicpom},
{barvapruvodic,Thickness[0.4tloustka],pruvodicvysledek},
If[typoperace≠seznamoperaci[[5]],
{{barvapruvodic2,Dotted,Thickness[0.4tloustka],pruvodic2pom},
{barvapruvodic2,Thickness[0.4tloustka],pruvodic2}},
Text[""]]},
Text[""]],
If[zobrazitargumenty&&zobrazitpruvodic,
{{barvapruvodic1,Thickness[0.4tloustka],argument1},
{barvapruvodic,Thickness[0.4tloustka],argumentvysledek},
If[typoperace≠seznamoperaci[[5]],
{barvapruvodic2,Thickness[0.4tloustka],argument2},
Text[""]]},
Text[""]]},
Text[Style["NELZE DĚLIT NULOVÝM ČÍSLEM!",25,barvavarovani,FontFamily->Times],{((x1+x2)/2),((y1+y2)/2)},{Center,Center}]]
}],
FormatType->StandardForm,AspectRatio->Automatic,Axes->True,Ticks->None,AxesLabel->{"Re(z)","Im(z)"},PlotRange->{{x1-deltax,x2+deltax},{y1-deltay,y2+deltay}},ImageSize->470]],

{{a1,0.5x1,Style["(Subscript[a, 1])",15,barvaa1]},x1,x2,deltaa},
{{b1,0.5y2,Style["(Subscript[b, 1])",15,barvab1]},y1,y2,deltab},
Delimiter,
{{a2,0.5x2,Style["(Subscript[a, 2])",15,barvaa2]},x1,x2,deltaa},
{{b2,0.5y2,Style["(Subscript[b, 2])",15,barvab2]},y1,y2,deltab},
Delimiter,
{{n,0,Style["n",15,barvan]},n1,n2,deltan},
Delimiter,
{{typoperace,seznamoperaci[[1]],Style["operace",15,barva,FontFamily->Times]},seznamoperaci},
Delimiter,
Item[Style["Zobrazit",15,barva,FontFamily->Times,Bold,Underlined],Alignment->Left],
{{zobrazitpruvodic,True,Style["průvodiče",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitargumenty,True,Style["argumenty",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{popsat,True,Style["popisky",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
{{zobrazitprumety,False,Style["průměty",15,barva,FontFamily->Times]},{True,False},ControlType->Checkbox},
Delimiter,
Dynamic[
Grid[{
{If[popsat,
Item[Style[predpis1,20,barva,FontFamily->Times],Alignment->Left],
""]},
{If[popsat&&zobrazitargumenty,
Item[Style[pisuhel1,20,barva,FontFamily->Times],Alignment->Left],
""]},
{Item[Style["  ",2,barva,FontFamily->Times],Alignment->Left]},
{If[popsat&&typoperace≠seznamoperaci[[5]],
Item[Style[predpis2,20,barva,FontFamily->Times],Alignment->Left],
""]},
{If[popsat&&zobrazitargumenty&&typoperace≠seznamoperaci[[5]],
Item[Style[pisuhel2,20,barva,FontFamily->Times],Alignment->Left],
""]},
{Item[Style["  ",10,barva,FontFamily->Times],Alignment->Left]},
{If[popsat&&chyba==False,
Item[Style[predpis,20,barva,FontFamily->Times],Alignment->Left],
""]},
{If[popsat&&zobrazitargumenty&&chyba==False,
Item[Style[pisuhel,20,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["Operace s komplexními čísly",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.

OperaceKomplexy