# 2022-02-09 Projections, rotations, and reflections

## Contents

# 2022-02-09 Projections, rotations, and reflections¶

## Last time¶

Algebra of linear transformations

Polynomial evaluation and fitting

Orthogonality

## Today¶

Projections

Rotations

Reflections

Oh my!

```
using LinearAlgebra
using Plots
using Polynomials
default(linewidth=4, legendfontsize=12)
function vander(x, k=nothing)
if isnothing(k)
k = length(x)
end
m = length(x)
V = ones(m, k)
for j in 2:k
V[:, j] = V[:, j-1] .* x
end
V
end
```

```
vander (generic function with 2 methods)
```

# Matrices as linear transformations¶

Linear algebra is the study of linear transformations on vectors, which represent points in a finite dimensional space. The matrix-vector product \(y = A x\) is a linear combination of the columns of \(A\). The familiar definition,

can also be viewed as

# Inner products and orthogonality¶

The **inner product**

**norm**is induced by the inner product,

**bilinear**, which means that they satisfy some convenient algebraic properties

# Examples with inner products¶

```
x = [0, 1]
y = [1, 2]
@show x' * y
@show y' * x;
```

```
x' * y = 2
y' * x = 2
```

```
ϕ = pi/6
y = [cos(ϕ), sin(ϕ)]
cos_θ = x'*y / (norm(x) * norm(y))
@show cos_θ
@show cos(ϕ-pi/2);
acos(cos_θ)
```

```
cos_θ = 0.49999999999999994
cos(ϕ - pi / 2) = 0.4999999999999999
```

```
1.0471975511965979
```

# Polynomials can be orthogonal too!¶

```
x = LinRange(-1, 1, 50)
A = vander(x, 4)
M = A * [.5 0 0 0; # 0.5
0 1 0 0; # x
0 0 1 0]' # x^2
scatter(x, M)
plot!(x, 0*x, label=:none, color=:black)
```

Which inner product will be zero?

Which functions are even and odd?

# Polynomial inner products¶

```
M[:,1]' * M[:,2]
```

```
-2.220446049250313e-16
```

```
M[:,1]' * M[:,3]
```

```
8.673469387755102
```

```
M[:,2]' * M[:,3]
```

```
-4.440892098500626e-16
```

# Geometry of Linear Algebra¶

We’d like to develop intuition about transformations on vectors. We’ll start with a peanut-shaped cluster of points and see how they transform.

```
default(aspect_ratio=:equal)
function peanut()
theta = LinRange(0, 2*pi, 50)
r = 1 .+ .4*sin.(3*theta) + .6*sin.(2*theta)
x = r .* cos.(theta)
y = r .* sin.(theta)
x, y
end
x, y = peanut()
scatter(x, y)
```

We’ll group all these points into a \(2\times n\) matrix \(X\). Note that multiplication by any matrix \(A\) is applied to each column separately, i.e.,

```
X = [x y]'
size(X)
```

```
(2, 50)
```

# Inner products and projections¶

Consider the operation \(f(x) = v (v^T x)\) for some vector \(v\). We’ll apply this same operation to every point in the original cluster \(X\).

```
function tplot(X, Y)
"Plot a transformation from X to Y"
scatter(X[1,:], X[2,:], label="X")
scatter!(Y[1,:], Y[2,:], label="Y")
end
v = [1, 0]
tplot(X, v * v' * v * v' * X)
```

Are the parentheses important? Why or why not?

# Questions¶

```
v = [2, 0]
# What happens if v is not normalized?
# Discuss with your group and make a prediction before uncommenting and running the line below.
tplot(X, v * v' * X)
```

```
# Vector transformations are "nice" if norm(v) = 1
theta = pi * .3
v = [cos(theta), sin(theta)]
@show norm(v)
tplot(X, v * v' * X)
```

```
norm(v) = 1.0
```

# Discuss¶

Discuss with your group what the vector \(v\) looks like in these diagrams.

What is the

**null space**of each transformation?What is the

**range**of each transformation?For each figure, what happens if you apply the transformation \(v v^T\) to the red points?

What about \(I - v v^T\)?

# Givens Rotation¶

We can rotate the input using a \(2\times 2\) matrix, parametrized by \(\theta\).

```
function givens(theta)
s = sin(theta)
c = cos(theta)
A = [c -s; s c]
A
end
givens(0)
```

```
2×2 Matrix{Float64}:
1.0 -0.0
0.0 1.0
```

```
givens(π)
```

```
2×2 Matrix{Float64}:
-1.0 -1.22465e-16
1.22465e-16 -1.0
```

```
tplot(X, givens(.8) * X)
```

What is the null space and range of the Givens matrix?

Is the Givens matrix orthogonal? What does that mean?

# Reflection¶

Using a construct of the form \(I - \alpha v v^T\), create a reflection across the plane defined by unit normal vector \(v = [\cos\theta, \sin\theta]\). Try different values of \(\alpha\) and convince yourself of why it works or sketch a diagram for the projections \(v v^T\) and \(I - v v^T\) and decide how to modify it to make a reflection.

```
function reflect(theta)
v = [cos(theta), sin(theta)]
I - 2 * v * v'
end
tplot(X, reflect(pi/2) * X)
```

```
using Test
@test mapslices(norm, X; dims=1) ≈ mapslices(norm, reflect(0.3) * X; dims=1)
@test X ≈ reflect(0.5) * reflect(0.5) * X
```

```
Test Passed
Expression: X ≈ reflect(0.5) * reflect(0.5) * X
Evaluated: [1.0 1.291607690975099 … 0.6919723366713914 0.9999999999999993; 0.0 0.16653437041080127 … -0.08921995295821092 -2.449293598294705e-16] ≈ [1.0 1.291607690975099 … 0.6919723366713914 0.9999999999999993; 0.0 0.16653437041080127 … -0.08921995295821092 -2.449293598294705e-16]
```

Where is the vector \(v\) on the figure above?

Does the reflection matrix change if you replace \( v(\theta)\) with \(v(\theta + \pi)\)? Why or why not?

What happens if you reflect twice?

What is the null space and range of the reflection matrix?

Is the reflection matrix orthogonal?