%% 35   Determinanter
% Innehåll
% 35.1   Definition av determinant av kvadratisk matris
% 35.2   Determinantens egenskaper
% 35.3   Determinant och inverterbarhet
%
%% 35.1   Definition av determinant av kvadratisk matris
%
% Determinanten av en kvadratisk matris A\, är ett tal, betecknat \mbox{det}\,A\,, förknippat med matrisen, sånt att matrisen är inverterbar precis när detta tal är skilt från noll:  \mbox{det}\,A\not=0.
% Determinanter förekom långt tidigare än matriser i matematikens historia, som ett sätt att avgöra (eng. determine) om ett ekvationssystem med lika många ekvationer som obekanta har en entydig lösning (för varje högerled). Det finns skriftliga belägg för deras användning redan från 200-talet e.v.t. även om ordet för dem som vi använder är från tidigt 1800-tal. Matriser och räkning med dem dök upp först i mitten av 1800-talet.
% Anta nu att du har en n\times n-matris (med n>1\,). Genom att strycka rad i\, och kolonn j\, i den får du en (n-1)\times (n-1)-matris som du kan beteckna A_{ij}\,:
%
% I den rekursiva definitionen av \mbox{det}\,A\, stryks konsekvent första raden och successivt de olika kolonnerna så att du får matriserna A_{1j}, där 1\leq j\leq n.
% Säg att du har en 7\times 5 matris A\, och vill stryka rad 3 och kolonn 4. Hur gör du det med Matlab? Du kan ju förstås lista de rader och de kolonner du vill ha kvar
% A34 = A([1,2,4,5,6,7],[1,2,3,5]) ,
% men det blir inte så elegant och heller inte så systematiskt om du vill variera rad eller kolonn som stryks. Allt hänger på hur du får bort ett tal ur en lista av tal i storleksordning. Om L\, är en vektor av tal så ger dig kommandot
% L > 5
% en vektor av sanningsvärden ( 0 (false) eller 1 (true) ) där varje koordinat i L testas mot villkoret >5\,. På samma sätt kan du hantera andra villkor än >5. Resultaten är en lista av logiska värden ( antingen  false  eller  true ).
% Testa detta nu med  L = 1:15  där du testar om koordinaterna är dels \leq 4\,, dels delbara med 4, dels skilda från 4\,.
%



% Om  v  är en vektor med logiska koordinater och  L  en vektor med tal med antal koordinater som  v  ger
% L( v )
% en vektor med enbart koordinater i  L  som har index där  v  har värdet   true  (dvs 1).
% Testa nu  att ur vektorn   L = 1:9  stryka talet  6 ,



% Testa nu att från matrisen
% A=\left(\begin{array}{rrr} 1 & 2 & 3 \\ 4 & 5 & 6 \\ 7 & 8 & 9\end{array}\right)\,
% lista  alla matriser A_{ij}\, där 1 \leq i,\,j\leq 3\,.



