Seznámení se systémem Mathematica 7

Fyzikální a jiné aplikace

© Jaroslav Reichl, SPŠST Panská, Praha
reichl@panska.cz

Obsah

Prezentace obsahuje tato témata:

Booleovská algebra
27. úkol

Jaroslav Reichl, SPŠST Panská, Praha, © 2011

Booleovská algebra

And[(Subscript[x, 1]), (Subscript[x, 2]), ...] - konjukce (a, a zároveň) proměnných (Subscript[x, 1]), (Subscript[x, 2]), ...;
Or[(Subscript[x, 1]), (Subscript[x, 2]), ...] - disjunkce (nebo) proměnných (Subscript[x, 1]), (Subscript[x, 2]), ...;
Xor[(Subscript[x, 1]), (Subscript[x, 2]), ...] - vylučovací nebo (exlusivní nebo) proměnných (Subscript[x, 1]), (Subscript[x, 2]), ...;
Implies[(Subscript[x, 1]), (Subscript[x, 2])] - implikace mezi proměnnými (Subscript[x, 1]) a (Subscript[x, 2]);
				Poznámka: Znak => pro označení implikace lze zapsat takto: Esc=>Esc.
Equivalent[(Subscript[x, 1]), (Subscript[x, 2]), ...] - ekvivalence mezi proměnnými (Subscript[x, 1]), (Subscript[x, 2]), ...;
				Poznámka: Znak ⇔ pro označení implikace lze zapsat takto: Esc<=>Esc.
Not[vyraz] nebo !vyraz nebo ¬vyraz - vylučovací nebo (exlusivní nebo) proměnných (Subscript[x, 1]), (Subscript[x, 2]), ...;
				Poznámka: Znak ¬ pro označení negace lze zapsat takto: EscnotEsc.
Nand[(Subscript[x, 1]), (Subscript[x, 2]), ...] - negace konjukce proměnných (Subscript[x, 1]), (Subscript[x, 2]), ...;
Nor[(Subscript[x, 1]), (Subscript[x, 2]), ...] - negace disjunkce (nebo) proměnných (Subscript[x, 1]), (Subscript[x, 2]), ...;
Xnor[(Subscript[x, 1]), (Subscript[x, 2]), ...] - negace vylučovacího nebo (exlusivního nebo) proměnných (Subscript[x, 1]), (Subscript[x, 2]), ...;

And[a,b]
%//TraditionalForm

BooleanTable[vyraz] - vrací tabulku pravdivostních hodnot zadaného výrazu vyraz pro všechny kombinace vstupních proměnných.

BooleanTable[And[a,b]]

Boole[vyraz] - konvertuje hodnoty logických proměnných True a False na čísla 1 a 0.

Boole[BooleanTable[a\[Implies]b]]

BooleanMinimize[vyraz] - minimalizuje zadaný výraz vyraz s využitím pravidel Booleovy algebry. Výsledek vypíše v disjuktivní formě (tj. výsledné dílčí výrazy budou spojené pomocí spojek disjuknce).
BooleanMinimize[vyraz,forma] - minimalizuje zadaný výraz vyraz s využitím pravidel Booleovy algebry. Výsledek vypíše ve formě, která je zadaná v parametru forma ("NAND", "NOR", ...).

vyraz=¬(A∧B);
BooleanMinimize[vyraz]//TraditionalForm

vyraz=¬(A∧B);
BooleanMinimize[vyraz,"NOR"]//TraditionalForm

Jaroslav Reichl, SPŠST Panská, Praha, © 2011

27. úkol: Booleovská algebra

Zobrazte přehledně pravdivostní tabulku pro operaci A=>(B∧C).

Řešení

ClearAll["Global`*"];
 barva1radku=LightYellow;
barvavysledku=Lighter[Red,0.8];

TruthTable[vars_List,expr_]:=Distribute[
Table[{False,True},{Length[vars]}],
List,List,List,
{##,Function[vars,expr][##]}&]

DisplayTruthTable[vars_List,expr_]:=With[
{t=ReplaceAll[TruthTable[vars,expr],{True->"1",False->"0"}]},
Grid[
Prepend[t,Append[vars,expr]],
Spacings->{2,1},Background->{{None,None,None,barvavysledku},{1->barva1radku}},ItemStyle->{20,Bold},Dividers->{{Directive[Black,Thickness[1]],{1->{Black,Thickness[3]},-1->{Black,Thickness[3]}}},{Directive[Black,Thickness[1]],{1->{Black,Thickness[3]},2->{Black,Thickness[3]},-1->{Black,Thickness[3]}}}}]]

DisplayTruthTable[{A,B,C},A\[Implies](B∧C)]

Logickou síť je dána takto: vstupem jsou tři proměnné (realizované pomocí LED) a výstupem je logická jednička v případě, že svítí alespoň dvě LED, a logická nula v opačném případě.
Označíme-li vstupní proměnné A, B, C, pak logická funkce popisující toto zapojení má tvar: y=(¬A∧B∧C) ∨(A∧¬B∧C)∨(A∧B∧¬C)∨(A∧B∧C). Proměnná znamená, že daná LED svítí, negace proměnné znamená, že daná LED nesvítí.
Zobrazte pravdivostní tabulku této funkce a zjednodušte jí. Zapište ji v běžném tvaru a ve tvaru logických spojek NAND.

Řešení

ClearAll["Global`*"];
barva1radku=LightYellow;
barvavysledku=Lighter[Red,0.8];

TruthTable[vars_List,expr_]:=Distribute[
Table[{False,True},{Length[vars]}],
List,List,List,
{##,Function[vars,expr][##]}&]

DisplayTruthTable[vars_List,expr_]:=With[
{t=ReplaceAll[TruthTable[vars,expr],{True->"1",False->"0"}]},
Grid[
Prepend[t,Append[vars,expr]],
Spacings->{2,1},Background->{{None,None,None,barvavysledku},{1->barva1radku}},ItemStyle->{20,Bold},Dividers->{{Directive[Black,Thickness[1]],{1->{Black,Thickness[3]},-1->{Black,Thickness[3]}}},{Directive[Black,Thickness[1]],{1->{Black,Thickness[3]},2->{Black,Thickness[3]},-1->{Black,Thickness[3]}}}}]]

operace=(¬A∧B∧C)∨(A∧¬B∧C)∨(A∧B∧¬C)∨(A∧B∧C);
DisplayTruthTable[{A,B,C},operace]
vysledek=BooleanMinimize[operace];
vysledek2=BooleanMinimize[operace,"NAND"];
Print["Zjednodušený tvar logické funkce je: ",vysledek]
Print["Zjednodušený tvar logické funkce ve formě NAND je: ",vysledek2]

Jaroslav Reichl, SPŠST Panská, Praha, © 2011