>   

Limits

Calculus I Lab -- Fall 2002

prepared by

Douglas B. Meade

Department of Mathematics

University of South Carolina

Columbia, SC 29208

E-mail: meade@math.sc.edu

30 August 2002

based on

Technology Projects 2.2 and 3.1 in Calculus, Varberg, Purcell, Rigdon, 8th edition, 2000, Prentice-Hall

>   

>    restart;

>    with( linalg ):

>    with( plots ):

>   

Purpose

>   

Limits are the cornerstone upon which all of calculus is built. Differentiation and integration are applications of limits. The purpose of this lab is to develop additional insight and expertise working with limits and to take some first steps towards differentiation.

In the first part of the project you will use Maple to help with the factoring of complicated expressions so that limits can be computed. Limits will also be computed based on graphical representations of the function. Some of the examples will appear later in the course (or in Math 142).

The second part of the project deals with the limit of secant lines for a graph. Recall that a line is defined by two points on the line. A secant line is a line through two point on the graph of the function. We will be interested in the line that results in the limit as one of the points on the graph moves towards the other.

Remember that it should not be necessary for you to do too much typing to complete this project. Except for entering specific functions, all of the Maple code needed should be available somewhere within this worksheet. Please see Jay, Wally, or Professor Meade if you have any questions.

This project consists of two exercises. In Exercise 1 there are ten (10) questions to answer. In Exercise 2 there are seven (7) questions. Before submitting  your report check that you have answered each part of the two exercises.

The project is due in the dropbox at midnight, Thursday, September 5, 2002 . Do not put off work on this project until Thursday night!

>   

Exercise 1

>   

Consider the problem of evaluating Limit((x^3-9*x^2-45*x-91)/(x^2-5*x-104),x = 13) .  

>   

To work with this rational function we need to be able to access the numerator and denominator separately.

>    top := x^3-9*x^2-45*x-91;

>    bot := x^2-5*x-104;

>   

When we need the rational function, it can be formed as follows:

>    F := top/bot;

>     

The first attempt when evaluating this limit is to plug x = 13  into the rational expression

>    eval( F, x=13 );

>   

As expected, this does not work. Note that both numerator and denominator are zero at x = 13 :

>    plot( [top,bot], x=-10..15 );

>   

This suggests that ( x-13 ) should be a factor of both numerator and denominator:

>    top1 := factor( top );

>    bot1 := factor( bot );

>   

Thus, for all values of x <> 13 , the original rational function can be simplified to

>    F1 := top1/bot1;

>   

There are no problems evaluating this expression at x = 13 :

>    eval( F1, x=13 );

>   

We have shown that   Limit((x^3-9*x^2-45*x-91)/(x^2-5*x-104),x = 13) = 76/7 .

>   

Next, consider Limit((sqrt(25+3*x)-sqrt(25-2*x))/(x^2+5*x),x = 0) . We could begin exactly as above, but suppose the expression is entered in rational form:

>   

>    G := (sqrt(25+3*x) - sqrt(25-2*x))/(x^2+5*x);

>   

Our first attempt is, as usual, to plug x = 0  into the expression:

>    eval( G, x=0 );

>   

Not unexpectedly, this does not work. A plot of the expression near x = 0  suggests that the limit exists and that its value should be 1/10 .

>    plot( G, x=-2..2 );

>   

Let's see if we can confirm this. To work with this expression we need to get our hands on the numerator and denominator. We could enter these manually or we could use Maple's numer  and denom  commands.

>    top := numer( G );

>    bot := denom( G );

>   

The trick in problems like these is to rationalize the difference of two square roots. This can be done by multiplying both numerator and denominator by ( sqrt(25+3*x)+sqrt(25-2*x) ).

>    top1 := top * (sqrt(25+3*x)+sqrt(25-2*x));

>    bot1 := bot * (sqrt(25+3*x)+sqrt(25-2*x));

>    G1 := top1/bot1;

>   

This is exactly where we started. The problem is that Maple saw the common factor and simplified. We have to tell Maple to expand  the products before forming the quotient.

>    top2 := expand(top1);

>    bot2 := expand(bot1);

>    G2 := top2/bot2;

>   

Notice that the numerator is now much simpler but that the denominator is a real mess. This is not a concern because we see a common factor of x that can be factored from both. Hopefully this will be enough to allow us to evaluate the limit.

