%I #32 Apr 28 2021 12:54:30
%S 9,81,525,3105,18939,114381,693129,4195557,25405586,153820395,
%T 931359050,5639156409,34143908573,206733865761,1251728824798,
%U 7578945799704,45888871327435,277847147039527,1682304127857000,10185986079451152,61673933253012813,373422269794761171,2260990733622821388
%N Number of n-digit positive integers that undulate.
%C This is also the number of (2*n-1)-digit palindromes that undulate.
%C Classifying undulating numbers with n digits in initial digits and sign of first digit - second digit eases computation.
%H Eric Weisstein's World of Mathematics, <a href="http://mathworld.wolfram.com/UndulatingNumber.html">Undulating Number</a>.
%H <a href="/index/Rec#order_09">Index entries for linear recurrences with constant coefficients</a>, signature (5,10,-20,-15,21,7,-8,-1,1).
%F a(n) = 45*a(n-2) - 330*a(n-4) + 924*a(n-6) - 1287*a(n-8) + 1001*a(n-10) - 455*a(n-12) + 120*a(n-14) - 17*a(n-16) + a(n-18) for n >= 20. - _Michael S. Branicky_, Apr 17 2021
%F From _Chai Wah Wu_, Apr 24 2021: (Start)
%F a(n) = 5*a(n-1) + 10*a(n-2) - 20*a(n-3) - 15*a(n-4) + 21*a(n-5) + 7*a(n-6) - 8*a(n-7) - a(n-8) + a(n-9) for n > 10.
%F G.f.: x*(-8*x^9 + 7*x^8 + 63*x^7 - 45*x^6 - 162*x^5 + 81*x^4 + 150*x^3 - 30*x^2 - 36*x - 9)/(x^9 - x^8 - 8*x^7 + 7*x^6 + 21*x^5 - 15*x^4 - 20*x^3 + 10*x^2 + 5*x - 1). (End)
%e a(2) = 81 as there are 90 2-digit positive integers (10, 11, ..., 99). Of those, 11, 22, ..., 99 do not undulate as there is a pair of consecutive digits that are equal. There are nine nonundulating 2-digit numbers, leaving 90-9 = 81 that do undulate.
%e 134 does not undulate as there are two pairs of consecutive digits where the right one is in both cases either smaller or larger. (In this case 1 < 3 and 3 < 4.)
%e 143 does undulate since 1 < 4 and 4 > 3.
%o (PARI) first(n) = { my(res = vector(n), vup, vdown, nvup, nvdown); res[1] = 9; vup = vector(9, i, 1); vdown = vector(9, i, 1); for(i = 2, n, nvup = vector(9); nvdown = vector(9); nvdown[1] = vdown[9]; for(i = 2, 9, nvdown[i] = nvdown[i-1]+vup[i-1] ); for(i = 1, 8, nvup[i] = nvdown[9-i] ); vup = nvup; vdown = nvdown; res[i] = vecsum(vup)+vecsum(vdown)); res }
%o (Python)
%o def aupton(terms):
%o up, dn, alst = [0] + [1]*9, [0] + [1]*9, [9]
%o for n in range(2, terms+1):
%o up_next = [sum(dn[j] for j in range(i)) for i in range(10)]
%o dn_next = [sum(up[j] for j in range(i+1, 10)) for i in range(10)]
%o up, dn = up_next, dn_next
%o alst.append(sum(up + dn))
%o return alst
%o print(aupton(22)) # _Michael S. Branicky_, Apr 16 2021
%o (Python) # alternate program as a linear system
%o import numpy as np
%o from sympy import Matrix
%o def aupton(terms):
%o x = Matrix([0] + [1]*9 + [0] + [1]*9)
%o c = Matrix([[1]*20])
%o z10 = np.zeros((10, 10), dtype=np.int64)
%o o10 = np.ones((10, 10), dtype=np.int64)
%o A = Matrix(np.block([[z10, np.tril(o10, -1)], [np.triu(o10, +1), z10]]))
%o alst = [9]
%o for n in range(2, terms+1):
%o x = A*x
%o alst.append((c*x)[0])
%o return alst
%o print(aupton(22)) # _Michael S. Branicky_, Apr 16 2021
%Y Cf. A057332. Apart from the first 2 terms, the same as A152464.
%K nonn,easy,base
%O 1,1
%A _David A. Corneth_, Apr 16 2021