1
n <- 35
F <- rep(0,n)
N <- rep(0,n)
F[1] <- 1
F[2] <- 1/3
for (k in 3:n) F[k] <- (10/3)*F[k-1]- F[k-2]
F
N <- seq(from=1, to=n, by=1)

線形再帰方程式を解くことに慣れていなくても、まったく問題ありません。とにかく、上記の漸化式を解くことで F[n]=3^(1-n) の結果を得ることができます。つまり、F[n]=(10/3)F[n-1]-F[n-2 ]、f=1、f=1/3。

このため、

plot (N, F,type="l")

指数関数として知られる「3^(1-n)」のグラフが期待できます。

ただし、出力は予想とは異なります。による出力と比較して、

curve(3^(1-x),0,35, add=TRUE, col='blue')

ここに画像の説明を入力

ご存じのとおり、3^(1-x) は単調減少関数です。予想に反して、後半の計算で増加しているグラフしか得られません。

F[18]>F[19]
TRUE
F[19]>F[20]
FALSE

どうしたの?常識的には、"F[n]>F[n+1]" の出力はすべて TRUE になるはずです。

「n」に割り当てる数を35から50に増やすと、

n <- 50
plot (N, F,type="l")

グラフの形がおかしくなる。

ここに画像の説明を入力

その理由は「倍精度バイナリ浮動小数点」( http://en.wikipedia.org/wiki/Double_precision )に基づいていると推測しています。私の意見では、R は 0.0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 * 2^(-52) (ゼロが 52 個あります) より小さい数を再帰関係でより大きな数として割り当てます。

ただし、私の推測が正しいかどうかはわかりません。私の仮定が正しいとしても、なぜRは非常に小さい数をより大きな数として逆に割り当てるのですか? さらに、「n=50」の場合、なぜRはグラフの形をまるごと変えてしまうのでしょうか?

私たちを手伝ってくれますか?

前もって感謝します。

4

1 に答える 1