>   

>    top3 := factor( top2 );

>    bot3 := factor( bot2 );

>    G3 := top3/bot3;

>   

>    eval( G3, x=0 );

>    simplify( % );

>   

Great! The analytic and graphical limits agree.

>   

Another method for approximating limits is to prepare a table of values of the function at points close to the limit point. For this example we might do something like the following:

>   

>    c := 0;

>    x_vals := [ c-0.1, c-0.01, c-0.001, c-0.0001, c-0.00001, c+0.00001, c+0.0001, c+0.001, c+0.01, c+0.1 ];

>    lim_table := [ x, `G(x)` ], [ `---------`, `---------` ]:

>    for X in x_vals do

>      lim_table := lim_table, [ X, eval( G, x=X ) ];

>    end do:

>    convert( [lim_table], matrix );

>   

Evaluate each of the following limits, or explain why it does not exist. For each problem, report the limit and support your answer with a convincing table of values and  a plot. Note: Each limit that exists should be expressed as an exact integer, rational, or irrational number, not as a  floating-point number.

>   

a) Limit((x^3-x^2-4*x+4)/(x^2-1),x = 1)  

>    F := %?;

>    c := %?;

>   

>    plot( F, x = %? .. %? );

>   

>    x_vals := [ c-0.1, c-0.01, c-0.001, c-0.0001, c-0.00001, c+0.00001, c+0.0001, c+0.001, c+0.01, c+0.1 ]:

>    body := convert( [seq( [ X, eval( F, x=X ) ], X=x_vals )], matrix ):

>    header := matrix( 2, 2, [ [ `x`, `F(x)` ], [ `---------`, `---------` ] ] ):

>    stackmatrix( header, body );

>   

>   

>   

>   

b)   Limit((x^3-x^2-4*x+4)/(x^2-1),x = 0)  

>    F := %?;

>    c := %?;

>   

>    plot( F, x = %? .. %? );

>   

>    x_vals := [ c-0.1, c-0.01, c-0.001, c-0.0001, c-0.00001, c+0.00001, c+0.0001, c+0.001, c+0.01, c+0.1 ]:

>    body := convert( [seq( [ X, eval( F, x=X ) ], X=x_vals )], matrix ):

>    header := matrix( 2, 2, [ [ `x`, `F(x)` ], [ `---------`, `---------` ] ] ):

>    stackmatrix( header, body );

>   

>   

>   

>   

c) Limit((x^3-x^2-4*x+4)/(x^2-1),x = -1)  

>    F := %?;

>    c := %?;

>   

>    plot( F, x = %? .. %? );

>   

>    x_vals := [ c-0.1, c-0.01, c-0.001, c-0.0001, c-0.00001, c+0.00001, c+0.0001, c+0.001, c+0.01, c+0.1 ]:

>    body := convert( [seq( [ X, eval( F, x=X ) ], X=x_vals )], matrix ):

>    header := matrix( 2, 2, [ [ `x`, `F(x)` ], [ `---------`, `---------` ] ] ):

>    stackmatrix( header, body );

>   

>   

>   

>   

d)   Limit(sin(x)/x,x = 0)  

>    F := %?;

>    c := %?;

>   

>    plot( F, x = %? .. %? );

>   

>    x_vals := [ c-0.1, c-0.01, c-0.001, c-0.0001, c-0.00001, c+0.00001, c+0.0001, c+0.001, c+0.01, c+0.1 ]:

>    body := convert( [seq( [ X, eval( F, x=X ) ], X=x_vals )], matrix ):

>    header := matrix( 2, 2, [ [ `x`, `F(x)` ], [ `---------`, `---------` ] ] ):

>    stackmatrix( header, body );

>   

>   

>   

>   

e)   Limit(sin(3*x)/(4*x),x = 0)  

>    F := %?;

>    c := %?;

>   

>    plot( F, x = %? .. %? );

>   

>    x_vals := [ c-0.1, c-0.01, c-0.001, c-0.0001, c-0.00001, c+0.00001, c+0.0001, c+0.001, c+0.01, c+0.1 ]:

>    body := convert( [seq( [ X, eval( F, x=X ) ], X=x_vals )], matrix ):

>    header := matrix( 2, 2, [ [ `x`, `F(x)` ], [ `---------`, `---------` ] ] ):

