Mathematica基础——处理简单的数列问题

时间:2024-10-20 15:20:44

用Mathematica可以很容易的处理一些数列问题。 现在,我们就来了解一下Mathematica在数列问题上的一些简单的用法!

Mathematica基础——处理简单的数列问题

工具/原料

电脑

Mathematica

猜数游戏

1、 以前,总是遇到一些无聊的猜数游戏,比如“1,2,4,9的下一稍僚敉视个数是多少”。这种问题是没有明确答案的,比如,我们可以这样提问对方: “1,2,4,9,2的下一个数是多少”, “1,2,4,9,6的下一个数是多少”, “1,2,4,9,21的下一个数是多少”。 这里,不是批判,而是要看看Mathematica能干什么! 用FindSequenceFunction [{1,2,4,9},n]可以给出{1,2,4,9}的一个可能最简单的通式,并用DiscretePlot作出图像。 运行结果里的Hypergeometric2F1是一个超椭圆函数。

Mathematica基础——处理简单的数列问题

2、 那么,Mathematica给出的{1,2,4,9}的下一个数是多少呢?看图像肯定是不准确的!我们已知四个数,要求第五个数,可以设n为5。FindSequenceFunction [{1,2,4,9},n]/.n->5 给出的答案是21。检验一下:FindSequenceFunction [{1,2,4,9,21},n],可以看到,结果跟FindSequenceFunction [{1,2,4,9},n]完全一样! 这个数列增长的相当快,当n等于18的时候,数值已经超过了六百万!

Mathematica基础——处理简单的数列问题

3、 再看一个简单点的栗子:{1,2,5,10}下一个是17。

Mathematica基础——处理简单的数列问题

4、 大多数情形,Mathematica也懒得构造通项公式。 在做实验的时候,发现,Mathematica居然给出了{1,2,4,9,19}的通式(-6+19 n-9 n^2+2 n^3)/6。 我真是不知道,Mathematica为什么会给出21,而不是19,难道超椭圆函数比三次函数更简单吗?

Mathematica基础——处理简单的数列问题

数列通项公式

1、 求递推公式a[n + 1] - 2 a[n] == 1对应的数列的通项公式。RSolve[a[n + 1] - 2 a[n] == 1, a[n], n] 给出的通式解是 c1*2^(n-1)+2^n-1,其中,c1是常数。

Mathematica基础——处理简单的数列问题

2、 给出初始条件a[0]==1,就能得到特解:RSolveValue[{a[n + 1] - 2 a[n] == 1, a[0] == 1}, a[n], n] // TraditionalForm 这就相当于多求了一个方程的解,得出了c1的值。

Mathematica基础——处理简单的数列问题

3、 更复杂的递推公式a[n + 1] == (2 a[n] + 3)/(a[n] + 4)也能解开:RSolve[{a[n + 1] == (2 a[n] + 3)/(a[n] + 4), a[0] == 0}, a[n], n]

Mathematica基础——处理简单的数列问题

一些特殊数列

1、 给出前10个Fibonacci数:Table[Fibonac罕铞泱殳ci[n], {n, 10}] 还可以用RecurrenceTable直接发掘通式来求值(但是它不返回通式):RecurrenceTable[{a[n]==a[n - 1]+a[n - 2], a[1] == 1,a[2] == 1},a,{n,10}] 想看通式,可以这样:RSolveValue[{a[n] == a[n - 1] + a[n - 2], a[1] == 1, a[2] == 1}, a[n],n] 可惜,Mathematica并不想让我们知道通解是什么!

Mathematica基础——处理简单的数列问题

2、 在a[n]==a[n - 1]+a[n - 2]的基础上,多老揉孟阼写一项: a[n]==a[n - 1]+a[n - 2]+a[n-3],代码是:RecurrenceTable[{a[n] == a[n - 1] + a[n - 2] + a[n - 3], a[1] == 1, a[2] == 1, a[3] == 1}, a, {n, 10}] 但是好像难以求出通解:RSolveValue[{a[n] == a[n - 1] + a[n - 2] + a[n - 3], a[1] == 1, a[2] == 1, a[3] == 1}, a[n], n] // TraditionalForm 试着画出图像:ListPlot[{1, 1, 1, 3, 5, 9, 17, 31, 57, 105}]

Mathematica基础——处理简单的数列问题
Mathematica基础——处理简单的数列问题

3、 解一个递归方程组:RecurrenceTable[{x[1 + n] == 0.6 x[n] + y[n],y[n + 1] == -0.6 + x[n]^2,x[0] == 0.142857, y[0] == 0.33},{x, y}, {n, 1, 2500}] // Short 作出点的离散图像:ListPlot[%, PlotStyle -> Green, PlotRange -> All]

Mathematica基础——处理简单的数列问题

4、 制造一个动态效果,实现人机互动:Manipulate[ListPlot[RecurrenceTable[{x[1 + n] == 0.6 x[n] + y[n], y[n + 1] == -t + x[n]^2, x[0] == 0.142857, y[0] == 0.33}, {x, y}, {n, 1, 2500}], PlotStyle -> Green, PlotRange -> {-1, 1}, ImageSize -> {500, 365}], {t, 0.1, 0.9, 0.01}]

Mathematica基础——处理简单的数列问题
© 手抄报圈