Skip to main content
corrected back quoting for NumericalMath NSequenceLimit
Source Link

SequenceLimit became NumericalMath``NSequenceLimitNumericalMath`NSequenceLimit. In the past, that change broke some of the examples on NLimit that used SequenceLimit. I reported the breakage, and the examples were fixed to use the same syntax but not actually call the now-non-existent function. The only remaining reference in the documentation that I can find to the use of SequenceLimit as if it were still a function is on the last bullet point of NLimit's detailed description for its Method option: "uses SequenceLimit on constructed sequence".

Recently, I started investigating the behavior of NumericalMath``NSequenceLimitNumericalMath`NSequenceLimit because I need it in my engineering work. I feel NumericalMath``NSequenceLimitNumericalMath`NSequenceLimit has some quite confusing shortcomings in regard to the approximation it returns vs. the number of terms supplied, so I wrote my own version below from some references. I also posted a C++ gist version on GitHub.

A comparison appears below showing the convergence of partial sums of series approximations to Pi and E. Afterward, I use symbolic lists to document several parts of NumericalMath``NSequenceLimitNumericalMath`NSequenceLimit that seem... possibly wrong... to me.

Below, I illustrate the difference between the behavior of the built-in NumericalMath``NSequenceLimitNumericalMath`NSequenceLimit function vs. my sequenceLimit function for symbolic lists, like {a,b,c,d}.

SequenceLimit became NumericalMath``NSequenceLimit. In the past, that change broke some of the examples on NLimit that used SequenceLimit. I reported the breakage, and the examples were fixed to use the same syntax but not actually call the now-non-existent function. The only remaining reference in the documentation that I can find to the use of SequenceLimit as if it were still a function is on the last bullet point of NLimit's detailed description for its Method option: "uses SequenceLimit on constructed sequence".

Recently, I started investigating the behavior of NumericalMath``NSequenceLimit because I need it in my engineering work. I feel NumericalMath``NSequenceLimit has some quite confusing shortcomings in regard to the approximation it returns vs. the number of terms supplied, so I wrote my own version below from some references. I also posted a C++ gist version on GitHub.

A comparison appears below showing the convergence of partial sums of series approximations to Pi and E. Afterward, I use symbolic lists to document several parts of NumericalMath``NSequenceLimit that seem... possibly wrong... to me.

Below, I illustrate the difference between the behavior of the built-in NumericalMath``NSequenceLimit function vs. my sequenceLimit function for symbolic lists, like {a,b,c,d}.

SequenceLimit became NumericalMath`NSequenceLimit. In the past, that change broke some of the examples on NLimit that used SequenceLimit. I reported the breakage, and the examples were fixed to use the same syntax but not actually call the now-non-existent function. The only remaining reference in the documentation that I can find to the use of SequenceLimit as if it were still a function is on the last bullet point of NLimit's detailed description for its Method option: "uses SequenceLimit on constructed sequence".

Recently, I started investigating the behavior of NumericalMath`NSequenceLimit because I need it in my engineering work. I feel NumericalMath`NSequenceLimit has some quite confusing shortcomings in regard to the approximation it returns vs. the number of terms supplied, so I wrote my own version below from some references. I also posted a C++ gist version on GitHub.

A comparison appears below showing the convergence of partial sums of series approximations to Pi and E. Afterward, I use symbolic lists to document several parts of NumericalMath`NSequenceLimit that seem... possibly wrong... to me.

Below, I illustrate the difference between the behavior of the built-in NumericalMath`NSequenceLimit function vs. my sequenceLimit function for symbolic lists, like {a,b,c,d}.

commenting on lack of evaluation
Source Link
Quiet@NumericalMath`NSequenceLimit[{a,b,c}]
(*NumericalMath`NSequenceLimit[{a,b,c}]*)
(*yes, unevaluated with 3 inputs*)

