8.6 Limits¶
To compute a limit, you must specify a functional expression, limit a variable, and a limiting value for that variable. If you do not specify a direction, FriCAS attempts to compute a two-sided limit.
Issue this to compute the limit
limit((x^2 - 3*x + 2)/(x^2 - 1),x = 1)
-12 |
Type: Union(OrderedCompletion Fraction Polynomial Integer,...)
Sometimes the limit when approached from the left is different from the limit from the right and, in this case, you may wish to ask for a one-sided limit. Also, if you have a function that is only defined on one side of a particular value, limit:one-sided vs. two-sided you can compute a one-sided limit.
The function log(x) is only defined to the right of zero, that is, for x>0. Thus, when computing limits of functions involving log(x), you probably want a right-hand limit.
limit(x * log(x),x = 0,"right")
0 |
Type: Union(OrderedCompletion Expression Integer,...)
When you do not specify right or left as the optional fourth argument, limit tries to compute a two-sided limit. Here the limit from the left does not exist, as FriCAS indicates when you try to take a two-sided limit.
limit(x * log(x),x = 0)
[leftHandLimit=”failed”,rightHandLimit=0] |
Type: Union(Record(leftHandLimit: Union(OrderedCompletion Expression Integer,”failed”), rightHandLimit: Union(OrderedCompletion Expression Integer,”failed”)),...)
A function can be defined on both sides of a particular value, but tend to different limits as its variable approaches that value from the left and from the right. We can construct an example of this as follows: Since y2 is simply the absolute value of y, the function y2/y is simply the sign ( +1 or -1) of the nonzero real number y. Therefore, y2/y=-1 for y<0 and y2/y=+1 for y>0.
This is what happens when we take the limit at y=0. The answer returned by FriCAS gives both a left-hand and a right-hand limit.
limit(sqrt(y^2)/y,y = 0)
[leftHandLimit=-1,rightHandLimit=1] |
Type: Union(Record(leftHandLimit: Union(OrderedCompletion Expression Integer,”failed”), rightHandLimit: Union(OrderedCompletion Expression Integer,”failed”)),...)
Here is another example, this time using a more complicated function.
limit(sqrt(1 - cos(t))/t,t = 0)
[leftHandLimit=-12,rightHandLimit=12] |
Type: Union(Record(leftHandLimit: Union(OrderedCompletion Expression Integer,”failed”), rightHandLimit: Union(OrderedCompletion Expression Integer,”failed”)),...)
You can compute limits at infinity by passing either limit:at infinity +∞ or -∞ as the third argument of limit.
To do this, use the constants %plusInfinity and %minusInfinity.
limit(sqrt(3*x^2 + 1)/(5*x),x = %plusInfinity)
35 |
Type: Union(OrderedCompletion Expression Integer,...)
limit(sqrt(3*x^2 + 1)/(5*x),x = %minusInfinity)
-35 |
Type: Union(OrderedCompletion Expression Integer,...)
You can take limits of functions with parameters. limit:of function with parameters As you can see, the limit is expressed in terms of the parameters.
limit(sinh(a*x)/tan(b*x),x = 0)
ab |
Type: Union(OrderedCompletion Expression Integer,...)
When you use limit, you are taking the limit of a real function of a real variable.
When you compute this, FriCAS returns 0 because, as a function of a real variable, sin(1/z) is always between -1 and 1, so z*sin(1/z) tends to 0 as z tends to 0.
limit(z * sin(1/z),z = 0)
0 |
Type: Union(OrderedCompletion Expression Integer,...)
However, as a function of a complex variable, sin(1/z) is badly limit:real vs. complex behaved near 0 (one says that sin(1/z) has an essential singularity essential singularity at z=0). singularity:essential
When viewed as a function of a complex variable, z*sin(1/z) does not approach any limit as z tends to 0 in the complex plane. FriCAS indicates this when we call complexLimit.
complexLimit(z * sin(1/z),z = 0)
“failed” |
Type: Union(“failed”,...)
Here is another example. As x approaches 0 along the real axis, exp(-1/x**2) tends to 0.
limit(exp(-1/x^2),x = 0)
0 |
Type: Union(OrderedCompletion Expression Integer,...)
However, if x is allowed to approach 0 along any path in the complex plane, the limiting value of exp(-1/x**2) depends on the path taken because the function has an essential singularity at x=0. This is reflected in the error message returned by the function.
complexLimit(exp(-1/x^2),x = 0)
“failed” |
Type: Union(“failed”,...)
You can also take complex limits at infinity, that is, limits of a function of z as z approaches infinity on the Riemann sphere. Use the symbol %infinity to denote complex infinity.
As above, to compute complex limits rather than real limits, use complexLimit.
complexLimit((2 + z)/(1 - z),z = %infinity)
-1 |
Type: OnePointCompletion Fraction Polynomial Integer
In many cases, a limit of a real function of a real variable exists when the corresponding complex limit does not. This limit exists.
limit(sin(x)/x,x = %plusInfinity)
0 |
Type: Union(OrderedCompletion Expression Integer,...)
But this limit does not.
complexLimit(sin(x)/x,x = %infinity)
“failed” |
Type: Union(“failed”,...)