14

Click here to load reader

Algebra - Matlab 3 - Partes 1, 2 y 3. DEFINITIVO!

Embed Size (px)

Citation preview

Page 1: Algebra - Matlab 3 - Partes 1, 2 y 3. DEFINITIVO!

Buen tutorial para rectas y planos: http://www-users.math.umd.edu/~jmr/241/lines_planes.htmlY para bases: http://www.math.ucdavis.edu/~daddel/Math22al/LABS/LAB7/lab7_Winter06/node6.html

PRACTICA 3.1 DE ALGEBRA - MATLABEjercicio 3.1.1

a)>> A=[1 0 3; 5 1 1; 0 1 2];>> det(A)

ans =

16b)>> syms a b;>> det([a b 0; 0 a b; a 0 b]) ans = a^2*b + a*b^2c)>> syms TETA;>> det([cos(TETA) sin(TETA) tan(TETA); 0 cos(TETA) -sin(TETA); 0 sin(TETA) cos(TETA)]) ans = cos(TETA)^3 + cos(TETA)*sin(TETA)^2d)>> syms a b c d e f g h i j;>> det([0 0 0 a; 0 0 b c; 0 d e f; g h i j]) ans = a*b*d*g

Ejercicio 3.1.2>> v=[3 -1 2];>> n=[1 -1 2];>> proy=v-(dot(n,v)/dot(n,n))*n

proy =

1.6667 0.3333 -0.6667

>> perp=v-proy

perp =

1.3333 -1.3333 2.6667

Nota: La proyeccion sobre W = perpendicular sobre n = v - proyeccion de v sobre n

Page 2: Algebra - Matlab 3 - Partes 1, 2 y 3. DEFINITIVO!

Buen tutorial para rectas y planos: http://www-users.math.umd.edu/~jmr/241/lines_planes.htmlY para bases: http://www.math.ucdavis.edu/~daddel/Math22al/LABS/LAB7/lab7_Winter06/node6.html

Para pintar el plano y los vectores v, proy v, perp v:>> v=[3 -1 2]; syms x y z; plano=x-y+2*z;>> zplano=solve(plano,z);>> ezmesh(zplano), hold on>> plot3([0 v(1)],[0 v(2)], [0 v(3)],'r')>> plot3([0 perp(1)],[0 perp(2)], [0 perp(3)],'b')>> plot3([0 proy(1)],[0 proy(2)], [0 proy(3)],'b')

Breve explicacion: como la funcion plot (y plot3) usa puntos para representar, si solo pusieramos plot(v(1),v(2),v(3)) nos pintaria el punto final del vector. Para pintar el inicio ([0,0,0]) y que los una con una raya, tendremos que crear las matrices [0 v(1)], [0 v(2)] y [0 v(3)].

Ejercicio 3.1.3a)>> A=[-7 0 12 21 3;-9 0 28 39 4;-1 5 7 8 2;-5 5 39 44 8;5 0 4 -3 2];>> [SOL,b]=rref(A)

SOL =

1.0000 0 0 -1.3636 0 0 1.0000 0 -0.0091 0 0 0 1.0000 0.9545 0 0 0 0 0 1.0000 0 0 0 0 0

b =

1 2 3 5

Page 3: Algebra - Matlab 3 - Partes 1, 2 y 3. DEFINITIVO!

Buen tutorial para rectas y planos: http://www-users.math.umd.edu/~jmr/241/lines_planes.htmlY para bases: http://www.math.ucdavis.edu/~daddel/Math22al/LABS/LAB7/lab7_Winter06/node6.html

>> BASE=A(b,:)

BASE =

-7 0 12 21 3 -9 0 28 39 4 -1 5 7 8 2 5 0 4 -3 2>> dim=rank(A)

dim =