%
% Definiton   Om A\, är en n\times n-matris definieras matrisens determinant, \mbox{det}\,A\,, rekursivt som talet
%     (a)    a\, om A\, är 1\times 1-matrisen A=\left(\begin{array}{r} a \end{array}\right)\,,
%     (b)     \sum_{j=1}^n(-1)^{1+j}\,a_{1j}\,\mbox{det} \,A_{1j} när n>1\,. (Observera teckenväxlingen!)
% I Matlab beräknar kommandot
% det( A )
% determinanten av matrisen A\,, men med en helt annan metod än definitionen. För stora matriser är den rekursiva definitionen inte realistisk i praktiken ens för Matlab. Den metod som i stället används är beräkningsmässigt effektiv, men känslig när t.ex. determinanten är 0. I såna fall kan Matlabs värde på determinanten avvika (stort) från 0!
% För en 2\times 2-matris
% A=\left(\begin{array} {rr}
% a_{11}& a_{12} \\ a_{21} & a_{22}
% \end{array}\right)\,
% ger definitionen att
% \mbox{det}\,A= a_{11}\,a_{22}-a_{12}\,a_{21}\,.
% När
% A=\left(\begin{array} {rrr}
% a_{11}& a_{12} & a_{13}\\ a_{21} & a_{22} & a_{23}\\
% a_{31} & a_{32} & a_{33}
% \end{array}\right)\,
% får du
% \mbox{det}\,A= a_{11}\,\mbox{det}\,A_{11}-a_{12}\,\mbox{det}\,A_{12}+a_{13}\,\mbox{det}\,A_{13}\,,
% där
% A_{11}=\left(\begin{array} {rr}
% a_{22}& a_{23} \\ a_{32} & a_{33}
% \end{array}\right)\,,\quad
% A_{12}=\left(\begin{array} {rr}
% a_{21}& a_{23} \\ a_{31} & a_{33}
% \end{array}\right)\,,\quad
% A_{13}=\left(\begin{array} {rr}
% a_{21}& a_{22} \\ a_{31} & a_{32}
% \end{array}\right)\,.'
%
% När A är en konkret uppskriven matris betecknas vanligen determinanten genom att parenteser ersätts med raka streck. T.ex.
% A=\left(\begin{array} {rrr}
% a_{11}& a_{12} & a_{13}\\ a_{21} & a_{22} & a_{23}\\
% a_{31} & a_{32} & a_{33}
% \end{array}\right)\,, \quad
% \mbox{det}\,A=\left|\begin{array} {rrr}
% a_{11}& a_{12} & a_{13}\\ a_{21} & a_{22} & a_{23}\\
% a_{31} & a_{32} & a_{33}
% \end{array}\right|\,.
% Det förekommer också att man skriver |A|\, i stället för \mbox{det}\,A\, när det blir tydligare och inte kan missförstås.
% Testa nu att beräkna derminanten av matriserna
% \left(\begin{array}{rr} -1 & -2\\ 4 & 3 \end{array}\right) \quad \mbox{ och }\quad
%
% \left(\begin{array}{rrr} -2 & 3 & 1\\ 3 & 3 & -3\\ -1 & 4 & -1 \end{array}\right)
% dels för hand och dels med Matlab



%
% Definitionen ovan kallas att utveckla determinanten längs första raden ( den som konsekvent stryks). Om du i stället konsekvent stryker rad i och successivt olika kolonner får du det som kallas utveckling längs rad i:
% \sum_{j=1}^n(-1)^{i+j}\,a_{ij}\,\mbox{det} \,A_{ij}\,. (Observera tekenväxlingen!)
% Det visar sig att det inte spelar nån roll längs vilken rad du utvecklar längs, du får alltid samma tal. Du kan också utveckla determinanten längs en fix kolonn j\,. Gör du det får du
% \sum_{i=1}^n(-1)^{i+j}\,a_{ij}\,\mbox{det} \,A_{ij}\,. (Observera indexet i\,!)
% Också detta visar sig ge talet \mbox{det}\,A\,.
% Sats   Talet \mbox{det}\,A\, kan beräknas genom utveckling längs valfri kolonn i A\,.
% Testa nu att beräkna determinanten av
% A =  \left(\begin{array}{rrrrr}
% 6 & 6 & 7 & 2 & 3\\
% 6 & -3 & 6 & 1 & 2\\
% 2 & 0 & 1 & 6 & 5\\
% 5 & -3 & 9 & 7 & 6\\
% -1 & -2 & -3 & -1 & 6 \end{array}\right)\,
% genom att utveckla dels längs rad 4 och dels längs kolonn 3. Jämför med  det( A ) .



