Algoritmus pro generování normálních magických čtverců

Podobné dokumenty
Algoritmus pro hledání nejkratší cesty orientovaným grafem

Magické čtverce. Tomáš Roskovec. Úvod

[1] LU rozklad A = L U

Maticí typu (m, n), kde m, n jsou přirozená čísla, se rozumí soubor mn veličin a jk zapsaných do m řádků a n sloupců tvaru:

Lineární algebra Operace s vektory a maticemi

Vektory a matice. Obsah. Aplikovaná matematika I. Carl Friedrich Gauss. Základní pojmy a operace

[1] Determinant. det A = 0 pro singulární matici, det A 0 pro regulární matici

0.1 Úvod do lineární algebry

Uspořádanou n-tici reálných čísel nazveme aritmetický vektor (vektor), ā = (a 1, a 2,..., a n ). Čísla a 1, a 2,..., a n se nazývají složky vektoru

II. Úlohy na vložené cykly a podprogramy

Matice. Přednáška MATEMATIKA č. 2. Jiří Neubauer. Katedra ekonometrie FEM UO Brno kancelář 69a, tel

Soustavy lineárních rovnic

0.1 Úvod do lineární algebry

Množinu všech matic typu m n nad tělesem T budeme označovat M m n (T ), množinu všech čtvercových matic stupně n nad T pak M n (T ).

Determinanty. Determinanty. Přednáška MATEMATIKA č. 3. Jiří Neubauer

1 Vektorové prostory.

Matematika (CŽV Kadaň) aneb Úvod do lineární algebry Matice a soustavy rovnic

Základy matematiky pro FEK

Cílem této kapitoly je uvedení pojmu matice a jejich speciálních typů. Čtenář se seznámí se základními vlastnostmi matic a s operacemi s maticemi

Příklad elektrický obvod se stejnosměrným zdrojem napětí

SOUČIN MATIC A m n B n p = C m p, přičemž: a i1 b 1j +a i2 b 2j + +a in b nj = c ij, i=1 m, j=1 p. Např: (-2) = -3

Základy maticového počtu Matice, determinant, definitnost

10. Soustavy lineárních rovnic, determinanty, Cramerovo pravidlo

Determinanty. Obsah. Aplikovaná matematika I. Pierre Simon de Laplace. Definice determinantu. Laplaceův rozvoj Vlastnosti determinantu.

Matice. Předpokládejme, že A = (a ij ) je matice typu m n: diagonálou jsou rovny nule.

Slovo ALGEBRA pochází z arabského al-jabr, což znamená nahrazení. Toto slovo se objevilo v názvu knihy

2.6. VLASTNÍ ČÍSLA A VEKTORY MATIC

KTE / PPEL Počítačová podpora v elektrotechnice

a počtem sloupců druhé matice. Spočítejme součin A.B. Označme matici A.B = M, pro její prvky platí:

Číselné vektory, matice, determinanty

1 Determinanty a inverzní matice

4EK213 Lineární modely. 12. Dopravní problém výchozí řešení

Soustava m lineárních rovnic o n neznámých je systém

Učební texty k státní bakalářské zkoušce Matematika Vlastní čísla a vlastní hodnoty. študenti MFF 15. augusta 2008

1/10. Kapitola 12: Soustavy lineárních algebraických rovnic

Zpracování náhodného vektoru. Ing. Michal Dorda, Ph.D.

DEFINICE Z LINEÁRNÍ ALGEBRY

Matice. a m1 a m2... a mn

1 0 0 u 22 u 23 l 31. l u11

4. Trojúhelníkový rozklad p. 1/20

Aplikovaná numerická matematika - ANM

D 11 D D n1. D 12 D D n2. D 1n D 2n... D nn

2. ZÁKLADY MATICOVÉ ALGEGRY 2.1. ZÁKLADNÍ POJMY

(Cramerovo pravidlo, determinanty, inverzní matice)

Kapitola 11: Vektory a matice:

vyjádřete ve tvaru lineární kombinace čtverců (lineární kombinace druhých mocnin). Rozhodněte o definitnosti kvadratické formy κ(x).

Hisab al-džebr val-muqabala ( Věda o redukci a vzájemném rušení ) Muhammada ibn Músá al-chvárizmího (790? - 850?, Chiva, Bagdád),

Magické čtverce. Bára Kociánová

1 Řešení soustav lineárních rovnic

Připomenutí co je to soustava lineárních rovnic

9.3. Úplná lineární rovnice s konstantními koeficienty