sequenceLimit[{a,b,c}]//Simplify (*my function*)
(*(-b^2+a*c)/(a-2*b+c)*)
(*same as Mathematica's next result with 4 inputs*)

NumericalMath`NSequenceLimit[{a,b,c,d}]
(*(-b^2+a*c)/(a-2*b+c)*)
(*yes, only references a, b, & c not the later, more converged, d*)

sequenceLimit[{a,b,c,d}]//Simplify (*my function*)
(*(-c^2+b*d)/(b-2*c+d)*)
(*note use of d, which explains why my approximations
  for Pi and E above are better*)

NumericalMath`NSequenceLimit[{a,b,c,d,e}]
(*(-b^2+a*c)/(a-2*b+c)*) 
(*yes, same result as with 4 terms, no d or e in output*)

sequenceLimit[{a,b,c,d,e}]//Simplify (*my function*)
(*(c^3+a*d^2+b^2*e-c*(2*b*d+a*e))/
  (b^2+3*c^2-2*c*d+d^2-2*b*(c+d-e)-c*e-a*(c-2*d+e))*)
(*note use of d and e*)
NumericalMath`NSequenceLimit[{a}]
(*NumericalMath`NSequenceLimit::seqw Sequence of length 1
  is too short for use with Degree -> 1*)
(*NumericalMath`NSequenceLimit::bdmtd WynnEpsilon is not
  a valid specification of a sequence limit extrapolation
  algorithm.*)
(*NumericalMath`NSequenceLimit[{a}]*)

NumericalMath`NSequenceLimit[{a},Degree->1]; (*Nulled output*)
(*NumericalMath`NSequenceLimit:optx Unknown option ° in 
  NumericalMath`NSequenceLimit[{a}]*)

NumericalMath`NSequenceLimit[{a},"Degree"->1]; (*Note quotes*)
(*NumericalMath`NSequenceLimit::optx Unknown option "Degree"
  in NumericalMath`NSequenceLimit[{a}]*)

sequenceLimit[{a}] (*sequence limit is my function*)
(*a*)

Quiet@NumericalMath`NSequenceLimit[{a,b}] (*Note Quiet & no evaluation*)
(*NumericalMath`NSequenceLimit[{a,b}]*)

sequenceLimit[{a,b}] (*my function*)
(*b*)
$Version
11(*11.3.0 for Linux x86 (64-bit) (March 7, 2018)*)
Quiet@NumericalMath`NSequenceLimit[{a,b,c}]
(*NumericalMath`NSequenceLimit[{a,b,c}]*)
(*yes, unevaluated with 3 inputs*)

sequenceLimit[{a,b,c}]//Simplify (*my function*)
(*(-b^2+a*c)/(a-2*b+c)*)
(*same as Mathematica's next result with 4 inputs*)

NumericalMath`NSequenceLimit[{a,b,c,d}]
(*(-b^2+a*c)/(a-2*b+c)*)
(*yes, only references a, b, & c not the later, more converged, d*)

sequenceLimit[{a,b,c,d}]//Simplify (*my function*)
(-c^2+b*d)/(b-2*c+d)
(*note use of d, which explains why my approximations
  for Pi and E above are better*)

NumericalMath`NSequenceLimit[{a,b,c,d,e}]
(*(-b^2+a*c)/(a-2*b+c)*) 
(*yes, same result as with 4 terms, no d or e in output*)

sequenceLimit[{a,b,c,d,e}]//Simplify (*my function*)
(*(c^3+a*d^2+b^2*e-c*(2*b*d+a*e))/
  (b^2+3*c^2-2*c*d+d^2-2*b*(c+d-e)-c*e-a*(c-2*d+e))*)
(*note use of d and e*)
NumericalMath`NSequenceLimit[{a}]
(*NumericalMath`NSequenceLimit::seqw Sequence of length 1
  is too short for use with Degree -> 1*)
(*NumericalMath`NSequenceLimit::bdmtd WynnEpsilon is not
  a valid specification of a sequence limit extrapolation
  algorithm.*)
(*NumericalMath`NSequenceLimit[{a}]*)

