【组合数学】Riordan Array学习笔记

网友投稿 315 2022-09-04

【组合数学】Riordan Array学习笔记

目录

​​参考​​​​定义​​​​例子1 二项式系数/BinomialNumber​​​​例子2 coefficients of modified Hermite polynomials.​​​​例子3​​​​彩蛋​​

参考

​​ 维基百科​​​课件,比维基百科好懂

定义

简单来说,就是\(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 - 1}]]]; 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年后的萌新来发现吧

后续:这位老哥坚持是自己函数调用的入参写错了,,,执迷不悟

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python下划线中 _xx、__xx、__xx__ 的区别
下一篇:Gin框架之Session的使用(详解)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~