>    stackmatrix( header, body );

>   

>   

>   

>   

f)   Limit((1-cos(x))/x,x = 0)  

>    F := %?;

>    c := %?;

>   

>    plot( F, x = %? .. %? );

>   

>    x_vals := [ c-0.1, c-0.01, c-0.001, c-0.0001, c-0.00001, c+0.00001, c+0.0001, c+0.001, c+0.01, c+0.1 ]:

>    body := convert( [seq( [ X, eval( F, x=X ) ], X=x_vals )], matrix ):

>    header := matrix( 2, 2, [ [ `x`, `F(x)` ], [ `---------`, `---------` ] ] ):

>    stackmatrix( header, body );

>   

>   

>   

>   

g)   Limit((1+x)^(1/x),x = 0)  

>    F := (1+x)^(1/x);

>    c := %?;

>   

>    plot( F, x = %? .. %? );

>   

>    x_vals := [ c-0.1, c-0.01, c-0.001, c-0.0001, c-0.00001, c+0.00001, c+0.0001, c+0.001, c+0.01, c+0.1 ]:

>    body := convert( [seq( [ X, eval( F, x=X ) ], X=x_vals )], matrix ):

>    header := matrix( 2, 2, [ [ `x`, `F(x)` ], [ `---------`, `---------` ] ] ):

>    stackmatrix( header, body );

>   

>   

>   

>   

h)   Limit((1+x)^(3/x),x = 0)  

>    F := %?;

>    c := %?;

>   

>    plot( F, x = %? .. %? );

>   

>    x_vals := [ c-0.1, c-0.01, c-0.001, c-0.0001, c-0.00001, c+0.00001, c+0.0001, c+0.001, c+0.01, c+0.1 ]:

>    body := convert( [seq( [ X, eval( F, x=X ) ], X=x_vals )], matrix ):

>    header := matrix( 2, 2, [ [ `x`, `F(x)` ], [ `---------`, `---------` ] ] ):

>    stackmatrix( header, body );

>   

>   

>   

>   

i)   Limit(sin(1/x),x = 0)  

>    F := %?;c := %?;

>    c := %?;

>   

>    plot( F, x = %? .. %? );

>   

>    x_vals := [ c-0.1, c-0.01, c-0.001, c-0.0001, c-0.00001, c+0.00001, c+0.0001, c+0.001, c+0.01, c+0.1 ]:

>    body := convert( [seq( [ X, eval( F, x=X ) ], X=x_vals )], matrix ):

>    header := matrix( 2, 2, [ [ `x`, `F(x)` ], [ `---------`, `---------` ] ] ):

>    stackmatrix( header, body );

>   

>   

>   

>   

j)   Limit(x*sin(1/x),x = 0)  

>    F := %?;c := %?;

>    c := %?;

>   

>    plot( F, x = %? .. %? );

>   

>    x_vals := [ c-0.1, c-0.01, c-0.001, c-0.0001, c-0.00001, c+0.00001, c+0.0001, c+0.001, c+0.01, c+0.1 ]:

>    body := convert( [seq( [ X, eval( F, x=X ) ], X=x_vals )], matrix ):

>    header := matrix( 2, 2, [ [ `x`, `F(x)` ], [ `---------`, `---------` ] ] ):

>    stackmatrix( header, body );

>   

>   

>   

>   

>   

Exercise 2

Consider the function defined by

>    A := (x^3-5)*(x^2-1)/(x^2+1);

>   

The line passing through two given points of the graph of this function is called a secant line to the graph. For example, the secant line for x[1] = 2  and x[2] = 4  can by first finding the points on the graph of the function with these values of x:

>    x1 := 2;

>    y1 := eval( A, x=x1 );

>   

>    x2 := 4;

>    y2 := eval( A, x=x2 );

>   

This tells us the points ( 2, 9/5  ) and ( 4, 885/17  ) are on the graph of this function. The slope between these two points is

>    m := (y2-y1)/(x2-x1);

>   

The equation of the line through ( x[1] , y[1]  ) with slope m  is y = y[1]+m*(x-x[1]) . Thus, the secant line we seek is

>    sec_line := y1 + m*(x-x1);

>   

To visualize this result, plot both the function and the secant line in a single plot.

>    plot( [ A, sec_line ], x=0..5 );

>   