NumericalMath`NSequenceLimit[{a},Degree->1]; (*Nulled output*)
(*NumericalMath`NSequenceLimit:optx Unknown option ° in 
  NumericalMath`NSequenceLimit[{a}]*)

NumericalMath`NSequenceLimit[{a},"Degree"->1]; (*Note quotes*)
(*NumericalMath`NSequenceLimit::optx Unknown option "Degree"
  in NumericalMath`NSequenceLimit[{a}]*)

sequenceLimit[{a}] (*sequence limit is my function*)
(*a*)

Quiet@NumericalMath`NSequenceLimit[{a,b}]
(*NumericalMath`NSequenceLimit[{a,b}]*)

sequenceLimit[{a,b}] (*my function*)
(*b*)
$Version
11.3.0 for Linux x86 (64-bit) (March 7, 2018)
Quiet@NumericalMath`NSequenceLimit[{a,b,c}]
(*NumericalMath`NSequenceLimit[{a,b,c}]*)
(*yes, unevaluated with 3 inputs*)

sequenceLimit[{a,b,c}]//Simplify (*my function*)
(*(-b^2+a*c)/(a-2*b+c)*)
(*same as Mathematica's next result with 4 inputs*)

NumericalMath`NSequenceLimit[{a,b,c,d}]
(*(-b^2+a*c)/(a-2*b+c)*)
(*yes, only references a, b, & c not the later, more converged, d*)

sequenceLimit[{a,b,c,d}]//Simplify (*my function*)
(*(-c^2+b*d)/(b-2*c+d)*)
(*note use of d, which explains why my approximations
  for Pi and E above are better*)

NumericalMath`NSequenceLimit[{a,b,c,d,e}]
(*(-b^2+a*c)/(a-2*b+c)*) 
(*yes, same result as with 4 terms, no d or e in output*)

sequenceLimit[{a,b,c,d,e}]//Simplify (*my function*)
(*(c^3+a*d^2+b^2*e-c*(2*b*d+a*e))/
  (b^2+3*c^2-2*c*d+d^2-2*b*(c+d-e)-c*e-a*(c-2*d+e))*)
(*note use of d and e*)
NumericalMath`NSequenceLimit[{a}]
(*NumericalMath`NSequenceLimit::seqw Sequence of length 1
  is too short for use with Degree -> 1*)
(*NumericalMath`NSequenceLimit::bdmtd WynnEpsilon is not
  a valid specification of a sequence limit extrapolation
  algorithm.*)
(*NumericalMath`NSequenceLimit[{a}]*)

NumericalMath`NSequenceLimit[{a},Degree->1]; (*Nulled output*)
(*NumericalMath`NSequenceLimit:optx Unknown option ° in 
  NumericalMath`NSequenceLimit[{a}]*)

NumericalMath`NSequenceLimit[{a},"Degree"->1]; (*Note quotes*)
(*NumericalMath`NSequenceLimit::optx Unknown option "Degree"
  in NumericalMath`NSequenceLimit[{a}]*)

sequenceLimit[{a}] (*sequence limit is my function*)
(*a*)

Quiet@NumericalMath`NSequenceLimit[{a,b}] (*Note Quiet & no evaluation*)
(*NumericalMath`NSequenceLimit[{a,b}]*)

sequenceLimit[{a,b}] (*my function*)
(*b*)
$Version
(*11.3.0 for Linux x86 (64-bit) (March 7, 2018)*)
remove Quiet and Simplify from one of the built-in function calls
Source Link
Quiet@NumericalMath`NSequenceLimit[{a,b,c}]
(*NumericalMath`NSequenceLimit[{a,b,c}]*)
(*yes, unevaluated with 3 inputs*)