4NOTA: Observar que hay dos posibles respuestas validas para la base: SOL y BASE.b)>> [SOL,b]=rref(A')

SOL =

1 0 0 0 0 0 1 0 0 -1 0 0 1 0 -1 0 0 0 1 1 0 0 0 0 0

b =

1 2 3 4

>> BASE=A(b,:)

BASE =

-7 0 12 21 3 -9 0 28 39 4 -1 5 7 8 2 -5 5 39 44 8

>> dim=rank(A')

dim =

4c)Como se puede observar, rank(SOL)=rank(A)=rank(BASE) en ambos casos, porque el rango de A no cambia si se hace por filas o por columnas.

Page 4: Algebra - Matlab 3 - Partes 1, 2 y 3. DEFINITIVO!

Buen tutorial para rectas y planos: http://www-users.math.umd.edu/~jmr/241/lines_planes.htmlY para bases: http://www.math.ucdavis.edu/~daddel/Math22al/LABS/LAB7/lab7_Winter06/node6.html

Ejercicio 3.1.4>> Base=[1 2 3;-1 0 7;7 5 0];>> Pb=Base';>> v1=[1;2;3]; v2=[0;-3;12];v3=[-7;2;-8];>> result = rref([Pb v1 v2 v3])

result = 1.0000 0 0 1.0000 -4.3125 7.9792 0 1.0000 0 0 3.5625 -4.5625 0 0 1.0000 0 1.1250 -2.7917NOTA: He hecho Pb = Base' porque los vectores de la base tienen que estar en vertical en vez de en horizontal para resolverlos por Gauss (rref). L as coordenadas de v1 seria result(:,4), de v2, result(:,5) y de v3, result(:,6). (Es decir, la cuarta, quinta y sexta columna respectivamente)

Page 5: Algebra - Matlab 3 - Partes 1, 2 y 3. DEFINITIVO!

Buen tutorial para rectas y planos: http://www-users.math.umd.edu/~jmr/241/lines_planes.htmlY para bases: http://www.math.ucdavis.edu/~daddel/Math22al/LABS/LAB7/lab7_Winter06/node6.html

Ejercicio 3.1.5>> M=[1 3; 2 -5; -4 0]';>> k=2;TETA=pi/4;>> TR2expX=[k 0;0 1];TR2expY=[1 0;0 k];TR2expXY=[k 0;0 k];TR2reflX=[1 0;0 -1];TR2reflY=[-1 0;0 1];TR2rotac=[cos(TETA) -sin(TETA);sin(TETA) cos(TETA)];>> plot([M(1,1);M(1,2)],[M(2,1);M(2,2)],'r'), hold on, grid on>> plot([M(1,1);M(1,3)],[M(2,1);M(2,3)],'r')>> plot([M(1,2);M(1,3)],[M(2,2);M(2,3)],'r')>> Mprima=TR2expX*TR2expY*TR2expXY*TR2reflX*TR2reflY*TR2rotac*M;>> plot([Mprima(1,1);Mprima(1,2)],[Mprima(2,1);Mprima(2,2)],'b')>> plot([Mprima(1,1);Mprima(1,3)],[Mprima(2,1);Mprima(2,3)],'b')>> plot([Mprima(1,2);Mprima(1,3)],[Mprima(2,2);Mprima(2,3)],'b')NOTA: Como véis, me he inventado tres puntos cualquiera como vertices del triángulo (matriz M).

Ejercicio 3.1.6Creamos un archivo llamado T3D.m y ponemos esto:

function [ Xprima, Yprima, Zprima ] = T3D( X, Y, Z, T, valor ) switch T(1) % Escojo la TL (Tr) en funcion del numero que me pasen en T case 1 Tr=[1 0 0;0 cos(valor) -sin(valor); 0 sin(valor) cos(valor)]; case 2 Tr=[cos(valor) 0 -sin(valor); 0 1 0; sin(valor) 0 cos(valor)]; case 3 Tr=[cos(valor) -sin(valor) 0; sin(valor) cos(valor) 0; 0 0 1]; case 4 Tr=[valor 0 0; 0 valor 0; 0 0 valor]; case 5 Tr=[1 0 0; 0 1 0; 0 0 0]; case 6 Tr=[0 0 0; 0 1 0; 0 0 1]; case 7 Tr=[1 0 0; 0 -1 0; 0 0 -1]; case 8 Tr=[1 0 0; 0 -1 0; 0 0 1]; end M=[reshape(X,1,[]);reshape(Y,1,[]);reshape(Z,1,[])]; % Esto pone todas las X en 1 fila, Y en otra, Z en otra... Mprima=Tr*M; % Aplico la TL sizX=size(X); % Guardo el tamaño de las variables originales, para que sizY=size(Y); % las prima (Xprima, Yprima, Zprima) tengan las mismas sizZ=size(Z); % dimensiones que las (X, Y, Z) que me pasan originalmnte Xprima=reshape([Mprima(1,:)]',sizX(1),sizX(2)); % Guardo las Xprima en Yprima=reshape([Mprima(2,:)]',sizY(1),sizY(2)); % su tamaño corespndiente Zprima=reshape([Mprima(3,:)]',sizZ(1),sizZ(2)); return;end

Breve explicacion: La función reshape que nos piden usar sirve para coger una matriz A de mxn, y pasarlo a axb, escribiendo: nuevaA=reshape(A,a,b); Cuando en b pones [], quiere decir que haga la matriz nuevaA de axc, donde c es el numero que haga falta para que siga habiendo el mismo nº de elementos. Ej: A=[1 0;0 1]; nuevaA=reshape(A,1,[]); Devolveria: [1 0 0 1] (solo una fila!)

Page 6: Algebra - Matlab 3 - Partes 1, 2 y 3. DEFINITIVO!

Buen tutorial para rectas y planos: http://www-users.math.umd.edu/~jmr/241/lines_planes.htmlY para bases: http://www.math.ucdavis.edu/~daddel/Math22al/LABS/LAB7/lab7_Winter06/node6.html

Con el codigo de ejemplo que viene ahi, he usado esto para obtener lo que véis en la imagen:

>> t=0:pi/10:2*pi;[X,Y,Z] = cylinder(2+cos(t));>> [Xp, Yp, Zp] = T3D(X,Y,Z,4,8);>> hold on;>> surf(X,Y,Z)>> surf(Xp,Yp,Zp)

Page 7: Algebra - Matlab 3 - Partes 1, 2 y 3. DEFINITIVO!

Buen tutorial para rectas y planos: http://www-users.math.umd.edu/~jmr/241/lines_planes.htmlY para bases: http://www.math.ucdavis.edu/~daddel/Math22al/LABS/LAB7/lab7_Winter06/node6.html

Ejercicio 3.1.7a)>> v1=[-2 3 -1];v2=[0 -2 2];>> b1=v1;>> b2=v2 - (dot(v2,b1)/dot(b1,b1))*b1;>> B=[b1./norm(b1); b2./norm(b2)]'

B =

-0.5345 -0.6172 0.8018 -0.1543 -0.2673 0.7715b)>> v1=[-2 5 0 4];v2=[1 1 2 -1];v3=[1 0 0 0];>> b1=v1;>> b2=v2 - (dot(v2,b1)/dot(b1,b1))*b1;>> b3=v3 - (dot(v3,b1)/dot(b1,b1))*b1 - (dot(v3,b2)/dot(b2,b2))*b2;>> B=[b1./norm(b1); b2./norm(b2); b3./norm(b3)]'