To introduce limits into the problem, now consider what happens when in the limit as x[2]  approaches x[1] . The following loop creates a sequence of secant line plots and a table of numerical slopes for values of x[2]  that approach x[1] .

>   

>    x2_vals := [ 4.0, 3.0, 2.9, 2.8, 2.7, 2.6, 2.5, 2.4, 2.3, 2.2, 2.1 ];

>    m_list := [ `x_2`,       `slope_secant` ],

>              [ `---------`, `------------` ]:

>    p_list := NULL:

>    for x2 in x2_vals do

>      y2 := eval( A, x=x2 );

>      m := (y2-y1)/(x2-x1);

>      sec_line := y1 + m*(x-x1);

>      m_list := m_list, evalf([x2,m]);

>      p_list := p_list, plot( [A, sec_line], x=0..5 );

>    end do:

>    m_list := [m_list]:

>    p_list := [p_list]:

>   

>    display( p_list, insequence=true );

>   

This animation shows that the (right-hand) limit of the secant lines as x[2]  is the tangent line at x[1] . That is

  Limit(`secant line through x1 and x2`,x2 = x1,right) = `tangent line at x1` .

>   

To approximate the numerical value of the limit of the slopes of secant lines construct a table of slopes as follows:

>    convert(m_list,matrix);

>   

While the animation and table are informative we need to be a little careful before putting too much value in it. In particular, note that the limit is only a one-sided limit. To know "the limit" exists it is first necessary to compute the corresponding left-hand limit and then to verify that the two one-sided limits are equal. The following examples illustrate a few of the possible situations that can arise.

>   

(a)

Modify the list of x[2]  values ( x2_vals ) to obtain an estimate of the (right-hand) limit of the slope of the secant lines that is accurate to three digits to the right of the decimal point. In your report, include a table containing the x[2]  values and the slope of the corresponding secant line.

>    x2_vals := [ %? ];

>    m_list := [ `x_2`,       `slope_secant` ],

>              [ `---------`, `------------` ]:

>    p_list := NULL:

>    for x2 in x2_vals do

>      y2 := eval( A, x=x2 );

>      m := (y2-y1)/(x2-x1);

>      sec_line := y1 + m*(x-x1);

>      m_list := m_list, evalf([x2,m]);

>      p_list := p_list, plot( [A, sec_line], x=0..5 );

>    end do:

>    m_list := [m_list]:

>    p_list := [p_list]:

>   

>    display( p_list, insequence=true );

>    convert(m_list,matrix);

>   

(b)

Determine a new list of x[2]  values that provides an estimate of the (left-hand) limit of the slope of the secant lines that is accurate to three digits to the right of the decimal point. This should be done in a table as in (a).

Does the two-sided limit of the secant lines exist? (Explain.)

>    x2_vals := [ %? ];

>    m_list := [ `x_2`,       `slope_secant` ],

>              [ `---------`, `------------` ]:

>    p_list := NULL:

>    for x2 in x2_vals do

>      y2 := eval( A, x=x2 );

>      m := (y2-y1)/(x2-x1);

>      sec_line := y1 + m*(x-x1);

>      m_list := m_list, evalf([x2,m]);

>      p_list := p_list, plot( [A, sec_line], x=0..5 );

>    end do:

>    m_list := [m_list]:

>    p_list := [p_list]:

>   

>    display( p_list, insequence=true );

>    convert(m_list,matrix);

>   

(c)

Use appropriate limit(s) of secant lines to determine if the graph of y = sin(x)  has a tangent line at x = 0 . If there is no tangent line at this point, explain why not. If there is a tangent line at this point, what is the slope of the tangent line (accuarate to three digits to the right of the decimal point) and the equation of the tangent line?

>    A := %?;

>    x1 := %?;

>    y1 := eval( A, x=x1 );

>    x2_vals := [ %? ];

>    m_list := [ `x_2`,       `slope_secant` ],

>              [ `---------`, `------------` ]:

>    p_list := NULL:

>    for x2 in x2_vals do

>      y2 := eval( A, x=x2 );

>      m := (y2-y1)/(x2-x1);

>      sec_line := y1 + m*(x-x1);

>      m_list := m_list, evalf([x2,m]);

>      p_list := p_list, plot( [A, sec_line], x=0..5 );

>    end do:

>    m_list := [m_list]:

>    p_list := [p_list]:

>   

>    display( p_list, insequence=true );

>    convert(m_list,matrix);

>   

(d)

Use appropriate limit(s) of secant lines to determine if the graph of y = sin(x)  has a tangent line at x = Pi/2 . If there is no tangent line at this point, explain why not. If there is a tangent line at this point, what is the slope of the tangent line (accuarate to three digits to the right of the decimal point) and the equation of the tangent line?

>    A := %?;

>    x1 := %?;

>    y1 := eval( A, x=x1 );

>    x2_vals := [ %? ];

>    m_list := [ `x_2`,       `slope_secant` ],

>              [ `---------`, `------------` ]:

>    p_list := NULL:

>    for x2 in x2_vals do

>      y2 := eval( A, x=x2 );

>      m := (y2-y1)/(x2-x1);

>      sec_line := y1 + m*(x-x1);

>      m_list := m_list, evalf([x2,m]);

>      p_list := p_list, plot( [A, sec_line], x=0..5 );

>    end do:

>    m_list := [m_list]:

>    p_list := [p_list]:

>   

>    display( p_list, insequence=true );

>    convert(m_list,matrix);

>   

(e)

Use appropriate limit(s) of secant lines to determine if the graph of y = sqrt(abs(x-3))  has a tangent line at x = 3 . If there is no tangent line at this point, explain why not. If there is a tangent line at this point, what is the slope of the tangent line (accuarate to three digits to the right of the decimal point) and the equation of the tangent line?

>    A := %?;

>    x1 := %?;

>    y1 := eval( A, x=x1 );

>    x2_vals := [ %? ];

>    m_list := [ `x_2`,       `slope_secant` ],

>              [ `---------`, `------------` ]:

>    p_list := NULL:

>    for x2 in x2_vals do

>      y2 := eval( A, x=x2 );

>      m := (y2-y1)/(x2-x1);

>      sec_line := y1 + m*(x-x1);

>      m_list := m_list, evalf([x2,m]);

>      p_list := p_list, plot( [A, sec_line], x=0..5 );

>    end do:

>    m_list := [m_list]:

>    p_list := [p_list]:

>   

>    display( p_list, insequence=true );

>    convert(m_list,matrix);

>   

(f)

Use appropriate limit(s) of secant lines to determine if the graph of y = sqrt(abs(x-3))  has a tangent line at x = 0 . If there is no tangent line at this point, explain why not. If there is a tangent line at this point, what is the slope of the tangent line (accuarate to three digits to the right of the decimal point) and the equation of the tangent line?

>    A := %?;

>    x1 := %?;

>    y1 := eval( A, x=x1 );

>    x2_vals := [ %? ];

>    m_list := [ `x_2`,       `slope_secant` ],

>              [ `---------`, `------------` ]:

>    p_list := NULL:

>    for x2 in x2_vals do

>      y2 := eval( A, x=x2 );

>      m := (y2-y1)/(x2-x1);

>      sec_line := y1 + m*(x-x1);

>      m_list := m_list, evalf([x2,m]);

>      p_list := p_list, plot( [A, sec_line], x=0..5 );

>    end do:

>    m_list := [m_list]:

>    p_list := [p_list]:

>   

>    display( p_list, insequence=true );

>    convert(m_list,matrix);

>   

(g)

Use appropriate limit(s) of secant lines to determine if the graph of y = sin(1/x)  has a tangent line at x = 0 . If there is no tangent line at this point, explain why not. If there is a tangent line at this point, what is the slope of the tangent line (accuarate to three digits to the right of the decimal point) and the equation of the tangent line?

>    A := %?;

>    x1 := %?;

>    y1 := eval( A, x=x1 );

>    x2_vals := [ %? ];

>    m_list := [ `x_2`,       `slope_secant` ],

>              [ `---------`, `------------` ]:

>    p_list := NULL:

>    for x2 in x2_vals do

>      y2 := eval( A, x=x2 );

>      m := (y2-y1)/(x2-x1);

>      sec_line := y1 + m*(x-x1);

>      m_list := m_list, evalf([x2,m]);

>      p_list := p_list, plot( [A, sec_line], x=0..5 );

>    end do:

>    m_list := [m_list]:

>    p_list := [p_list]:

>   

>    display( p_list, insequence=true );

>    convert(m_list,matrix);

>   

>   

>