sequenceLimit[{a,b,c}]//Simplify (*my function*)
(*(-b^2+a*c)/(a-2*b+c)*)
(*same as Mathematica's next result with 4 inputs*)

NumericalMath`NSequenceLimit[{a,b,c,d}]
(*(-b^2+a*c)/(a-2*b+c)*)
(*yes, only references a, b, & c not the later, more converged, d*)

sequenceLimit[{a,b,c,d}]//Simplify (*my function*)
(-c^2+b*d)/(b-2*c+d)
(*note use of d, which explains why my approximations
  for Pi and E above are better*)

Quiet@NumericalMath`NSequenceLimit[NumericalMath`NSequenceLimit[{a,b,c,d,e}]//Simplify
(*(-b^2+a*c)/(a-2*b+c)*) 
(*yes, same result as with 4 terms, no d or e in output*)

sequenceLimit[{a,b,c,d,e}]//Simplify (*my function*)
(*(c^3+a*d^2+b^2*e-c*(2*b*d+a*e))/
  (b^2+3*c^2-2*c*d+d^2-2*b*(c+d-e)-c*e-a*(c-2*d+e))*)
(*note use of d and e*)
Quiet@NumericalMath`NSequenceLimit[{a,b,c}]
(*NumericalMath`NSequenceLimit[{a,b,c}]*)
(*yes, unevaluated with 3 inputs*)

sequenceLimit[{a,b,c}]//Simplify (*my function*)
(*(-b^2+a*c)/(a-2*b+c)*)
(*same as Mathematica's next result with 4 inputs*)

NumericalMath`NSequenceLimit[{a,b,c,d}]
(*(-b^2+a*c)/(a-2*b+c)*)
(*yes, only references a, b, & c not the later, more converged, d*)

sequenceLimit[{a,b,c,d}]//Simplify (*my function*)
(-c^2+b*d)/(b-2*c+d)
(*note use of d, which explains why my approximations
  for Pi and E above are better*)

Quiet@NumericalMath`NSequenceLimit[{a,b,c,d,e}]//Simplify
(*(-b^2+a*c)/(a-2*b+c)*) 
(*yes, same result as with 4 terms, no d or e in output*)

sequenceLimit[{a,b,c,d,e}]//Simplify (*my function*)
(*(c^3+a*d^2+b^2*e-c*(2*b*d+a*e))/
  (b^2+3*c^2-2*c*d+d^2-2*b*(c+d-e)-c*e-a*(c-2*d+e))*)
(*note use of d and e*)
Quiet@NumericalMath`NSequenceLimit[{a,b,c}]
(*NumericalMath`NSequenceLimit[{a,b,c}]*)
(*yes, unevaluated with 3 inputs*)

sequenceLimit[{a,b,c}]//Simplify (*my function*)
(*(-b^2+a*c)/(a-2*b+c)*)
(*same as Mathematica's next result with 4 inputs*)

NumericalMath`NSequenceLimit[{a,b,c,d}]
(*(-b^2+a*c)/(a-2*b+c)*)
(*yes, only references a, b, & c not the later, more converged, d*)

sequenceLimit[{a,b,c,d}]//Simplify (*my function*)
(-c^2+b*d)/(b-2*c+d)
(*note use of d, which explains why my approximations
  for Pi and E above are better*)

NumericalMath`NSequenceLimit[{a,b,c,d,e}]
(*(-b^2+a*c)/(a-2*b+c)*) 
(*yes, same result as with 4 terms, no d or e in output*)

sequenceLimit[{a,b,c,d,e}]//Simplify (*my function*)
(*(c^3+a*d^2+b^2*e-c*(2*b*d+a*e))/
  (b^2+3*c^2-2*c*d+d^2-2*b*(c+d-e)-c*e-a*(c-2*d+e))*)
(*note use of d and e*)
fixed wording to make it clear the mathematica version is included in this post
Source Link
Loading
shorten function more
Source Link
Loading
added link to NLimit documentation
Source Link
Loading
further simplification, caching
Source Link
Loading
simplified my function definition
Source Link
Loading
add references, and explain why my results are better
Source Link
Loading
Source Link
Loading