如何求數列的通項公式
在做尤拉計劃427題的時候,雖然在OEIS網站上找到了程式碼,但由於它是遞迴的,不太好總結。
所以自己從數字的因式分解中找b(m,1,n)的規律,但這個效率太低了。一晚上才找到幾個,有什麼好的辦法?
例如
b(1,1,9)=150994944 b(2,1,9)=170496000 b(3,1,9)=20731392 b(4,1,9)=1958976 b(5,1,9)=176256 b(6,1,9)=14976 b(7,1,9)=1152 b(8,1,9)=72 b(9,1,9)=0 72 1152 14976 176256 b(1,1,8)=6588344 b(2,1,8)=7068544 b(3,1,8)=919240 b(4,1,8)=94080 b(5,1,8)=9016 b(6,1,8)=784 b(7,1,8)=56 b(8,1,8)=0 56 784 9016 94080 D:\>a b(1,1,7)=326592 b(2,1,7)=328104 b(3,1,7)=45612 b(4,1,7)=5040 b(5,1,7)=504 b(6,1,7)=42 b(7,1,7)=0 42 504 5040 45864 D:\>a b(1,1,6)=18750 b(2,1,6)=17250 b(3,1,6)=2550 b(4,1,6)=300 b(5,1,6)=30 b(6,1,6)=0 30 300 2550 19800 已經發現 b(n,1,n)=0 b(n-1,1,n)=n*(n-1) b(n-2,1,n)=n*(n-1)*2*(n-1) b(n-3,1,n)=n*(n-1)*(3*(n-1)+2) b(n-4,1,n)=n*(n-1)*(n-1)*(2*n-1)*(2*n)) //n=7時已經錯誤,n=6也錯 ... b(1,1,n)=n*(n-1)^(n-1)
只知道隨著第一個引數遞增,函式值遞減,遞減幅度約是除以n-1的數量級,如何求數列的通項公式?
展開式
In[4]:= Expand[(2 + 3 (-1 + n)) (-1 + n) n] 2 3 Out[4]= n - 4 n + 3 n In[5]:= Expand[n*(n-1)*2*(n-1)] 2 3 Out[5]= 2 n - 4 n + 2 n In[6]:= Expand[n*(n-1)] 2 Out[6]= -n + n In[7]:= Expand[n*(n-1)* (n-1)*(2*n-1)*(2*n)] 2 3 4 5 Out[7]= -2 n + 8 n - 10 n + 4 n
假定n-5的通項公式是a + a1*n +a2*n^2 +a3*n^3+a4*n^4+a5*n^5+a6*n^6
,用n=10~16代入,聯立方程組。
In[3]:= NSolve[ { a + a1*15 +a2*15^2 +a3*15^3+a4*15^4+a5*15^5+a6*15^6 == 47628000, a + a1*14 +a2*14^2 +a3*14^3+a4*14^4+a5*14^5+a6*14^6 == 31070312, a + a1*13 +a2*13^2 +a3*13^3+a4*13^4+a5*13^5+a6*13^6 == 19614816, a + a1*12 +a2*12^2 +a3*12^3+a4*12^4+a5*12^5+a6*12^6 == 11918016, a + a1*11 +a2*11^2 +a3*11^3+a4*11^4+a5*11^5+a6*11^6 == 6921200, a + a1*10 +a2*10^2 +a3*10^3+a4*10^4+a5*10^5+a6*10^6 == 3807000, a + a1*16 +a2*16^2 +a3*16^3+a4*16^4+a5*16^5+a6*16^6 == 70963200 }, {a, a1, a2, a3, a4, a5, a6}] -6 Out[3]= {{a -> 0.0000378713, a1 -> -0.0000177607, a2 -> 3.4431 10 , a3 -> -3., a4 -> 11., a5 -> -13., > a6 -> 5.}}
排除掉約等於0的結果。f(n)=-3*n^3+11*n^4-13*n^5+5*n^6
,代回方程中
D:\>a ... b(10,1,16)=1356595200 b(11,1,16)=70963200 b(12,1,16)=3571200 b(13,1,16)=169200 b(14,1,16)=7200 b(15,1,16)=240 b(16,1,16)=0 240 7200 169200 3571200 70963200 D:\>g++ p427p1.cpp D:\>a ... b(9,1,15)=853335000 b(10,1,15)=47628000 b(11,1,15)=2557800 b(12,1,15)=129360 b(13,1,15)=5880 b(14,1,15)=210 b(15,1,15)=0 210 5880 129360 2557800 47628000 b(3,1,9)=20731392 b(4,1,9)=1958976 b(5,1,9)=176256 b(6,1,9)=14976 b(7,1,9)=1152 b(8,1,9)=72 b(9,1,9)=0 72 1152 14976 176256 1959552
驗算結果是正確的,聯絡到每個函式值都有n(n-1)的因子,所以a,a1等於0也合理。不出意料,n=9時,這個結論是錯的。 對展開式因式分解
In[4]:= Factor[-3*n^3+11*n^4-13*n^5+5*n^6] 2 3 Out[4]= (-1 + n) n (-3 + 5 n)
再計算下一個則要用到n=12~18,n=11及以下都無效了
In[7]:= NSolve[ { a*17^7 + a1*17 +a2*17^2 +a3*17^3+a4*17^4+a5*17^5+a6*17^6 == 2095374848, a*16^7 + a1*16 +a2*16^2 +a3*16^3+a4*16^4+a5*16^5+a6*16^6 == 1356595200, a*15^7 + a1*15 +a2*15^2 +a3*15^3+a4*15^4+a5*15^5+a6*15^6 == 853335000, a*14^7 + a1*14 +a2*14^2 +a3*14^3+a4*14^4+a5*14^5+a6*14^6 == 519384320, a*13^7 + a1*13 +a2*13^2 +a3*13^3+a4*13^4+a5*13^5+a6*13^6 == 304346016, a*12^7 + a1*12 +a2*12^2 +a3*12^3+a4*12^4+a5*12^5+a6*12^6 == 170615808, a*18^7 + a1*18 +a2*18^2 +a3*18^3+a4*18^4+a5*18^5+a6*18^6 == 3155158656 }, {a, a1, a2, a3, a4, a5, a6}] Out[7]= {{a -> 6., a1 -> 0.00152974, a2 -> -0.000637064, a3 -> 0.000110092, a4 -> -4.00001, a5 -> 14., > a6 -> -16.}} In[8]:= Factor[6*n^7-4*n^4+14*n^5-16*n^6] 2 4 Out[8]= 2 (-1 + n) n (-2 + 3 n)
b函式的個數太多,為什麼不從計算a函式的每一輪迴圈入手呢,在每一輪輸出b函式的和再除以n,就能發現規律了
D:\>a 256 304 56 8 1 T(5)=5345 D:\>a 3125 3900 655 85 10 1 T(6)=79716 D:\>a 46656 60480 9288 1092 120 12 1 T(7)=1403689 q: 256 304 56 8 1 2 2 2 2 2 2 2 2 2 2 2 2 19 0 0 0 2 2 2 7 0 0 0 0 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 q: 3125 3900 655 85 10 1 5 5 5 5 5 0 2 2 3 5 5 13 5 131 0 0 0 0 5 17 0 0 0 0 2 5 0 0 0 0 0 0 0 0 0 0 q: 46656 60480 9288 1092 120 12 1 2 2 2 2 2 2 3 3 3 3 3 3 2 2 2 2 2 2 3 3 3 5 7 0 2 2 2 3 3 3 43 0 0 0 0 0 2 2 3 7 13 0 0 0 0 0 0 0 2 2 2 3 5 0 0 0 0 0 0 0 2 2 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
後面是對輸出用j語言因式分解的結果,顯然第1行是數(n-1)^(n-1),而倒數第2行是2*(n-1),其餘各行也有n-1的因子,倒數第3行是(3n-1)*(n-1)
In[12]:= NSolve[ { a + a1* 5 +a2* 5^2 +a3* 5^3 == 655 /5, a + a1* 6 +a2* 6^2 +a3* 6^3 == 1092/6, a + a1* 7 +a2* 7^2 +a3* 7^3 == 1680/7, a + a1* 8 +a2* 8^2 +a3* 8^3 == 2448/8 }, {a, a1, a2, a3}] Out[12]= {{a -> -54., a1 -> 30.3333, a2 -> 0.5, a3 -> 0.166667}} In[13]:= -54+30.3333*4+0.5*4^2+0.166667*4^3 Out[13]= 85.9999 In[14]:= NSolve[ { a + a1* 6 +a2* 6^2 +a3* 6^3 == 1092/6, a + a1* 7 +a2* 7^2 +a3* 7^3 == 1680/7, a + a1* 8 +a2* 8^2 +a3* 8^3 == 2448/8, a + a1* 9 +a2* 9^2 +a3* 9^3 == 3420/9 }, {a, a1, a2, a3}] Out[14]= {{a -> 2., a1 -> 6., a2 -> 4., a3 -> 0.}} In[15]:= 2+6*5+4*25 Out[15]= 132
同樣遇到了b函式類似的問題,當倒數的行增大時,較小的n就不符合了.
猜測再歸納總結,得出了suma(x)的公式,pow(n,x-2)*(n-1)*((x+1)*n-x+1)
,當x小於n/2-1時成立。下面第一部分輸出是遞迴函式,第2部分是總結的公式。%%%前的都符合
D:\>a 2875106592253 3378689621098 5916951335844 2779275901584 180882453206 11648177463 741121459 46444944 2853760 170716 9828 533 26 1 T(1 4)=52724643726460 26 533 9828 170716 2853760 46444944 %%% 741121472 11648192192 180889572863 2781862370560 42437790094335 643013098011648 9686559885836288 D:\>g++ p427p3.cpp D:\>a 5340158891349 5821757677568 4391828017082 4747106059637 5597140953796 339667984516 20411999384 1211962500 70875000 4063500 226800 12 180 616 28 1 T(15)=89868341011325 28 616 12180 226799 4063500 %%% 70874999 1211962500 20412000000 339668437499 5597353124999 91495195312499 1485451406250000 2397712324218 7499 385087130859375000 D:\>g++ p427p3.cpp D:\>a 140380859375 5051409531250 2248001868750 2559926075250 97469505375 4508878967600 612032817375 34477178865 1918894080 105185280 56524 80 295680 14880 705 30 1 T(16)=49535458286096 30 705 14880 295680 5652480 105185280 1918894080%%% 34477178880 612032839680 10758893076480 187604171489280 3249056860078080 5594315162 1242880 958422295699783680 -9223372036854775808
相關文章
- 已知數列求其通項公式公式
- 斐波那契數列的通項公式及證明公式
- 漢諾塔通項公式公式
- JavaScript如何求陣列的質數JavaScript陣列
- 等比數列求和技巧(公式+倍增)公式
- 求陣列內所有偶數的和陣列
- 利用Mathemtaica軟體求數列的和AI
- 1064. 計算斐波那契第n項 通項公式公式
- HDU 1568 Fibonacci 【FIB通項公式+log10取前N為位數】公式
- 無序陣列求第K大的數陣列
- JavaScript求陣列數字的平均值JavaScript陣列
- 矩陣求導公式【轉】矩陣求導公式
- 求區間不同數的個數【樹狀陣列求解】陣列
- HITOJ 1864 求Fibonacci數列的位數
- 總結:生成函式(斐波那契通項公式推導)函式公式
- 通達信波浪風險係數指標公式原始碼指標公式原始碼
- 求陣列中k個數的所有組合陣列
- 求無序陣列總第n大的數陣列
- 求陣列中未出現的最小正整數陣列
- MATLAB求多項式係數及次數Matlab
- 求擷取圖片等比公式公式
- 數學公式公式
- 通達信特快列車主圖 原始碼主圖指標公式原始碼指標公式
- 有趣的數學公式(一)公式
- 通達信主力籌碼副圖公式 通訊達公式指標大全公式指標
- 二項式展開公式公式
- 18:等差數列末項計算
- 通訊達公式指標大全 2019通達信指標公式公式指標
- ts中如何限制方法傳入的引數data必須是陣列,且為偶數項?陣列
- C語言中如何求一個陣列的長度C語言陣列
- js如何移除陣列中指定索引的項JS陣列索引
- 更改 Excel 迭代公式的次數Excel公式
- python實現給定一個數和陣列,求陣列中兩數之和為給定的數Python陣列
- R語言中如何抽取向量的偶數項或者奇數項R語言
- hdu4417 樹狀陣列(求指定區間比指定數小的數的個數)陣列
- javascript陣列如何判斷是否有重複的陣列項JavaScript陣列
- 向量和矩陣求導公式總結矩陣求導公式
- Python例項之用Python求完全平方數Python