几何与代数:数列递推的可视化分析
什么是二次递推数列?有什么特点?
a n + 1 = f ( a n ) f ( x ) = α x 2 + β x + γ α ≠ 0 \qquad a_{n+1} = f(a_n) \\ f(x) = \alpha x^2 + \beta x + \gamma \\ \alpha \neq 0 an+1=f(an)f(x)=αx2+βx+γα=0
- 可以绝对分离后一项与前一项
- 后一项仅和前一项有关,且呈函数关系
- 函数关系为二次函数
二次递推的问题来源(包括但不限于如下)
-
受资源限制的种群发展(离散采样)
- d [ p ( t ) ] d t = k ( M − p ( t ) ) p ( t ) \frac{d[p(t)]}{dt}=k(M-p(t))p(t) dtd[p(t)]=k(M−p(t))p(t)
- p ( t + 1 ) = p ( t ) + k ( M − p ( t ) ) p ( t ) p(t+1)=p(t)+k(M-p(t))p(t) p(t+1)=p(t)+k(M−p(t))p(t)
- p ( n + 1 ) = − k ( p ( n ) ) 2 + ( k M + 1 ) p ( n ) p(n+1)=-k(p(n))^2+(k M+1)p(n) p(n+1)=−k(p(n))2+(kM+1)p(n)
-
对数线性递推
- l n a n + 1 = 2 l n a n + c ln a_{n+1}=2 ln a_n + c lnan+1=2lnan+c
- a n + 1 = e c ⋅ a n 2 a_{n+1}=e^c \cdot a_n^2 an+1=ec⋅an2
-
双递推数列
一般形式二次递推数列的代数观察尝试
a n + 1 = − 1 3 a n 2 + 1 a 1 = α 决 定 了 整 个 数 列 a_{n+1}=-\frac{1}{3}a_n^2+1 \qquad a_1=\alpha决定了整个数列 an+1=−31an2+1a1=α决定了整个数列
MATLAB数值计算:
clear;clc;
a_0 = input("请输入初值:");
n = input("请输入你要计算到的位置:");
Zhi = DiTuiShuLie_Calculation(a_0, n);
Zhi = roundn(Zhi, -3); %保留小数位数后三位
display(Zhi)
function [result] = DiTuiShuLie_Calculation(a, n)
P = [];
a_0 = a;
for i = 1 : n
% y=[y;x(i)];%把每一个x都放到y里,成为一行
% y=[y,x(i)];%把每一个x都放到y里,成为一列
P = [P ; a_0];
a_1 = -(a_0 .^ 2 ./ 3) + 1;
a_0 = a_1;
end
result = P';
end
请输入初值:[1/6, 1/3, 1/2, 2/3, 5/6, -4]
请输入你要计算到的位置:10
得到下表:
初值 | 列1 | 列2 | 列3 | 列4 | 列5 | 列6 | 列7 | 列8 | 列9 | 列10 |
---|---|---|---|---|---|---|---|---|---|---|
1/6 | 0.167 | 0.991 | 0.673 | 0.849 | 0.76 | 0.808 | 0.783 | 0.796 | 0.789 | 0.793 |
1/3 | 0.333 | 0.963 | 0.691 | 0.841 | 0.764 | 0.805 | 0.784 | 0.795 | 0.789 | 0.792 |
1/2 | 0.5 | 0.917 | 0.72 | 0.827 | 0.772 | 0.801 | 0.786 | 0.794 | 0.79 | 0.792 |
2/3 | 0.667 | 0.852 | 0.758 | 0.808 | 0.782 | 0.796 | 0.789 | 0.793 | 0.791 | 0.792 |
5/6 | 0.833 | 0.769 | 0.803 | 0.785 | 0.795 | 0.79 | 0.792 | 0.791 | 0.792 | 0.791 |
-4 | -4 | -4.333 | -5.259 | -8.22 | -21.522 | -153.405 | -7843.39 | -2.1E+07 | -1.4E+14 | -6.5491E+27 |
观察到,前五行数列会趋于一个值;而最后一行数列发散
问题:初值在什么范围内数列收敛?发散?
利用坐标平面内的图上演化分析
在同一坐标系下画出
f
(
x
)
=
−
1
3
x
2
+
1
f(x)=-\frac{1}{3} x^2 + 1
f(x)=−31x2+1和
y
=
x
y=x
y=x的图像,如图:
进行如下的取值过程:
对首项的取值范围进行讨论
第一种情况:
第二种情况:
第三种情况:
综上可知:
- 当 a 1 ∈ ( x 1 , − x 1 ) a_1\in(x_1,-x_1) a1∈(x1,−x1)时, lim x → + ∞ a n = x 2 \lim\limits_{x\rightarrow+\infty}a_n=x_2 x→+∞liman=x2;
- 当 a 1 > − x 1 a_1>-x_1 a1>−x1或 a 1 < x 1 a_1<x_1 a1<x1时, { a n } \{a_n\} {an}发散;
- 当 a 1 = x 1 a_1=x_1 a1=x1或 a 1 = − x 1 a_1=-x_1 a1=−x1时, lim x → + ∞ a n = x 1 \lim\limits_{x\rightarrow+\infty}a_n=x_1 x→+∞liman=x1。
稳定平衡点与不稳定平衡点
不稳定平衡点处随着演化不断远去,稳定点平衡点处随着演化不断靠近
震荡循环:极限环
不断演化会趋向于一个循环
几何上的复杂运动产生伪随机数
,它的演化时杂乱无章的。
对于给定的
x
1
x_1
x1的取值,作如下的变换:
δ
:
{
x
n
}
→
{
0
,
1
}
x
k
→
{
0
,
x
k
∈
[
0
,
+
∞
)
1
,
x
k
∈
(
−
∞
,
0
)
\delta:\{x_n\}\rightarrow\{0,1\}\\x_k\rightarrow\begin{cases}0,&x_k\in[0,+\infin)\\1,&x_k\in(-\infin,0)\end{cases}
δ:{xn}→{0,1}xk→{0,1,xk∈[0,+∞)xk∈(−∞,0)
MATLAB数值计算:
clear;clc;
ChuZhi = input("请输入数列初值:");
n = input("请输入你要计算到多少项:");
P = [];
x_0 = ChuZhi;
for i = 1 : n
x_00 = (x_0 < 0);
P = [P ; x_00];
x_1 = x_0 .^ 2 - 2;
x_0 = x_1;
end
P = P';
display(P)
得到下表:
初值 | 转换 | |||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0.1 | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | 0 | 0 |
0.2 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 1 |
0.3 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 0 |
0.4 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 |
0.5 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 |
0.6 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 1 |
0.7 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 0 |
0.8 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 |
0.9 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 |
再作如下变换,将0,1序列转换为(0,1)区间的小数:
Γ
(
{
δ
n
}
)
=
∑
k
=
1
+
∞
δ
k
2
k
=
lim
n
→
+
∞
∑
k
=
1
n
δ
k
2
k
\Gamma(\{\delta_n\})=\sum^{+\infty}_{k = 1}{\frac{\delta_k}{2^k}}=\lim\limits_{n \to +\infin}\sum^{n}_{k = 1}{\frac{\delta_k}{2^k}}
Γ({δn})=k=1∑+∞2kδk=n→+∞limk=1∑n2kδk
例如:
1
,
0
,
1
,
1
⇒
1
2
1
+
0
2
2
+
1
2
3
+
1
2
4
1,0,1,1\Rightarrow\frac{1}{2^1}+\frac{0}{2^2}+\frac{1}{2^3}+\frac{1}{2^4}
1,0,1,1⇒211+220+231+241
MATLAB数值计算:
result = [];
for k = 1 : length(ChuZhi)
sum = 0;
Q = P(k, :);
for a = 1 : n
sum = sum + Q(1, a) ./ 2 .^ a;
end
result = [result; sum];
end
display(result)
得到下表:
0.1 | 0.274 |
---|---|
0.2 | 0.298 |
0.3 | 0.291 |
0.4 | 0.345 |
0.5 | 0.371 |
0.6 | 0.331 |
0.7 | 0.327 |
0.8 | 0.443 |
0.9 | 0.457 |
伪随机数可能会对应分形结构
MATLAB绘图:
x = ChuZhi;
y = result;
plot(x, y)
得到下图:
要点
- 当遇到代数问题是某些规则的迭代,往往会遇到迭代之后计算复杂度爆炸,进而难于分析。这种情况下可以借助图上推演的办法,将代数结果看作是某种几何过程的离散采样。这就能够借助结合图形挖掘出代数推到很难挖掘出来的规律。
- 与微分动力系统类似,二次递推数列也会产生稳定平衡点、不稳定平衡点、以及极限环等结构。这些结构借助图上推演很容易观察。
- 进制也是代数和几何之间的桥梁之一,利用进制变换可以将一个数列转化为一个小数,从而将数列的代数递推关系变为进制变换函数的图像反映到平面直角坐标系中。部分时候会产生分形,对应着伪随机过程,可以作为某些随机数生成器的设计原理。