1

我有一个二维递归方程,帮我解决这个问题:

p[n,m]=p[n,m-1]+p[n-1,m]+p[n-1,m-1]*(n-1)

p[n,0]=1 

p[0,m]=0

p[0,0]=0

我为 1<=n,m<=6 生成了这些数字:

n 行,m 列

1 1 1 1 1 1

3 5 7 9 11 13

6 17 34 57 86 121

10 45 130 289 546 925

15 100 410 1219 2921 6030

21 196 1106 4375 13391 34026

首先我看到 p[n,1] = n*(n+1)/2

接下来,固定 n = 2,寻找 p[n,i] 和 p[n,i-1] 之间的差异。

它们都等于 2 = 2!(记住)

现在,修正 n = 3,同时寻找 p[n,i] 和 p[n,i-1] 之间的差异

我们有 11、16、23、29。好的,现在寻找差异之间的差异 :)

它们都等于 6 = 3!

现在,修正 n = 4,也(哈哈)寻找 p[n,i] 和 p[n,i-1] 之间的差异

我们有 35、85、159、257。寻找差异之间的差异。

我们有 50、74、98。还要寻找差异之间的差异。

它们都等于 24 = 4!

现在,修正 n = 5,也(哈哈)寻找 p[n,i] 和 p[n,i-1] 之间的差异

85、310、809、1702 ->

225, 499, 893 ->

274, 394 ->

120 = 5!

等等...

目前为止就这样了 :(

更新:我发现oeis序列与我的非常相似!

4

1 回答 1

1

我怀疑这个差分方程的解非常强烈(因子上?)发散,因此计算 n,m 的值高达 10^5 将是具有挑战性的。

显然可以(而且效率低下!)通过简单的递归计算 p(n,m),如下所示(在 Python 中):

import numpy
n_max, m_max = 10, 10
p = numpy.zeros((n_max+1, m_max+1), dtype='int64')
p[:,0] = 1
p[0,:] = 0
p[0,0] = 0
for n in range(1, n_max+1):
    for m in range(1, m_max+1):
        p[n,m] = p[n, m-1] + p[n-1, m] + p[n-1, m-1] * (n-1)

这给出了 p(n,m) 的以下结果:

[[         0          0          0          0          0          0
           0          0          0          0          0]
 [         1          1          1          1          1          1
           1          1          1          1          1]
 [         1          3          5          7          9         11
          13         15         17         19         21]
 [         1          6         17         34         57         86
         121        162        209        262        321]
 [         1         10         45        130        289        546
         925       1450       2145       3034       4141]
 [         1         15        100        410       1219       2921
        6030      11180      19125      30739      47016]
 [         1         21        196       1106       4375      13391
       34026      75356     150381     276745     477456]
 [         1         28        350       2632      13643      53284
      167656     447168    1049685    2228716    4366642]
 [         1         36        582       5664      37731     186516
      727160    2347920    6527781   16104292   36071946]
 [         1         45        915      11235      94278     582642
     2801930   10967130   36278271  104604811  269511093]
 [         1         55       1375      20845     216238    1647382
     9693090   45877590  180860031  611969281 1822923673]]

即使对于 n = m = 10,它也已经包含一些相当大的值。将该计算扩展到 n=m=100,并使用浮点运算,表明 p(100,100) 可能与 5x10^172 一样大。

使用生成函数

在此处输入图像描述,

我相信你可以将你的二维差分方程转换成类似的东西

在此处输入图像描述,

这可能有助于您的分析。但是,作为说明性比较,可以考虑以下形式的差分方程

在此处输入图像描述

可以将其转换为生成函数的以下微分方程:

在此处输入图像描述

它具有以下形式的解决方案:

在此处输入图像描述

显然,这样的生成函数在 附近会有一个非常糟糕的泰勒展开\alpha=0

于 2018-03-11T09:08:33.310 回答