数列の行方
のとき漸化式で得られる数列は、
#include <stdio.h> int main(void) { int i; double an = 2; for (i = 1; i < 20;i ++) { printf("%2d: %f\n", i, an); an = (2 * an + 1) / (an + 1); } printf("%02d: %f\n", i, an); return 0; }
1: 2.000000 2: 1.666667 3: 1.625000 4: 1.619048 5: 1.618182 6: 1.618056 7: 1.618037 8: 1.618034 9: 1.618034 10: 1.618034 11: 1.618034 12: 1.618034 13: 1.618034 14: 1.618034 15: 1.618034 16: 1.618034 17: 1.618034 18: 1.618034 19: 1.618034 20: 1.618034
これは黄金数に収束する。
上の漸化式を変形すると、
となり、これは黄金数の連分数表現
を二段ずつ計算していくことに相当する。
数列はとなる単調減少数列である。
黄金数の連分数表現を一段ずつ計算していくことを考える。
この場合、漸化式で得られる数列を求めることになる。
このままの漸化式でもいいし、冒頭の漸化式に合わせてとしてもいい。
#include <stdio.h> int main(void) { int i; double bn = 2; for (i = 1; i < 20;i ++) { printf("%2d: %f\n", i, bn); bn = (bn + 1) / bn; } printf("%02d: %f\n", i, bn); return 0; }
1: 2.000000 2: 1.500000 3: 1.666667 4: 1.600000 5: 1.625000 6: 1.615385 7: 1.619048 8: 1.617647 9: 1.618182 10: 1.617978 11: 1.618056 12: 1.618026 13: 1.618037 14: 1.618033 15: 1.618034 16: 1.618034 17: 1.618034 18: 1.618034 19: 1.618034 20: 1.618034
はと異なり振動しながら黄金数に収束していく。
また、収束の速度はよりも遅いことが分かる。
なので明らかにだけどに収束するわけではありませんでした。