2013-03-23 4 views
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 = 1, f 2 = 1/3.Рекуррентное соотношение для уменьшающейся экспоненты имеет возрастающие значения

По этой причине при использовании

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

можно ожидать, что график "3^(1-N)", как известно, в качестве показательной функции.

Однако выход отличается от ожидаемого. По сравнению с выходом по

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

enter image description here

Как вы знаете, 3^(1-х) является монотонное уменьшение функции. Несмотря на ожидания, мы получаем только график, который увеличивается при позднем расчете.

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

Что случилось? В обычном смысле, всякий пункт «F [n]> F [n + 1]» должен быть ИСТИНА.

Если я увеличить число, которое выделяется на «N» до 50 с 35,

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

форма графа становятся полностью странно.

enter image description here

Я предполагаю, что причина на основе «точкой двойной точности с плавающей двоичной» (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 выделяет очень малое число как более большое число обратно, ТОЛЬКО в «рекуррентном отношении» не для общей функции, такой как 3^(n-1)? Кроме того, в случае «n = 50» почему R полностью меняет форму графика?

Не могли бы вы мне помочь?

Заранее спасибо.

+0

Обратите внимание, что это не является хорошей идеей для определения объекта с именем 'F'. Если не определено иначе, 'F' означает' FALSE'. –

+0

Спасибо за указание. В следующий раз я клянусь быть осторожным. – Choijaeyoung

ответ

3

Это не имеет никакого отношения к R, per-se и всему, что связано с значениями с плавающей запятой, представленными вашим компьютером.

Рекуррентные соотношения подобны дифференциальным уравнениям, а проблема формулируется в двух частях - соотношении и начальных условиях. Измените начальные условия, и у вас есть другое решение.

Обратите внимание, что с начальными условиями F[1] <- 1; F[2] <- 3 решение 3^(x-1) (указано без доказательства, но это легко проверить). Возрастающая экспоненциальная функция.

Далее, обратите внимание на соотношение между элементами (это умеренно полезно также смотреть на промежуточных значениях H здесь):

H <- tail(F, -1)/head(F, -1) 
c(head(H, 1), tail(H, 1)) 
## [1] 0.3333333 3.0000000 

Вы переходящих между раствором F (х) = 3^(1- x) и f (x) = 3^(xk) (для некоторой константы k - здесь здесь не 1, но ее бессмысленно точно вычислять).

Причина в том, что при вычитании F [k-2] арифметика не является точной, поэтому вы не вычитаете достаточно на каждом этапе, и это как если бы у вас было более высокое начальное условие для точного решения на этом этапе.

Действительно, чтобы дать первые N точек F, затем используйте рекуррентное отношение для решения на этом этапе. Это дает последовательность функций. И это то, что происходит, когда оно вычисляется численно - это другой набор начальных условий при каждом вычислении.

Вы фактически вычисляете решение для f (x) = (10/3) f (x-1) - f (x-2) + e (f (x-2)), где e (x) > 0 для всех x (и представляет биты, которые падают с конца при вычитании).

+0

@Choijaeyoung См. Отредактированную версию. Я решил вашу проблему. –

+0

Я так вам благодарен за ваше любезное наставление. Спасибо! – Choijaeyoung

+0

@Choijaeyoung Если это ответит на ваш вопрос, нажмите на галочку. Кроме того, вы должны выбрать ответ на этот вопрос: http://stackoverflow.com/questions/15369961/why-does-r-regard-large-number-as-even –

Смежные вопросы