0% found this document useful (0 votes)
85 views8 pages

Chapter 8: Performance Surfaces and Optimum Points: Brandon Morgan 1/15/2021

The document discusses analyzing a quadratic function F(x) using contour plots and calculating directional derivatives. It provides the gradient and Hessian of F(x) and generates contour plots on different bounds to visualize the function. It then calculates the directional derivative of F(x) at the point x* = [0, 0]T in the direction of p = [1, 1]T, finding the slope to be √4/2. A final zoomed contour plot illustrates this direction vector and slope.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
85 views8 pages

Chapter 8: Performance Surfaces and Optimum Points: Brandon Morgan 1/15/2021

The document discusses analyzing a quadratic function F(x) using contour plots and calculating directional derivatives. It provides the gradient and Hessian of F(x) and generates contour plots on different bounds to visualize the function. It then calculates the directional derivative of F(x) at the point x* = [0, 0]T in the direction of p = [1, 1]T, finding the slope to be √4/2. A final zoomed contour plot illustrates this direction vector and slope.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 8

Chapter 8: Performance Surfaces and Optimum Points

Brandon Morgan

1/15/2021

E8.7
We are given the following vector function
 
1 T 1 −3  
F (x) = X X + 4−4 X +2
2 −3 1

Our function is in qudratic form from Eq. (8.35), F (x) = 21 X T AX + dT X + c. From Eq. (8.38), the gradient
is given by ∇F (X) = AX + d. The Hessian is given by Eq. (8.39), ∇2 F (X) = A.
Thus, our gradient is the following:
   
1 −3 4
∇F (X) = X+
−3 1 −4

and our Hessian is the following:


 
1 −3
∇2 F (X) =
−3 1

library(purrr) # used for map2_dbl function


library(plotly) # used for 3D plotting

## Warning: package ’plotly’ was built under R version 3.6.3

## Loading required package: ggplot2

## Warning: package ’ggplot2’ was built under R version 3.6.3

##
## Attaching package: ’plotly’

1
## The following object is masked from ’package:ggplot2’:
##
## last_plot

## The following object is masked from ’package:stats’:


##
## filter

## The following object is masked from ’package:graphics’:


##
## layout

library(ggplot2) # used for plotting

Here we have the contour plot of our function:

fun = function(x, y) {
X = matrix(c(x, y), ncol=1)
A = matrix(c(1, -3, -3, 1),ncol=2)
d = matrix(c(4, -4), ncol=1)
c = 2

0.5*t(X)%*%A%*%X+t(d)%*%X+2
}

Here we have a global view of the contour plot on the bounds x = [−100, 100] for our function with color
scale.

# BOUNDS USED FOR CONTOUR


pointsX = seq(-100, 100, length=200)# create a 200x1 vector of values for x axis
pointsY = seq(-100, 100, length=200) # create a 200x1 vector of values for y axis
myGrid = expand.grid(pointsX, pointsY) # create 200x200 grid of points
z = map2_dbl(myGrid$Var1, myGrid$Var2, ~fun(.x, .y)) # maps all possible combinations
# of the grid through the function
x = myGrid$Var1
y = myGrid$Var2
myPlot = plot_ly(x=~x, y=~y, z=~z, type="mesh3d", intensity=~z,
colors = colorRamp(c("black","red","yellow","chartreuse3")))
myGrid$z = z
#myPlot
v = ggplot( myGrid,aes(x, y, z=z)) +geom_contour_filled()
v

2
100
level
(−20000, −15000]
(−15000, −10000]
50 (−10000, −5000]
(−5000, 0]
(0, 5000]
(5000, 10000]
0
y

(10000, 15000]
(15000, 20000]
(20000, 25000]
(25000, 30000]
−50
(30000, 35000]
(35000, 40000]
(40000, 45000]

−100

−100 −50 0 50 100


x

Here we have another contour plot of our function but this time on smaller bounds x = [−2, 2] with color
scale.

# BOUNDS USED FOR CONTOUR


pointsX = seq(-2, 2, length=200)# create a 200x1 vector of values for x axis
pointsY = seq(-2, 2, length=200) # create a 200x1 vector of values for y axis
myGrid = expand.grid(pointsX, pointsY) # create 200x200 grid of points
z = map2_dbl(myGrid$Var1, myGrid$Var2, ~fun(.x, .y)) # maps all possible combinations
# of the grid through the function
x = myGrid$Var1
y = myGrid$Var2
myPlot = plot_ly(x=~x, y=~y, z=~z, type="mesh3d", intensity=~z,
colors = colorRamp(c("black","red","yellow","chartreuse3")))
myGrid$z = z
#myPlot
v = ggplot( myGrid,aes(x, y, z=z)) +geom_contour_filled()
v

3
2

level
1 (−10, −5]
(−5, 0]
(0, 5]
(5, 10]
0
y

(10, 15]
(15, 20]
(20, 25]
(25, 30]
−1
(30, 35]

−2

−2 −1 0 1 2
x

We want to find the function derivitve of F (x) at the point x∗ = [0, 0]T in the direction of p = [1, 1]T .
pT ∇F (X)
The equation for a directional derivative is given by Eq. (8.12), ||p|| .
Thus, the derivative in the direction of P is computed to be:

 T     
1 1 −3 0 4
( + ) √
−1 −3 1 0 −4 8
  = √ =4 2
1 2
|| ||
−1

In conclusion, the function has slope 4 2 in the direction of p from the point x∗ . The slope in this direction
will only be zero if pT ∇F (X) = 0, which will only happen if the directional derivative p is orthogonal to the
gradient at x∗ (tangent to the contour).
Here we have another zoomed in contour plot of our √ function on the bounds x = [−0.5, 1.5], along with the
direction vector p from point x∗ , which has slope 4 2.

# BOUNDS USED FOR CONTOUR


pointsX = seq(-.5, 1.5, length=200)# create a 200x1 vector of values for x axis
pointsY = seq(-.5, 1.5, length=200) # create a 200x1 vector of values for y axis
myGrid = expand.grid(pointsX, pointsY) # create 200x200 grid of points
z = map2_dbl(myGrid$Var1, myGrid$Var2, ~fun(.x, .y)) # maps all possible combinations

4
Figure 1: Original Function

5
Figure 2: Original Function with inverted view

6
Figure 3: Original Function with zoomed in domain

7
# of the grid through the function
x = myGrid$Var1
y = myGrid$Var2
myPlot = plot_ly(x=~x, y=~y, z=~z, type="mesh3d", intensity=~z,
colors = colorRamp(c("black","red","yellow","chartreuse3")))
myGrid$z = z
#myPlot
v = ggplot( myGrid,aes(x, y, z=z)) +geom_contour_filled()+
geom_segment(aes(x=0,y=0, xend=1, yend=1, colour="segment"), arrow=arrow(length=unit(0.25, "cm")))+
geom_point(aes(x=0,y=0), color="red")
v

1.5

level
(−4, −2]
(−2, 0]
1.0
(0, 2]
(2, 4]
(4, 6]

0.5 (6, 8]
y

(8, 10]
(10, 12]
(12, 14]
0.0

colour
segment

−0.5

−0.5 0.0 0.5 1.0 1.5


x

You might also like