LINEÁRNÍ ROVNICE S ABSOLUTNÍ HODNOTOU

Univerzitní licence MATLABu. Pište mail na: se žádostí o nejnovější licenci MATLABu.

MENDELOVA UNIVERZITA V BRNĚ LDF MT MATEMATIKA VEKTORY, MATICE

MENDELOVA UNIVERZITA V BRNĚ LDF MT MATEMATIKA VEKTORY, MATICE

Determinant. Definice determinantu. Permutace. Permutace, vlastnosti. Definice: Necht A = (a i,j ) R n,n je čtvercová matice.

Soustavy. Terminologie. Dva pohledy na soustavu lin. rovnic. Definice: Necht A = (a i,j ) R m,n je matice, b R m,1 je jednosloupcová.

Programování I. Martin Pergel,

Součin matice A a čísla α definujeme jako matici αa = (d ij ) typu m n, kde d ij = αa ij pro libovolné indexy i, j.

1 Projekce a projektory

while cyklus s podmínkou na začátku cyklus bez udání počtu opakování while podmínka příkazy; příkazy; příkazy; end; % další pokračování programu

Lineární algebra : Násobení matic a inverzní matice

3. Grafy a matice. Definice 3.2. Čtvercová matice A se nazývá rozložitelná, lze-li ji napsat ve tvaru A =

VYBRANÉ PARTIE Z NUMERICKÉ MATEMATIKY

KATEDRA INFORMATIKY UNIVERZITA PALACKÉHO LINEÁRNÍ ALGEBRA 1 OLGA KRUPKOVÁ VÝVOJ TOHOTO UČEBNÍHO TEXTU JE SPOLUFINANCOVÁN

Regresní a korelační analýza

Soustavy linea rnı ch rovnic

1. Matice a maticové operace. 1. Matice a maticové operace p. 1/35

Matematika 1 MA1. 2 Determinant. 3 Adjungovaná matice. 4 Cramerovo pravidlo. 11. přednáška ( ) Matematika 1 1 / 29

Teorie informace a kódování (KMI/TIK) Reed-Mullerovy kódy

pro bakalářské studijní programy fyzika, informatika a matematika 2018, varianta A

Lineární algebra : Násobení matic a inverzní matice

Úvod do lineární algebry

Úvod do Matlabu. Praha & EU: Investujeme do vaší budoucnosti. 1 / 24 Úvod do Matlabu

matice([[1,1,0,0,0],[1,1,1,0,0],[0,1,1,0,0],[0,0,0,1,1],[0,0,0,1,1]],1). matice([[1,1,1],[1,1,0],[1,0,1]],2).

Nápovědy k numerickému myšlení TSP MU

INVESTICE DO ROZVOJE VZDĚLÁVÁNÍ. Modernizace studijního programu Matematika na PřF Univerzity Palackého v Olomouci CZ.1.07/2.2.00/28.

2. Schurova věta. Petr Tichý. 3. října 2012

4EK213 LINEÁRNÍ MODELY

Operace s maticemi

Matice. Modifikace matic eliminační metodou. α A = α a 2,1, α a 2,2,..., α a 2,n α a m,1, α a m,2,..., α a m,n

Stavový model a Kalmanův filtr

Definice 13.1 Kvadratická forma v n proměnných s koeficienty z tělesa T je výraz tvaru. Kvadratická forma v n proměnných je tak polynom n proměnných s

Co je obsahem numerických metod?

M - Kvadratické rovnice a kvadratické nerovnice

[1] Definice 1: Polynom je komplexní funkce p : C C, pro kterou. pro všechna x C. Čísla a 0, a 1,..., a n nazýváme koeficienty polynomu.

Základy algoritmizace a programování

IB112 Základy matematiky

Lineární algebra. Matice, operace s maticemi

MATICE. a 11 a 12 a 1n a 21 a 22 a 2n A = = [a ij]

SOUSTAVY LINEÁRNÍCH ALGEBRAICKÝCH ROVNIC

Informatika navazující magisterské studium Přijímací zkouška z informatiky 2018 varianta A

Programovani v Maplu Procedura

3. podzimní série. ... {z }

cyklus s daným počtem opakování cyklus s podmínkou na začátku (cyklus bez udání počtu opakování)

Polynomy. Mgr. Veronika Švandová a Mgr. Zdeněk Kříž, Ph. D. 1.1 Teorie Zavedení polynomů Operace s polynomy...

Neuronové sítě Minimalizace disjunktivní normální formy