%
%%
%% 35.2   Determinantens egenskaper
%
% Jaha, nu vet du hur du kan beräkna en determinant genom utveckling längs rad eller kolonn. Men vilka egenskaper har den och vad kan du använda den till? Än så länge är det bara ett (märkligt) sätt att från en matris beräkna ett tal.
% Sats   Om A\, är en n\times n-matris så gäller
% (a)    \left|
% \begin{array}{rrrrr}
%   \mathbf a_1& \ldots & \mathbf a_j' + \mathbf a_j'' &\ldots & \mathbf a_n
% \end{array}\right| =
% \left|
% \begin{array}{rrrrr}
%   \mathbf a_1& \ldots & \mathbf a_j' &\ldots & \mathbf a_n
% \end{array}\right| +
% \left|
% \begin{array}{rrrrr}
%   \mathbf a_1& \ldots &  \mathbf a_j'' &\ldots & \mathbf a_n
% \end{array}\right|
% (b)    \left|
% \begin{array}{rrrrr}
%   \mathbf a_1& \ldots & c\,\mathbf a_j &\ldots & \mathbf a_n
% \end{array}\right| =
% c\, \left|
% \begin{array}{rrrrr}
%   \mathbf a_1& \ldots & \mathbf a_j &\ldots & \mathbf a_n
% \end{array}\right| \,,
% (c)    Om två kolonner i A\, är lika är \mbox{det}\, A = 0\,.
% (d)    Om B\, fås från A\, genom att två kolonner byter plats så gälller att
% \mbox{det}\, B = -\,\mbox{det}\, A\,,
%         dvs om två kolonner byter plats ändrar determinanten tecken.
% (e)   Om B\,fås från A\, genom att en multipel av en kolonn i A\,  läggs till till en annan så gäller att
% \mbox{det}\,B=\mbox{det}\, A.
% Alla dessa egenskaper (utom möjligen (a) )används filitigt vid handräkning och teoretiska resonemang med determinanter. Egenskaperna (a) brukar sammanfattas med att determinanten är linjär i varje kolonn.
% Testa nu dessa egenskaper på en godtycklig 5\times 5-matris med hjälp av Matlab



%
% Som du vet kan du beräkna determinanten genom att utveckla läng (t.ex.) första raden, men lika gärna längs först kolonnen. Det är bakgrunden till
% Sats    Det gäller att \mbox{det}\,A^\top = \mbox{det}\,A\,. Dvs en matris och dess transponat har samma determinant.
% Testa detta nu med en godtyckligt vald 7\times 7-matris.



%
% En konsekvens av detta är att varje egenskap som determinanten har med avseende på kolonner också gäller med avseende på rader:
%
% Sats   Om A\, är en n\times n-matris så gäller
% (a)    \left|
% \begin{array}{c}
%   \mathbf r_1\\ \vdots \\ \mathbf r_j' + \mathbf r_j'' &\ldots \\ \mathbf r_n
% \end{array}\right| =
% \left|
% \begin{array}{c}
%   \mathbf r_1\\ \vdots \\ \mathbf r_j'  \\ \vdots \\ \mathbf r_n
% \end{array}\right| +
% \left|
% \begin{array}{rrrrr}
%   \mathbf r_1\\ \vdots \\ \mathbf r_j'' \\ \vdots \\ \mathbf r_n
% \end{array}\right|
% (b)    \left|
% \begin{array}{c}
%   \mathbf r_1\\ \vdots \\ c\,\mathbf r_j  \\ \vdots \\ \mathbf r_n
% \end{array}\right| =
% c\, \left|
% \begin{array}{r}
%   \mathbf r_1\\ \vdots \\ \mathbf r_j \\ \vdots \\ \mathbf r_n
% \end{array}\right| \,,
% (c)    Om två rader i A\, är lika så är \mbox{det}\, A = 0\,.
% (d)    Om B\, fås från A\, genom att två rader byter plats så gälller att
% \mbox{det}\, B = -\,\mbox{det}\, A\,,
%         dvs om två rader byter plats ändrar determinanten tecken.
% (e)   Om B\,fås från A\, genom att en multipel av en rad  i A\,  läggs till till en annan så gäller att
% \mbox{det}\,B=\mbox{det}\, A.
% Alla dessa egenskaper (utom möjligen (a) )används filitigt vid handräkning och teoretiska resonemang med determinanter. Egenskaperna (a) brukar sammanfattas med att determinanten är linjär i varje rad.
% Testa nu dessa egenskaper på en godtycklig 6\times 6-matris med hjälp av Matlab.



