Programaci´ on: rotaciones de Givens en el plano
Objetivos. Dado un vector v no nulo en R2, aprender a construir una matriz de rotaci´on R que transforme v en un m´ultiplo positivo del vector b´asico e1.
Requisitos. Programaci´on con matrices, vectores y ciclos; matrices ortogonales; soluci´on de sistemas de ecuaciones lineales.
Deducci´ on de las f´ ormulas
1. Sistema de ecuaciones. Est´a dado un vector v = [x, y]> ∈ R2\ {02}. Buscamos un par de n´umeros (c, s) ∈ R2 tal que c2+ s2 = 1 y
c −s
s c
x y
= px2+ y2 0
. (1)
La condici´on v 6= 02 significa que q
= kvk2 6= 0.
Calculamos el producto de la matriz por el vector en el lado izquierdo de la igualdad (1), y copiamos el lado derecho:
"
− +
#
=
" p
x2 + y2 0
#
. (2)
Escribimos esta igualdad de vectores como un sistema de dos ecuaciones lineales con inc´ognitas c y s:
c − s =p
x2+ y2 (3)
c + s = 0. (4)
El determinante del sistema es
= 6= 0,
por eso el sistema tiene una ´unica soluci´on. En el siguiente ejercicio vamos a resolver este sistema.
Programaci´on: rotaciones de Givens en el plano, p´agina 1 de 4
2. Soluci´on del sistema de ecuaciones (3) y (4). Sumamos la ecuaci´on (3) multiplicada por x, con la ecuaci´on (4) multiplicada por y:
c + 0s = .
Sumamos la ecuaci´on (3) multiplicada por −y con la ecuaci´on (4) multiplicada por x:
0c + s = .
Denotandopx2+ y2 por r, escribimos la soluci´on:
c = , s = . (5)
3. Soluci´on con n´umeros complejos. Vamos a resolver la misma ecuaci´on (1) de otra manera, usando n´umeros complejos. Los pares de n´umeros (x, y), (c, s) se pueden escribir como n´umeros complejos:
z = (x, y) = x + i y, u = (c, s) = c + i s.
Como ya hemos visto en (2), el lado izquierdo de la ecuaci´on vectorial (1) se escribe como el siguiente par ordenado de n´umeros reales o como un n´umero complejo:
, =
| {z }
parte real
+ i (
| {z }
parte imaginaria
).
Este n´umero complejo es el producto de los n´umeros complejos y . El vector del lado derecho de (1) tambi´en se escribe en t´erminos de z:
px2+ y2, 0 = . Por eso la ecuaci´on (1) se transforma en la ecuaci´on
zu = |z|.
Su soluci´on es
u = |z|
z = |z| z
z z = .
La f´ormula obtenida es equivalente a la f´ormula (5).
4. Programaci´on: el c´alculo de los n´umeros c y s para un vector dado. Escriba una funci´on que calcule los n´umeros c y s del ejercicio anterior para un vector dado v ∈ R2\ {02}:
function [cs] = givenscs(v), r = norm(v);
c = s =
cs = [c; s];
end
Programaci´on: rotaciones de Givens en el plano, p´agina 2 de 4
Multiplicaci´ on de una matriz 2 × 2 por una matriz
5. Cada rengl´on del producto de dos matrices es una combinaci´on lineal de los renglones del segundo factor. Multiplique la matriz de rotaci´on por una matriz general 2 × 3:
RA =
"
c − s
s c
# "
A1,1 A1,2 A1,3 A2,1 A2,2 A2,3
#
=
" #
.
Copiamos el primer rengl´on de RA, luego lo escribimos como una combinaci´on lineal:
(RA)1,∗ =h i
= c h i
+ h i
. Hacemos una operaci´on similar con el segundo rengl´on de RA:
(RA)1,∗ =h i
= h i
+ h i
.
Resumen. Cada rengl´on de RA se escribe como una combinaci´on lineal de los renglones de A:
(RA)1,∗ = A1,∗+ A2,∗, (RA)2,∗ = A1,∗+ A2,∗. 6. Escriba una funci´on que multiplique la matriz de rotaci´on determinada por dos n´umeros c y s, por la matriz dada de tama˜no 2 × m, sin construir la matriz de rotaci´on en forma expl´ıcita.
function [B] = mulrotation22bymatrix(cs, A), B = zeros(size(A));
B(1, :) = cs(1) * A(1, :) + ??? * A(2, :);
B(2, :) = ??? * A(1, :) + ??? * A(2, :);
end
Programaci´on: rotaciones de Givens en el plano, p´agina 3 de 4
Comprobaci´ on
7. Escriba una funci´on que construya y devuelva la matriz de rotaci´on 2 × 2 determinada por dos n´umeros c y s:
function [R] = rotationmatrix22(cs), R = [ cs(1), ???; ???, ??? ];
end
8. Comprobaci´on. Escribimos una funci´on que calcula los n´umeros c y s para la primera columna de una matriz A, y luego multiplica la matriz de rotaci´on por esta matriz A.
function [] = testrotation22(), A = [-3, 5, 7, 6; 2, 4, 0, -5];
cs = givenscs(A(:, 1));
B = mulrotation22bymatrix(cs, A);
R = rotationmatrix22(cs);
display(A);
display(cs);
display(R);
display(B);
display(R * A);
end
Programaci´on: rotaciones de Givens en el plano, p´agina 4 de 4