maticeteorie 1. Matice A je typu 2 4, matice B je typu 4 3. Jakých rozměrů musí být matice X, aby se dala provést

Příklad: Součet náhodných čísel ve vektoru s počtem prvků, které zadá uživatel, pomocí sum() a pomocí cyklu for. Ověříme, že příliš výpisů na

Transkript:

1.1 Úvod Algoritmus pro generování normálních magických čtverců Naprogramoval jsem v Matlabu funkci, která dokáže vypočítat magický čtverec libovolného přípustného rozměru. Za pomocí tří algoritmů, které jsem nastudoval zejména z [1] a [2] se mi povedlo sestavit fungující funkci (a několik pomocných v ní obsažených), které by měly magický čtverec spočítat. 1.2 Teorie Normální magický čtverec řádu n je matice s navzájem různými prvky z množiny {1, 2, n 2 } taková, že existuje jedno přirozené číslo K tak, že součet prvků každého řádku, sloupce nebo jedné z hlavních diagonál je roven K. Je dokázáno, že magický čtverec řádu n lze vytvořit pro všechna přirozená n kromě případu n = 2. V tomto případě nelze sestrojit matici 2x2 tak, aby vyhovovala definici magického čtverce. Při konstrukci magického čtverce jsem využil tři algoritmy, které zde postupně uvedu. Algoritmy se liší v závislosti na tom, jaký řád čtverce dostane funkce k výpočtu. Rozdělíme všechna možná n do tří disjunktních skupin lichá čísla, čísla dělitelná čtyřmi a sudá čísla nedělitelná čtyřmi. 1. pro n liché (př. n = 7) a) Umístíme číslo 1 doprostřed první řádky b) Vyplňujeme dalšími čísly diagonálu ve směru nahoru doprava tak, že pokud se dostaneme mimo matici na pozici (i,j), tak pokračujeme na odpovídajícím políčku v původní matici tak, že přejdeme přepočtem pokud je i,j<1 pak i,j:=n; pokud je j>n pak I,j:=1; 1

c) Pokud už je diagonála zaplněná celá, postoupíme o políčko níže a vracíme se na krok b). d) Algoritmus skončí, když umístíme do čtverce právě n 2 čísel. 2. pro n dělitelné čtyřmi beze zbytku (př. n = 8) a) umístíme čísla do čtverce A po řádcích postupně b) vytvoříme pomocnou matici X stejného rozměru, kterou vytvoříme ze čtverců rozměru 4x4, které mají na hlavní i vedlejší diagonále jedničku a na ostatních prvcích číslo 0. 2

c) Postupujeme po řádcích postupně, v případě, že je v matici X na dané pozici 0, tak prohodíme symetricky prvek v matici A na dané pozici s prvkem na poslední pozici v matici, na které je 0 a ještě pro něho nebylo prohazováno. d) Algoritmus skončí, pokud přeházíme všechna čísla v matici A na nulových pozicích v matici X mezi sebou. 3. pro n sudé a nedělitelné čtyřmi (př. n = 6) a) Nejprve vytvoříme magický čtverec řádu n/2 pomocí algoritmu 1. pro lichá n. b) Označme následující metody tvoření matice A rozměru 2x2 pro koeficient k podle následujícího schématu: metoda A: ( ) metoda B: ( ) metoda C: ( ) 3

c) Vytvoříme matici pomocí matice z bodu a) tak, že vždy nahradíme dané jedno číslo k celou maticí 2x2 tak, že použijeme jednu z metod popsaných v bodě b). Metodu A použijeme na první polovinu všech řádků, kromě prostředního prvku prostředního řádku, který nahradíme maticí za pomoci metody B. Na prvky v řadě po prostřední použijeme metodu B s výjimkou prostředního prvku, který upravíme metodou A. Všechny ostatní prvky nahradíme maticí za použití metody C. Vše shrnuje následující tabulka pro n=10: 1.3 Program Výše vypsaná teoretická pravidla mají stejné značení i postup činností jako v naprogramované funkci. Metody A,B a C v posledním případě jsou v programu očíslované pro jednoduchost jako metody 1,2,3. Funkce se volá s argumentem přirozeného čísla, které určuje řád magického čtverce. function [M] = MagickyCtverec(n) M = zeros(n,n); if ((n==2) (n<1)) %pro n = 2 nemá cenu hledat magický čtverec M = []; return if (mod(n,2)==1) %případ, kdy je n liché M(1,(n+1)/2)=1; x = 1; %posouvací index řádků y = (n+1)/2; %posouvací index sloupců umistenych = 1; %počet zatím umístěných čísel while umistenych<n*n while plnadiagonala(m,x,y)~=1 %pokud již není diagonála plná if M(x,y) == 0 M(x,y) = umistenych +1; umistenych = umistenych +1; x = normovani(n,x-1); y = normovani(n,y+1); x = normovani(n,x+1); if (mod(n,4)==0) pocet = 1; for i = 1:n for j = 1:n M(i,j) = pocet; pocet = pocet+1; X = [1 0 0 1; 0 1 1 0; 0 1 1 0; 1 0 0 1]; R = []; for i = 1:n/4 R = [R X]; %pokud je na pozici (x,y) volno %musíme hlídat, abychom "neskočili" mimo matici % pro n dělitelné čtyřmi %přiřadíme čísla do matice v přirozeném pořadí 4

