# 1. ZH 
# 2019. 02. 27.

# 1. Feladat - matrixszorzas
disp("\n=============================\n") # a '\n' sortorest jelez a megjelenitendo szovegben
disp("1. Feladat - matrixszorzas")
A = [2 3 1; 3 1 1; 2 -1 2]
B = [1 7; 0 3; -1 1]

disp("A * B")
A*B


# a sima \ a sor vegen azt jelzi az Octave-nak, hogy a kodban van sortores
disp("A masodik szorzasnal a baloldali tenyezo igazabol\n\
az elozo jobb oldal transzponaltja")
disp("B^T")
transpose(B)

disp("B^T * A")
transpose(B) * A

# 2. Feladat - balfelso fominorok
disp("\n=============================\n")
disp("2. Feladat - balfelso fominorok")
A = [2 -1 0; -1 2 -1; 0 -1 2]

disp("3 db matrix determinansat kellett kiszamitani.")

disp("\n===========\n")
disp("1. a balfelso sarokbol indulo 1x1-es matrixot")
A(1,1)

disp("Ennek determinansa:")
det( A(1,1) )

disp("\n===========\n")
disp("2. a balfelso sarokbol indulo 2x2-es matrixot")
A(1:2,1:2)

disp("Ennek determinansa:")
det( A(1:2,1:2) )
# keplettel: a11 * a22 - a12 * a21

disp("\n===========\n")
disp("3. a balfelso sarokbol indulo 3x3-as matrixot,\n\
azaz az eredeti matrixot")
A

disp("Ennek determinansa:")
det( A )

disp("\nEz utobbi determinanst a kovetkezo modon\n\
szamitjuk ki kezzel, elso sor szerinti kifejtessel:")
disp("+ 2 * det(")
A(2:3,2:3) # az elso sor elso oszlop elhagyasaval marado 2x2-es matrix
disp(") - (-1) * det(")
A(2:3,1:2:3) # az elso sor masodik oszlop elhagyasaval marado 2x2-es matrix
# ugye a 2:3 tartomany a 2-tol indul 3-ig 1-esevel, igy 2:3 = 2 3
# az 1:2:3 tartomany 1-tol indul 3-ig 2-esevel, igy 1:2:3 = 1 3
disp(") + 0 * det(")
A(2:3,1:2) # az elso sor harmadik oszlop elhagyasaval marado 2x2-es matrix
disp(") = ")
2 * det(A(2:3,2:3)) - (-1) * det(A(2:3,1:2:3)) + 0 * det(A(2:3,1:2))

# 3. Feladat - Gauss eliminacio
disp("\n=============================\n")
disp("3. Feladat - Ax = b megoldasa Gauss eliminacioval")

disp("\n\
Eloszor matrix formaba irjuk az egyenletet:")
A = [1 3 4; 2 7 3; 2 8 6]
b = [3; -7; -4]

# a \ specialis karakter, mint lattuk segit a sortoresek jelzeseben, igy
# ha ki akarjuk irni \\-el jelezzuk az Octave-nak
disp("A\\b vagy linsolve(A,b) ennek megadja a megoldasat") 
A\b
linsolve(A, b)

disp("Nekunk kezzel, Gauss eliminacioval kell kiszamolni a megoldast,\n\
ennek menete a kovetkezo:")

disp("\n\
A kibovitett matrix:")
Ab = [A(1,:) b(1,:); A(2,:) b(2,:); A(3,:) b(3,:)] # A(1,:) <- az A matrix elso sora

disp("\n\
2. sorbol az elso 2-szereset kivonjuk")
Ab(2,:) = Ab(2,:) - 2 * Ab(1,:)

disp("\n\
3. sorbol az elso 2-szereset kivonjuk")
Ab(3,:) = Ab(3,:) - 2 * Ab(1,:)

disp("\n\
3. sorbol a masodik 2-szereset kivonjuk")
Ab(3,:) = Ab(3,:) - 2 * Ab(2,:)

disp("\n\
Jon a visszahelyettesites, alulrol felfele haladva:")

disp("\n\
8 * x3 = 16 => x3 = 16 / 8 = 2\n")
x3 = 16/8

disp("\n\
1 * x2 - 5 * x3 = -13 => x2 = -13 + 5 * x3 = -3\n")
x2 = -13 + 5 * x3

disp("\n\
1 * x1 + 3 * x2 + 4 * x3 = 3 => x1 = 3 - 3 * x2 - 4 * x3 = 4\n")
x1 = 3 - 3 * x2 - 4 * x3

disp("\n\
Megegyszer, A\\b-vel kapjuk egybol az ezzel megegyezo eredmenyt:")
A\b

