目录
- 参考
- 定义
- 例子1 二项式系数/BinomialNumber
- 例子2 coefficients of modified Hermite polynomials.
- 例子3
- 彩蛋
参考
https://en.wikipedia.org/wiki/Riordan_array 维基百科
https://www.muicmath.com/_media/seminar/riordan.pdf 课件,比维基百科好懂
定义
简单来说,就是\(pq^0\)的系数写到index=\(0\)的列,\(pq^1\)的系数写到index=\(1\)的列,\(pq^2\)的系数写到index=\(2\)的列
选定显示的方阵大小,把上三角位置的系数都置零。
例子1 二项式系数/BinomialNumber
(*这份代码适用于和、乘积,(除法?)和有理幂构成的关于x的函数*)
Clear["Global`*"]
IsXFunction = MemberQ[Variables@#, x] &;
RiordanArray[p_?IsXFunction, q_?IsXFunction, numOfRows_Integer] :=
Table[SeriesCoefficient[p*q^k, {x, 0, n}], {n, 0, numOfRows}, {k, 0,
n}] // Grid;
RiordanArray[1/(1 - x), x/(1 - x), 5]
例子2 coefficients of modified Hermite polynomials.
如果\(f(x)\)或者\(g(x)\)中出现了Exp指数函数,你应该使用下面的函数进行修正
(*如果$f(x)$或者$g(x)$中出现了Exp指数函数,你应该使用下面的函数进行修正*)
Clear["Global`*"]
IsXFunction = MemberQ[Variables@#, x] &;
RiordanArrayWhenExpotiential[p_, q_, numOfRows_Integer] :=
Table[n!/k!*SeriesCoefficient[p*q^k, {x, 0, n}], {n, 0,
numOfRows}, {k, 0, n}] // Grid;
RiordanArrayWhenExpotiential[1, 1/(2 - Exp[x])-1, 5]
RiordanArrayWhenExpotiential[Exp[x^2/2], x, 5]
例子3
给大家看一下这位老哥写的程序,好像有点问题
代码原理?很简单,就是数学计算,涉及到了线性卷积,Exp的情形就是对每一项进行n!/k!的修正
代码风格几乎就是效率很高的那种C代码
(* Jean-François Alcover, Jul 16 2019, after Sage program *)
入参exp是True的话就是Expotiential的情形,入参exp是False就是Ordinary的情形。
RiordanArray[d_, h_, n_] := RiordanArray[d, h, n, False];
RiordanArray[d_Function | d_Symbol, h_Function | h_Symbol, n_,
exp_: (True | False)] := Module[{M, td, th, k, m}, M[_, _] = 0;
td = PadRight[CoefficientList[d[x] + O[x]^n, x], n];
th = PadRight[CoefficientList[h[x] + O[x]^n, x], n];
For[k = 0, k <= n - 1, k++, M[k, 0] = td[[k + 1]]];
For[k = 1, k <= n - 1, k++,
For[m = k, m <= n - 1, m++,
M[m, k] = Sum[M[j, k - 1]*th[[m - j + 1]], {j, k - 1, m <del>- 1</del>}]]];
If[exp, u = 1;
For[k = 1, k <= n - 1, k++, u *= k;
For[m = 0, m <= k, m++, j = If[m == 0, u, j/m];
M[k, m] *= j]]];
Table[M[m, k], {m, 0, n - 1}, {k, 0, m}]];
修改后的正确版本如下
RiordanArray[d_, h_, n_] := RiordanArray[d, h, n, False];
RiordanArray[d_Function | d_Symbol, h_Function | h_Symbol, n_,
exp_: (True | False)] := Module[{M, td, th, k, m}, M[_, _] = 0;
td = PadRight[CoefficientList[d[x] + O[x]^n, x], n];
th = PadRight[CoefficientList[h[x] + O[x]^n, x], n];
For[k = 0, k <= n - 1, k++, M[k, 0] = td[[k + 1]]];
For[k = 1, k <= n - 1, k++,
For[m = 0, m <= n - 1, m++,
M[m, k] = Sum[M[j, k - 1]*th[[m - j + 1]], {j, 0, m}]]];
If[exp, u = 1;
For[k = 1, k <= n - 1, k++, u *= k;
For[m = 0, m <= k, m++, j = If[m == 0, u, j/m];
M[k, m] *= j]]];
Table[M[m, k], {m, 0, n - 1}, {k, 0, m}]];
RiordanArray[1 &, 1/(2 - Exp[#]) &, 10,
True] // Grid (*Jean-François Alcover,Jul 16 2019,after Sage \
program*)
彩蛋
逛OEIS的时候发现有个序列标题错了,我已经反馈了
谁大晚上没事干和OEIS老哥激情对线?哦是我那没事了
我再也不想在OEIS上趟浑水了,我连一个词条的author都不是,我关心这屁事。冷门词条错误给5~10年后的萌新来发现吧
后续:这位老哥坚持是自己函数调用的入参写错了,,,执迷不悟