X = []; for i = 1:n/4 X = [X ; R]; %vytváříme matici X pomocí maticových bloků 4x4 for i=1:n/2 for j=1:n if X(i,j) == 0 cache = M(i,j); M(i,j) = M(n-i+1,n-j+1); M(n-i+1,n-j+1) = cache; %pokud je v matici X nula, můžeme prohodit %zrcadlově prvky %pokud je n sudé nedělitelné čtyřmi A = MagickyCtverec(n/2); %vytvoříme magický čtverec polovičního řádu M = []; for i =1:n/2 X = []; for j = 1:n/2 if i<=(n/2+1)/2 if i<(n/2+1)/2 %metoda A (1) pro všechny řádky nad prostředním X = [X VytvorCtverecek(1,A(i,j))]; if i == j %metoda B (2) pro prostřední prvek prostředního řádku X = [X VytvorCtverecek(2,A(i,j))]; X = [X VytvorCtverecek(1,A(i,j))]; if i ==((n/2+1)/2)+1 if j~=(n/2+1)/2 %metoda B (2) pro následující řádek po prostředním X = [X VytvorCtverecek(2,A(i,j))]; %opět s výjimkou prostředního X = [X VytvorCtverecek(1,A(i,j))]; %na všechny ostatní metoda C (3) X = [X VytvorCtverecek(3,A(i,j))]; M =[M ; X]; function [a] = normovani(n,x) %přídatná funkce, která zajistí abychom "nevyskočili" z matice v první metodě if x < 1 a = n; if x > n a = 1; a = x; 5

function [a] = plnadiagonala(m,x,y) %přídatná funkce, která zjišťuje, jestli už není diagonála v případě 1 obsazena a = 1; for i = 1:size(M,1) if M(x,y)==0 a = 0; x = normovani(size(m,1),x-1); y = normovani(size(m,2),y+1); function[a] = VytvorCtverecek(metoda,koeficient); %přídatná funkce,vytvoří čtvereček podle zadané metody (A=1,B=2,C=3)a koeficientu k switch metoda case 1 A = [4*koeficient 4*koeficient-3; 4*koeficient-2 4*koeficient-1]; case 2 A = [4*koeficient-3 4*koeficient; 4*koeficient-2 4*koeficient-1]; case 3 A = [4*koeficient-3 4*koeficient; 4*koeficient-1 4*koeficient-2]; 1.4 Výstupy na obrazovku pro různé vstupy 6

1.5 Závěr Pomocí funkce tic-toc v Matlabu jsem zjistil, že výpočet magického čtverce pro velká n pomocí mé funkce trvá bohužel déle, než pomocí funkce magic(). Je to možná způsobeno tím, že Matlab používá ještě složitější algoritmus pro generování tohoto čtverce, založený nejspíše na metodě rozděl a panuj. Tato metoda spočívá v tom, že si čtverec postupně rozdělíme na menší čtverce, které vyřešíme zvlášť a dále budeme prohazovat celé jejich bloky za pomocí metody popsané pro n liché. Použití daného řešení by však překračovalo mnohonásobně délku funkce MagickyCtverec(), která je již v tomto případě už i tak dost komplikovaná. Níže uvádím zdroje, odkud jsem dané algoritmy nastudoval a pomocí nich napsal výslednou funkci. 1.6 Reference [1] http://mks.mff.cuni.cz/library/magickectvercetr/magickectvercetr.pdf [2] http://mathworld.wolfram.com/magicsquare.html [3] http://juggle.cz/matematika.asp [4] http://www.mathworks.com/help/matlab/ref/magic.html 7