B =

-0.2981 0.3617 0.8833 0.7454 0.4206 0.0793 0 0.7571 -0.3101 0.5963 -0.3449 0.3425c)>> %x=-2*y+z;>> v1=[-2 1 0];v2=[1 0 1];>> b1=v1;>> b2=v2 - (dot(v2,b1)/dot(b1,b1))*b1;>> B=[b1./norm(b1); b2./norm(b2)]'

B =

-0.8944 0.1826 0.4472 0.3651 0 0.9129

Ejercicio 3.1.8a)>> %x=y+z;>> v1=[1 1 0];v2=[1 0 1];>> %W=col(A) -> Wp=ker(trans(A))>> null([v1' v2']')

ans =

-0.5774 0.5774

Page 8: Algebra - Matlab 3 - Partes 1, 2 y 3. DEFINITIVO!

Buen tutorial para rectas y planos: http://www-users.math.umd.edu/~jmr/241/lines_planes.htmlY para bases: http://www.math.ucdavis.edu/~daddel/Math22al/LABS/LAB7/lab7_Winter06/node6.html

0.5774b)>> %x + y + z = 0>> %x - y - z = 0>> v1=cross([1 1 1],[1 -1 -1]);>> null([v1']')

ans =

-0.7071 0.7071 0.5000 0.5000 0.5000 0.5000c)>> v1=[1 2 3 4];v2=[5 6 7 8];>> null([v1' v2']')

ans =

-0.4001 -0.3741 0.2546 0.7970 0.6910 -0.4717 -0.5455 0.0488d)>> v1=[1 -1 3];v2=[-1 1 -2];>> null([v1' v2']')

ans =

-0.7071 -0.7071 -0.0000

Ejercicio 3.1.9a)>> A=[2 4; 3 6];>> %im(A)=col(A) -> im(A)perpendicular=ker(trans(A))>> null(A')

ans =

-0.8321 0.5547b)>> A=[1 1; 1 2; 1 3];>> null(A')

ans =

0.4082 -0.8165

Page 9: Algebra - Matlab 3 - Partes 1, 2 y 3. DEFINITIVO!

Buen tutorial para rectas y planos: http://www-users.math.umd.edu/~jmr/241/lines_planes.htmlY para bases: http://www.math.ucdavis.edu/~daddel/Math22al/LABS/LAB7/lab7_Winter06/node6.html

0.4082

Ejercicio 3.1.10a)>> A=[1 -2 3; 5 2 1; 0 1 -2; -1 -1 1];>> BASE_row=rref(A)

BASE_row =

1 0 0 0 1 0 0 0 1 0 0 0

>> BASE_col=rref(A')

BASE_col =

1.0000 0 0 0 0 1.0000 0 -0.2000 0 0 1.0000 -0.6000

>> BASE_ker=null(A)

BASE_ker =

Empty matrix: 3-by-0

>> BASE_kerP=null(A')

BASE_kerP =

0 0.1690 0.5071 0.8452

Podemos ver, como comprobación, que:>> dot(BASE_col(1),BASE_kerP(1))

ans =

0

Page 10: Algebra - Matlab 3 - Partes 1, 2 y 3. DEFINITIVO!

Buen tutorial para rectas y planos: http://www-users.math.umd.edu/~jmr/241/lines_planes.htmlY para bases: http://www.math.ucdavis.edu/~daddel/Math22al/LABS/LAB7/lab7_Winter06/node6.html

b)>> A=[-1 1 -1 0 2; -2 0 2 4 4; 2 2 -2 0 1; -3 -1 3 4 5];>> BASE_row=rref(A)

BASE_row =

1 0 0 0 0 0 1 0 2 0 0 0 1 2 0 0 0 0 0 1

>> BASE_col=rref(A')

BASE_col =

1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0

>> BASE_ker=null(A)

BASE_ker =

-0.0000 0.6667 0.6667 -0.3333 -0.0000

>> BASE_kerP=null(A')

BASE_kerP =

Empty matrix: 4-by-0

Comprobación, por ejemplo:>> dot(BASE_row(2),BASE_ker(1))

ans =

0