%% Interaktyvus pratimas nr. 9. Matricos ir determinantai. Tiesiniai operatoriai % Paskaitos metu kalbėjome apie geometrinę matricų interpretaciją. Šiame interaktyviame % pratime nagrinėsime posūkio bei atspingžio tiesinius operatorius ir pavaizduosime % juos matriciniu pavidalu. Taip pat išsiaiškinsime matricos determinanto geometrinę % prasmę. Tam tikslui nagrinėsime vienetinio kvadrato, pavaizduoto žemiau, kelias % transformacijas. Trečioje dalyje panagrinėsime tikrinių reikšmių ir vektorių % sąvokas. %% I dalis. Posūkio ir atspindžio tiesiniai operatoriai % Tarkime, kad turime vienetinį kvadratą Vir_x = [0 0 1 1 0]; Vir_y = [0 1 1 0 0]; newplot hold on; plot(Vir_x,Vir_y); grid on axis([-2, 2, -2, 2]); ax = gca; ax.XAxisLocation = 'origin'; ax.YAxisLocation = 'origin'; hold off %% % Pradėsime nuo posūkio operatoriaus, t.y. pasuksime šį kvadratą kampu $\alpha % \;$. Galite keisti kampą $\alpha$ (laipsniais) ir stebėti, kaip keičiasi posūkio % matrica, kuri atrodo taip: % % $$A=\left\lbrack \begin{array}{cc}\cos \;\alpha & -\sin \;\alpha \\\sin \;\alpha % & \cos \;\alpha \end{array}\right\rbrack \ldotp$$ % % Taip pat galite matyti grafinę interpretaciją alpha = 60; % Keiskite čia c = cosd(alpha); s = sind(alpha); A = [c -s; s c]; disp('Posūkio matrica yra: ') disp(A) A00 = A * [0; 0]; A01 = A * [0; 1]; A10 = A * [1; 0]; A11 = A * [1; 1]; newplot; clf; plot([0 0 1 1 0],[0 1 1 0 0]); hold on; Vir_x = [A00(1) A01(1) A11(1) A10(1) A00(1)]; Vir_y = [A00(2) A01(2) A11(2) A10(2) A00(2)]; plot(Vir_x,Vir_y); grid on; axis([-2, 2, -2, 2]); ax = gca; ax.XAxisLocation = 'origin'; ax.YAxisLocation = 'origin'; hold off; %% % Dabar nagrinėsime atspindžio operatorių. Galite keisti ašies $\overrightarrow{a} % =\left(a_x ,a_y \right)$, kurios atžvilgiu bus daromas atspindys, koordinates % (akivaizdu, kad vektorius turi būti nenulinis). MATLAB apskaičiuos atspindžio % matricą ir nubraizys grafinį vaizdą (kartu braižomas ir ašies ortas). Atspindžio % matrica yra skaičiuojama taip: % % $$A=I-2\frac{\left\lbrack \begin{array}{c}-a_y \\a_x \end{array}\right\rbrack % \left\lbrack \begin{array}{cc}-a_y & a_x \end{array}\right\rbrack }{a_x^2 +a_y^2 % },$$ % % čia $I=\left\lbrack \begin{array}{cc}1 & 0\\0 & 1\end{array}\right\rbrack$ % yra vienetinė matrica. a_x = 3; % Keiskite čia a_y = 4; % Keiskite čia aa = [a_x; a_y]; aa = aa/norm(aa); a = [0 -1; 1 0] * aa; B = eye(2) - 2 * (a * a'); disp('Atspindžio matrica yra: ') disp(B) B00 = B*[0;0]; B01 = B*[0;1]; B10 = B*[1;0]; B11 = B*[1;1]; newplot; clf; hold on; plot([0 0 1 1 0],[0 1 1 0 0]); Vir_x = [B00(1) B01(1) B11(1) B10(1) B00(1)]; Vir_y = [B00(2) B01(2) B11(2) B10(2) B00(2)]; plot(Vir_x,Vir_y); axis([-2, 2, -2, 2]); quiver(0,0,aa(1),aa(2),0) ax = gca; ax.XAxisLocation = 'origin'; ax.YAxisLocation = 'origin'; grid on; hold off; %% % Pademonstruosime pagrindinę matricų daugybos savybę, t.y. $A\;B\not= B\;A$. % Tam panaudosime anksčiau sugeneruotas posūkio ir atspindžio operatorius. Pavaizduosime, % kaip transformuoja šių matricų sandaugos vienetinį kvadratą. Laikysime, kad % $A$ yra posūkio matrica, o $B$ yra atspindžio matrica. % % Tarkime, kad pirmą atliekame posūkį, o tada ieškome atspindžio. Tada vienetinį % kvadratą veikia sandauga $B\;A$. Turime tokį vaizdą: C = B * A; C00 = C*[0;0]; C01 = C*[0;1]; C10 = C*[1;0]; C11 = C*[1;1]; newplot; clf; hold on; plot([0 0 1 1 0],[0 1 1 0 0]); Vir_x = [C00(1) C01(1) C11(1) C10(1) C00(1)]; Vir_y = [C00(2) C01(2) C11(2) C10(2) C00(2)]; plot(Vir_x,Vir_y); axis([-2, 2, -2, 2]); ax = gca; ax.XAxisLocation = 'origin'; ax.YAxisLocation = 'origin'; grid on; hold off; %% % Dabar tarkime, kad pirmą pritaikome atspindžio transformaciją, o tada atliekame % posūkį. Tada vienetinį kvadratą veikia sandauga $A\;B$. Turime tokį vaizdą: D = A * B; D00 = D*[0;0]; D01 = D*[0;1]; D10 = D*[1;0]; D11 = D*[1;1]; newplot; clf; hold on; plot([0 0 1 1 0],[0 1 1 0 0]); Vir_x = [D00(1) D01(1) D11(1) D10(1) D00(1)]; Vir_y = [D00(2) D01(2) D11(2) D10(2) D00(2)]; plot(Vir_x,Vir_y); axis([-2, 2, -2, 2]); ax = gca; ax.XAxisLocation = 'origin'; ax.YAxisLocation = 'origin'; grid on; hold off; clearvars("C", "D") %% % Palyginkite gautus vaizdus. Dabar pagrindinė matricų savybė yra akivaizdi! %% II dalis. Determinanto geometrinė interpretacija % Apskaičiuokime pirmoje dalyje nagrinėtų matricų determinantus: det(A) det(B) %% % Šiuos rezultatus lengvai galima įrodyti. Siūlome šio kurso klausytojams tai % padaryti patiems. % % Dabar pademonstruosime kvadratinės matricos determinanto geometrinę interpretaciją. % Kurso klausytojui siūlome pasirinkti sveikąją determinanto reikšmę iš intervalo % $\left\lbrack -5;5\right\rbrack$. MATLAB sugeneruos matricą, kurios determinantas % yra jūsų pasirinktas skaičius ir paveiks šia matrica vienetinį kvadratą. Žemiau % bus nubraižytas grafinis vaizdas. d = 2; % Keiskite čia C = diag([3 3]); while det(C) ~= d C = randi([-5 5], 2, 2); end C00 = C*[0;0]; C01 = C*[0;1]; C10 = C*[1;0]; C11 = C*[1;1]; newplot; clf; hold on; plot([0 0 1 1 0],[0 1 1 0 0]); Vir_x = [C00(1) C01(1) C11(1) C10(1) C00(1)]; Vir_y = [C00(2) C01(2) C11(2) C10(2) C00(2)]; plot(Vir_x,Vir_y); axis([-10, 10, -10, 10]); ax = gca; ax.XAxisLocation = 'origin'; ax.YAxisLocation = 'origin'; grid on; hold off; %% % Apskaičiuosime gauto lygiagretainio plotą: Plotas = norm(cross([C10; 0], [C01; 0])); %% % Palyginkime lygiagretainio plotą ir determinantą: disp(['Jūsų pasirinktas determinantas det(C) = ' num2str(d)]); disp(['Gauto lygiagretainio plotas yra lygus: ' num2str(Plotas)]); %% % Taigi matome, kad antros eilės matricos determinanto modulis rodo santykį % tarp pradinės ir po transformacijos gautų figūrų plotų. Tas pats galioja ir % tūriams trimačiu atveju. %% III dalis. Tikrinės reikšmės ir tikriniai vektoriai % Dabar panagrinėsime kvadratinės matricos tikrines reikšmes ir tikrinius vektorius. % Priminsime, kad tiesinio operatoriaus $A$ tikriniu vektoriumi vadinamas nenulinis % vektorius $\overrightarrow{\;x}$, kuris tenkina sąlygą: % % $$A\;\overrightarrow{\;x} =\lambda \;\overrightarrow{\;x} \ldotp$$ % % Skaičius $\lambda$ yra vadinamas tikrine reikšme. Sakoma, kad tikrinis vektorius % $\overrightarrow{\;x}$ atitinka tikrinę reikšmę $\lambda$. % % Šioje dalyje mes ištirsime geometrinę tikrinių reikšmių ir vektorių interpretaciją. % Tam panaudosime specialaus tipo matricas - simetrines matricas, t.y. tokias, % kad $A=A^T$. Šį matricų tipą mes nagrinėsime todėl, kad jų tikrinės reikšmės % visada yra realios. Taip pat apsiribosime $2\times 2$ matricomis. % % Žemiau bus sugeneruota $2\times 2$ simetrinė matrica $D$, apskaičiuoti jos % tikriniai vektoriai ir tikrinės reikšmes. d = randi([-5 5], 1, 2); D = [d(1) d(2); d(2) d(1)] [vecs, vals] = eig(D); disp(['Tikrinės reikšmės yra: ' num2str(vals(1, 1)) ' ir ' num2str(vals(2, 2))]); disp(['Tikriniai vektoriai, atitinkantys tikrinę reikšmę ' num2str(vals(1, 1)) ': (' num2str(vecs(1, 1)) 't; ' num2str(vecs(2, 1)) 't), čia t - bet koks realusis skaičius']); disp(['Tikriniai vektoriai, atitinkantys tikrinę reikšmę ' num2str(vals(2, 2)) ': (' num2str(vecs(1, 2)) 's; ' num2str(vecs(2, 2)) 's), čia s - bet koks realusis skaičius']); %% % Galime palyginti, kuo tikriniai vektoriai skiriasi nuo kitų vektorių. Kurso % klausytojus siūlome pasirinkti bet kokį vektorių ir paveikti jį aukščiau sugeneruota % matrica $D$. Žemiau bus pavaizduotas tiek pradinis vektorius, tiek jau pavektas % tiesiniu operatoriumi $D$. v_x = -1; % Keiskite čia v_y = 1; % Keiskite čia v = [v_x; v_y]; w = D * v; newplot; clf; hold on; quiver(0,0,v(1),v(2),0) quiver(0,0,w(1),w(2),0) ax = gca; ax.XAxisLocation = 'origin'; ax.YAxisLocation = 'origin'; grid on; hold off; %% % Galite matyti, kad pasirinkę tikrinį vektorių $\overrightarrow{x}$, abu pavaizduoti % vektoriai ($\overrightarrow{x}$ ir $D\overrightarrow{x}$) yra vienoje tiesėje. % Tai reiškia, kad egzistuoja toks skaičius $\lambda \;$kad iš jo padauginę tikrinį % vektorių $\overrightarrow{x}$gausime vektorių $D\overrightarrow{x}$. Būtent % tokią geometrinę prasmę ir turi tikrinės reikšmė ir jas atitinkantys tikriniai % vektoriai. %% Pabandykite patys %% % # Įrodykite, kad posūkio ir atspindžio matricų determinantai yra atitinkamai % 1 ir -1. % # Įrodykite, kad simetrinės $2\times 2$ tikriniai vektoriai yra $\left\lbrack % \begin{array}{c}t\\t\end{array}\right\rbrack$ ir $\left\lbrack \begin{array}{c}t\\-t\end{array}\right\rbrack$. % # Atlikite vienetinio kūbo transformaciją su fiksuota determinanto reikšme % (braižyti nebūtina). Įsitikinkite, kad gautų tūrių santykis yra lygus transformacijos % matricos determinantui.