Lagrange Multipliers


The geometry of Lagrange multipliers is explored in the context of the
optimization problem for y e^x on an ellipse. Solutions are also obtained
numerically using fsolve.

> with(plots):

Warning, the name changecoords has been redefined

The Function f Being Optimized and the Constraint

The function being optimized.

> f := y*exp(x);

f := y*exp(x)

The constraint, an ellipse.

> constr1 := x^2+x*y+4*y^2 -1=0;

constr1 := x^2+x*y+4*y^2-1 = 0

The Constraint Set With Typical Level Curves of f

> gr1 := implicitplot(constr1,x=-2..2,y=-2..2,color=blue):

> display(gr1);

[Maple Plot]

The geometric interpretation of Lagrange Multipliers concerns the interplay
between level curves of f and the constraint set. So we begin by looking at level curves.
The level curve f = -2.

> gr3 := implicitplot(f=-2,x=-2..2,y=-2..2,color=plum):

> display({gr1,gr3});

[Maple Plot]

> gr4 := implicitplot(f=-.5,x=-2..2,y=-2..2,color=sienna):

The level with value -.5 meets the ellipse obliquely.
So, for example at the point of intersection near the y axis, moving to the left along the ellipse increases the value of the function while moving right decreases the value.

> display({gr1,gr3,gr4});

[Maple Plot]

Setting Up and Solving the Lagrange Multiplier Condition

The usual auxiliary function in the method of Lagrange Multipliers.

> h := f - lambda * lhs(constr1);

h := y*exp(x)-lambda*(x^2+x*y+4*y^2-1)

> eqn1 := diff(h,x) = 0;

eqn1 := y*exp(x)-lambda*(2*x+y) = 0

> eqn2 := diff(h,y) = 0;

eqn2 := exp(x)-lambda*(x+8*y) = 0

The optional third argument in the fsolve call allows us to only seek solutions in
a certain range. Our choice of range here was suggested by the pictures above.

> fsolve({eqn1,eqn2,constr1},{x,y,lambda},{x=-1.5..1.5,y=-.5 .. .5});

{y = -.4267974178, lambda = -.8239204391, x = .7763...

These statements illustrate how to conveniently extract various numbers from the
solution set.

> solnset := %;


solnset := {y = -.4267974178, lambda = -.8239204391...

The exact order in which x,y, and lambda may vary from machine to machine or time to time.

> x_val := rhs(solnset[1]);

x_val := -.4267974178

> y_val := rhs(solnset[3]);

y_val := .7763506301

Substituting a set of assignments bypasses the uncertainty of the order in which
x,y, and lambda appear.

> f_val :=evalf(subs(solnset,f));

f_val := -.9276551883

The Basic Geometry of Lagrange Multipliers

> gr6 := implicitplot(f=f_val,x=-2..2,y=-2..2,color=red):

> display({gr1,gr3,gr4,gr6});

[Maple Plot]

At a local extremum, the level curve of f must be tangent to the constraint set.
For if not, there would be a direction of motion along the constraint set for which the
dot product with
grad f would be positive. So f would increase in that direction and
decrease in the opposite direction.

This is the origin of the Lagrange multiplier condition that
grad f = lambda grad g
x0 if f restricted to the constraint set g = constant has a local extremum at x0 .

(Technically, we also need that
grad(g) be nonzero at x0 , so that there is a smooth
curve near
x0 describing a component of the constraint set near x0 .)

Finding the Maximum

Now we look for the maximum of f on the ellipse.

> solnset2 := fsolve({eqn1,eqn2,constr1},{x,y,lambda},{x=0..1.5,y=0 .. .5});

solnset2 := {lambda = .4587538814, x = .4834110896,...

> x_val := rhs(solnset2[1]);

x_val := .4587538814

> y_val := rhs(solnset2[3]);

y_val := .3814217526

> f_val2 := evalf(subs(solnset2,f));

f_val2 := .6185121367

> gr7 := implicitplot(f=f_val2,x=-2..2,y=-2..2,color=green):

> display({gr1,gr7});

[Maple Plot]