disp("\n\
Ellenorzes:")

disp("A * x = ")
A * (A\b)

# 4. Feladat - Jordan eliminacio
disp("\n=============================\n")
disp("4. Feladat - A^-1 szamitasa Jordan eliminacioval")

disp("\n\
Tulajdonkeppen ugyanazon eliminacios lepeseket kell csinalni, csak\n\
nem b-vel, hanem a 3x3-as egysegmatrix-szal bovitunk jobbrol:")
A = [1 3 4; 2 7 3; 2 8 6]

disp("\n\
A kibovitett matrix:")
B = [A(1,:) 1 0 0; A(2,:) 0 1 0; A(3,:) 0 0 1]

disp("\n\
2. sorbol az elso 2-szereset kivonjuk")
B(2,:) = B(2,:) - 2 * B(1,:)

disp("\n\
3. sorbol az elso 2-szereset kivonjuk")
B(3,:) = B(3,:) - 2 * B(1,:)

disp("\n\
3. sorbol a masodik 2-szereset kivonjuk")
B(3,:) = B(3,:) - 2 * B(2,:)

disp("\n\
A Jordan eliminacional a cel, hogy a baloldalon jelenjen meg\n\
az adott egysegmatrix, igy nem eleg ez a felso triangularis alak.")

disp("\n\
Igy szuksegunk van ra, hogy az atloban 1-esek szerepeljenek:")

disp("\n\
3. sor szorzasa 1/8-al")
B(3,:) = B(3,:) / 8

disp("\n\
Tovabba az atlo feletti elemeket is ki kell nullazni:")

disp("\n\
1. sorbol a masodik 3-szorosat kivonjuk")
B(1,:) = B(1,:) - 3 * B(2,:)

disp("\n\
2. sorhoz a harmadik 5-szoroset hozzaadjuk")
B(2,:) = B(2,:) + 5 * B(3,:)

disp("\n\
1. sorbol a harmadik 19-szereset kivonjuk")
B(1,:) = B(1,:) - 19 * B(3,:)

disp("\n\
Megjelent az egysegmatrix a baloldalon, igy\n\
leolvashato az eredeti matrix inverze:")
AInverze = B(1:3, 4:6) # 1-3 sorok, 4-6 oszlopok

disp("\n\
Ellenorzes:")

disp("A * AInverze")
A * AInverze

disp("AInverze * A")
AInverze * A

disp("\n\
Az Octave-ban A^-1 vagy inverse(A) kiszamolja a matrix inverzet")
A^-1
inverse(A)

# 5. Feladat - Gauss eliminacio
disp("\n=============================\n")
disp("+. Feladat - Gauss eliminacio")

disp("\n1)")
disp("Kibovitett matrix:")
Ab = [1 -2 -6 12; 2 4 12 -17; 1 -4 -12 22]

disp("\n\
2. sorbol az elso 2-szereset kivonjuk")
Ab(2,:) = Ab(2,:) - 2 * Ab(1,:)

disp("\n\
3. sorbol az elso 1-szereset kivonjuk")
Ab(3,:) = Ab(3,:) - 1 * Ab(1,:)

disp("\n\
3. sorhoz a masodik 1/4-szereset hozzaadjuk")
Ab(3,:) = Ab(3,:)  + Ab(2,:) / 4

disp("\n\
Az utolso sor  a 0 * x1 + 0 * x2 + 0 * x3 = -0.25 \n\
egyenletet szimbolizalja ami nyilvanvaloan ellentmondo,\n\
igy ennek az egyenletrendszernek nincs megoldasa.")

disp("\n2)")
disp("Kibovitett matrix:")
Ab = [1 -2 -6 12; 2 4 12 -17; 3 2 6 -5]

disp("\n\
2. sorbol az elso 2-szereset kivonjuk")
Ab(2,:) = Ab(2,:) - 2 * Ab(1,:)

disp("\n\
3. sorbol az elso 3-szorosat kivonjuk")
Ab(3,:) = Ab(3,:) - 3 * Ab(1,:)

disp("\n\
3. sorbol a masodik 1-szereset kivonjuk")
Ab(3,:) = Ab(3,:)  - Ab(2,:)

disp("\n\
Az utolso sor  a 0 * x1 + 0 * x2 + 0 * x3 = 0 \n\
egyenletet szimbolizalja ami azt jelzi, hogy ,\n\
ennek az egyenletrendszernek vegtelen sok megoldasa van\n\
Pl tetszolegesen valasztunk x3 ertekkel teljesul a 3. egyenlet\n\
es ezutan visszahelyettesitessel kapunk x2, x1-et.")