Try our Free Online Math Solver!
Electric Engineer 364a Homework 7 additional problems
Suggestions for exercise 9.30
We recommend the following to generate a problem instance:
n = 100;
m = 200;
Of course, you should try out your code with different dimensions, and different data as well.
In all cases, be sure that your line search first finds a step length for
which the tentative
point is in domf; if you attempt to evaluate f outside its domain, you’ll get complex
numbers, and you’ll never recover.
To find expressions for f(x)
and 2f(x), use the chain rule (see Appendix
A.4); if you
attempt to compute , you will be sorry.
To compute the Newton step, you can use vnt=-H\g.
Suggestions for exercise 9.31
For 9.31a, you should try out N = 1, N = 15, and N = 30. You might as well
store the Cholesky factorization of the Hessian, and then back solve to get the search direc-
tions, even though you won’t really see any speedup inMatlab for such a small problem. After
you evaluate the Hessian, you can find the Cholesky factorization as L=chol(H,’ lower ’).
You can then compute a search step as -L’\(L\g), where g is the gradient at the current
point. Matlab will do the right thing, i.e., it will first solve L\g using forward subsitution,
and then it will solve -L’\(L\g) using backward substitution. Each substitution is order
To fairly compare the convergence of the three methods (i.e., N = 1, N = 15,
N = 30),
the horizontal axis should show the approximate total number of flops required, and not the
number of iterations. You can compute the approximate number of flops using (n^3)/3 for each
factorization, and 2n^2 for each solve (where each ‘solve’ involves a forward subsitition step
and a backward subsitution step).
1. Three-way linear classification . We are given data
three nonempty sets of vectors in R^n. We wish to find three affine functions on R^n,
that satisfy the following properties:
In words: f1 is the largest of the three functions on the x data points, f2 is
of the three functions on the y data points, f3 is the largest of the three functions on
the z data points. We can give a simple geometric interpretation: The functions f1,
f2, and f3 partition R^n into three regions,
defined by where each function is the largest of the three. Our goal is to
Pose this as a convex optimization problem. You may not use strict
your formulation .
Solve the specific instance of the 3-way separation problem given in
with the columns of the matrices X, Y and Z giving the x(j), j = 1, . . . ,N, y(j), j =
1, . . . ,M and z(j), j = 1, . . . , P. To save you the trouble of plotting data points and
separation boundaries, we have included the plotting code in sep3way_data.m. (Note
that a1, a2, a3, b1 and b2 contain arbitrary numbers; you should compute the correct
values using cvx.)
where is the variable , and are parameters.
(a) Express the optimality conditions for this problem as a set of linear
involving x. (These are called the normal equations.)
(b) Now assume that k << n. Describe an efficient method to solve the normal
equations found in (2a). Give an approximate flop count for a general method
that does not exploit structure, and also for your efficient method.
(c) A numerical instance. In this part you will try out your efficient
choose k = 100 and n = 2000, and First, randomly generate A and
b with these dimensions. Form the normal equations as in (2a), and solve them
using a generic method. Next, write (short) code implementing your efficient
method, and run it on your problem instance. Verify that the solutions found by
the two methods are nearly the same, and also that your efficient method is much
faster than the generic one.
Note: You’ll need to know some things about Matlab to be sure you get the
from the efficient method. Your method should involve solving linear equations with
tridiagonal coefficient matrix. In this case, both the factorization and the back sub-
stitution can be carried out very efficiently. The Matlab documentation says that
banded matrices are recognized and exploited, when solving equations, but we found
this wasn’t always the case. To be sure Matlab knows your matrix is tridiagonal, you
can declare the matrix as sparse, using spdiags, which can be used to create a tridiagonal
matrix. You could also create the tridiagonal matrix conventionally, and then
convert the resulting matrix to a sparse one using sparse.
One other thing you need to know. Suppose you need to solve a group of linear
equations with the same coefficient matrix, i.e., you need to compute
where F is invertible and ai are column vectors. By concatenating columns, this can
be expressed as a single matrix
To compute this matrix using Matlab, you should collect
the righthand sides into one
matrix (as above) and use Matlab’s backslash operator : F\A. This will do the right
thing: factor the matrix F once, and carry out multiple back substitutions for the