%
%% 35.3   Determinant och inverterbarhet
%
% Säg nu att A\, och B\, är två n\times n-matriser. Vad kan man säga om determinanten av deras produkt AB\,? En hel del visar det sig.
% Sats   Om A\, och B\, är två n\times n-matriser så gäller
% \mbox{det}\,AB = \mbox{det}\,A\cdot \mbox{det}\,B.
% Om A\, är inverterbar, så att A^{-1}\, finns och AA^{-1}=I, ger satsen att \mbox{det}\,A\cdot\mbox{det}\,{A^{-1} = \mbox{det}\,I=1. Dvs om A\, är inverterbar så är \mbox{det}\, A\not=0\,(och \mbox{det}\,A^{-1}=1/(\mbox{det}\,A)).
% Hur är det med omvändningen av detta? Kan man vara säker på att A\, är inverterbar när \mbox{det}\,A\not=0\,?
% Du vet att du med radoperationerna
% Lägg en multipel av en rad till en annan,
% Byt plats på två rader
% kan överföra A\, till U, på trappstegsform. Operationen 1. påverkar inte determinanten, medan 2. gör att den byter tecken.
% Det betyder att
% \mbox{det}\,A = (-1)^{\epsilon}\mbox{det}\,U\,,
% där (-1)^\epsilon=0 om du gjort ett jämnt antal radbyten för att komma till U\, och (-1)^\epsilon=-1 om du gjort ett udda antal.
% Eftersom U\, är uppåt triangulär är \mbox{det}\,U produkten u_{11}\cdot u_{22}\cdots u_{nn} av alla element längs huvuddiagonalen. Det betyder att \mbox{det}\,A är \not=0\, precis när varje kolonn i A är pivotkolonn vilket inträffar precis när A\, är inverterbar. Alltså gäller
% Sats   En matris är inverterbar precis när den har determinant \not=0.
% När determinanten är 0 kan du alltså vara säker på att matrisen inte är inverterbar.
% Se upp med att använd detta kriterium i Matalb, som för att effektivt kunna beräkna rimliga närmevärden till determinater av matriser av stor storlek beräknar determinanter på ett annat sätt än enligt definitionen. När den riktiga determinanten är 0 kan det sättet kan vara känsligt och ge ett felaktigt värde.
% Du har redan sett exempel på detta:

A = randi([-9,9], 5) ;
A1 = A ;
A1( : , 3 ) =  A1( : , 5 )
det( 1e4*A1 )
determ(1e4*A1)
B = A1^(-1)

%
% Använd istället kriteriet att A är inverterbar när den har full rang!
% Kommadot för att beräkna rangen av A\, är
% rank( A )
% Pröva detta nu på  på exemplet



% Ett glasklart besked! A_1\, är inte inverterbar.
% När \mbox{det}\,A\not=0\, finns det ett sätt att med hälp av determinanter skriva upp den (entydiga eftersom A\, är inverterbar) lösningen till
% A\mathbf x=\mathbf b \,
% där \mathbf b\, är given.
% Anta att lösningen \mathbf x\, har koordinaterna x_1,\,x_2\,,\ldots x_n\, och att A=\left(\begin{array}{rrrr} \mathbf a_1 & \mathbf a_2 & \ldots & \mathbf a_n\end{array}\right). Det betyder att
% \mathbf b = x_1\,\mathbf a_1 + x_2\,\mathbf a_2 + \cdots + x_n \,\mathbf a_n\,.
% Kolla nu på determinanten där kolonn i\, i A\, bytts ut mot \mathbf  b
% \left|\begin{array}{rrrrrr} \mathbf a_1 & \mathbf a_2 & \ldots & \mathbf b & \ldots & \mathbf a_n\end{array}\right|\,.
% Från \mathbf b kan du multiplarna x_j\, av kolonnern \mathbf a_j när j\not = i\, utan att ändra determinantens värde. Det ger
% \begin{array}{rcl}
% \left|\begin{array}{rrrrrr}
% \mathbf a_1 & \mathbf a_2 & \ldots & \mathbf b & \ldots & \mathbf a_n
% \end{array}\right| &=&
% \left|\begin{array}{rrrrrr}
% \mathbf a_1 & \mathbf a_2 & \ldots & x_i \,\mathbf a_i & \ldots & \mathbf a_n
% \end{array}\right|=\\
% &=& x_i\,\mbox{det}\,A\,
% \end{array}
%
% Låter du  därför A(\mathbf b)_i\, beteckna matrisen \left(\begin{array}{rrrrrr} \mathbf a_1 & \mathbf a_2 & \ldots & \mathbf b & \ldots & \mathbf a_n\end{array}\right)\,får du
% x_i = \mbox{det}\,A(\mathbf b)_i / \mbox{det}\,A\,
% Detta ger dig det som kallas Cramers regel:
% Sats   Koordinat i i lösningen \mathbf x\, till ekvationen A\mathbf x= \mathbf b kan beräknas som
% x_i = \mbox{det}\,A(\mathbf b)_i / \mbox{det}\,A\,.
% Intresset av detta är mest teoretiskt eftersom det är betydligt enklare att lösa ekvationen med radoperationer på systemets utökade kofficientmatris.
% Testa nu att betsämma lösningen till A\mathbf x=\mathbf b\,när
% A =\left(\begin{array}{rrrrr}
% 3 & -9 & -3 & -6 & -5\\
% 5 & 9 & 7 & 1 & 4\\
% 5 & -6 & -6 & -3 & -2\\
% -9 & -9 & -4 & -7 & -4\\
% -7 & 1 & 2 & 3 & -5
% \end{array}\right)\,,\quad
% \mathbf b=\left(\begin{array}{r}
% -2\\ -1\\ 5\\ -9\\ 6 \end{array}\right)\,.



%
% Testa nu att göra det med A\, en slumpmässigt vald  6\times 6-matris och \mathbf b\, en slumpmässigt vald 6\times 1-vektor. Blir svaret alltid exakt?



%
% Cramers regel kan användas för att bestämma en formel för inversen till en inverterbar n\times n-matris A\,.
% Sätt A^{-1}=\left(\begin{array}{rrrr} \mathbf x_1 & \mathbf x_2 & \ldots & \mathbf x_n
% \end{array}\right)\,. Det ska då gälla att
% A\,A^{-1} =\left(\begin{array}{rrrr} A\mathbf x_1 & A \mathbf x_2 & \ldots & A\mathbf x_n
% \end{array}\right) =
% \left(\begin{array}{rrrr}
% \mathbf e_1 & \mathbf e_2 & \ldots & \mathbf e_n
% \end{array}\right)=I\,.
% Cramers regel ger att koordinat i\, i \mathbf x_j ges av
% x_{ij}=\mbox{det}\,A(\mathbf e_j)_i/ \mbox{det}\,A \,.
% Matrisen A(\mathbf e_j)_i\, är A\, med kolonn i\, ersatt av \mathbf e_j som bara består av nollor utöver en 1:a på rad j\,.Utveckling längs kolonn i\, ger därför
% \mbox{det}\,A\cdot x_{ij}=\mbox{det}\,A_i(\mathbf e_j)= (-1)^{i+j} \mbox{det}\,A_{ji}\,.
% Detta ger dig
% Sats   Matrisen A^{-1\, har som element på position (i,\,j) talet
% (-1)^{i+j}\mbox{det}\, A_{ji} / \mbox{det}\, A.
% Lägg märke till omkasningen av ordningen mellan  i\, och j\,.
% Testa nu  att bestämma inversen till en slumpmässigt vald 5\times 5-matris med denna metod.

