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] =(10/3)F [n-1] -F [n- 2],f 1 = 1,f 2 = 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。
如果我增加從35分配給「N」到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 0001 * 2 ^( - 52)(有52個零)的數量分配爲更大的遞歸關係的逆數。
但是,我不知道我的假設是否屬實。即使我的假設是正確的,爲什麼R分配非常小的數目爲更大的數字,只有在「遞歸關係」而不是像3 ^(n-1)這樣的一般函數? 此外,在「n = 50」的情況下,R爲什麼完全改變圖形的形狀?
你能幫我嗎?
預先感謝您。
請注意,定義名爲'F'的對象不是一個好主意。如果沒有另外定義,「F」表示「FALSE」。 – 2013-03-24 00:20:18
謝謝您的指示。我發誓下次要謹慎。 – Choijaeyoung 2013-03-24 05:19:17