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 . Galite keisti kampą α (laipsniais) ir stebėti, kaip keičiasi posūkio matrica, kuri atrodo taip:
Taip pat galite matyti grafinę interpretaciją
alpha = 60;
c = cosd(alpha);
s = sind(alpha);
A = [c -s; s c];
disp('Posūkio matrica yra: ')
Posūkio matrica yra:
disp(A)
0.5000 -0.8660 0.8660 0.5000
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 , 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:
čia yra vienetinė matrica.
a_x = 3;
a_y = 4;
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: ')
Atspindžio matrica yra:
disp(B)
-0.2800 0.9600 0.9600 0.2800
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. . 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 . 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 . 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)
ans = 1.0000
det(B)
ans = -1
Š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 . 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;
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)]);
Jūsų pasirinktas determinantas det(C) = 2
disp(['Gauto lygiagretainio plotas yra lygus: ' num2str(Plotas)]);
Gauto lygiagretainio plotas yra lygus: 2
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 , kuris tenkina sąlygą:
Skaičius λ yra vadinamas tikrine reikšme. Sakoma, kad tikrinis vektorius atitinka tikrinę reikšmę λ.
Šioje dalyje mes ištirsime geometrinę tikrinių reikšmių ir vektorių interpretaciją. Tam panaudosime specialaus tipo matricas - simetrines matricas, t.y. tokias, kad . Šį matricų tipą mes nagrinėsime todėl, kad jų tikrinės reikšmės visada yra realios. Taip pat apsiribosime matricomis.
Žemiau bus sugeneruota 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)]
D = 2×2
5 2 2 5
[vecs, vals] = eig(D);
disp(['Tikrinės reikšmės yra: ' num2str(vals(1, 1)) ' ir ' num2str(vals(2, 2))]);
Tikrinės reikšmės yra: 3 ir 7
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']);
Tikriniai vektoriai, atitinkantys tikrinę reikšmę 3: (-0.70711t; 0.70711t), č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']);
Tikriniai vektoriai, atitinkantys tikrinę reikšmę 7: (0.70711s; 0.70711s), č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;
v_y = 1;
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ų , abu pavaizduoti vektoriai ( ir ) yra vienoje tiesėje. Tai reiškia, kad egzistuoja toks skaičius kad iš jo padauginę tikrinį vektorių gausime vektorių . Būtent tokią geometrinę prasmę ir turi tikrinės reikšmė ir jas atitinkantys tikriniai vektoriai.

Pabandykite patys

  1. Įrodykite, kad posūkio ir atspindžio matricų determinantai yra atitinkamai 1 ir -1.
  2. Įrodykite, kad simetrinės tikriniai vektoriai yra ir .
  3. 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.