2013-04-17 1 views
1

Я знаю его просто исправить, но может кто-то пожалуйста, посмотрите на него:Может кто-то проверить мой код, чтобы понять, почему это сообщение выскакивает «Ошибка: не удалось найти функцию„N1“»

a12= 0 
a21= 0 
K1= 1000 
K2= 600 
r1= 0.2 
r2= 0.1 
N1= ((K1 - a12*K2)/(1 - a12*a21)) 
N2= ((K2 - a21*K1)/(1 - a21*a12)) 
for(t in 1:80){ 
    N1[t+1]= N1(t) + r1*N1(t)*(K1 - N1 - a12*N2)/K1 
    N2[t+1]= N2(t) + r2*N2(t)*(K2 - N2 - a21*N1)/K2 
} 
## Error: could not find function "N1" 

Исправленная Код:

N1= rep(0,80) 
N2= rep(0,80) 
a12= 0 
a21= 0 
K1= 1000 
K2= 600 
r1= 0.2 
r2= 0.1 
N1[1]= ((K1 - a12*K2)/(1 - a12*a21)) 
N2[1]= ((K2 - a21*K1)/(1 - a21*a12)) 
for(t in 1:80){ 
N1[t+1]= N1[t] + r1*N1[t]*(K1 - N1[t] - a12*N2[t])/K1 
N2[t+1]= N2[t] + r2*N2[t]*(K2 - N2[t] - a21*N1[t])/K2 
} 
plot(1:81, N1, type="l", lwd=3, xlab="Time") 
lines(1:81, N2, lwd=3, col='red') 

Когда я пробежала участки, где я изменил значение a12 и a21 они выглядели как то, что я мог бы ожидать, так как они смоделированы конкурентоспособности между двумя видами.

Три модели я бегу:

no competition-  a12=0  a21=0 
stable coexistence- a12=0.25 a21=0.1 
competitive exclusion- a12=0.25 a21=0.75 
+3

Поскольку N1 не определяется как функция, но только значение 1000. – A5C1D2H2I1M1N2O1R2T1

+1

Когда вы размещаете код, пожалуйста, удалите ' > и + ', поэтому его можно запустить без удаления этих элементов. –

+0

Есть ли у вас какие-либо предложения по его устранению. Я пытаюсь запустить модель Lotka-Votera, и это формулы, и это формулы, которые мне нужны для создания моей модели. – Southard

ответ

0

@ e4e5f4 верен тем, что ваша основная проблема заключается в том, что вы используете круглые скобки (, если вам нужно [ квадратных скобок.

Однако, кроме того, у вас есть проблемы внутри for цикла:

# this is a problem, even with brackets corrected 
N1[t+1]= N1[t] + r1*N1[t]*(K1 - N1 - a12*N2)/K1 
N1[t+1]= N1[t] + r1*N1[t]*(K1 - N1 - a12*N2)/K1 
           ^ ^
          N1 & N2 are vectors 

Поскольку большинство математических операций в R являются векторизации, значение будучи назначен (т.е. правая часть вашего уравнения) является вектор, длина которого растет на каждой итерации.


Следующие предупреждения, которые вы видите, связаны с попыткой присвоить несколько значений (то есть вектор) одному элементу вектора.

Вы увидите ту же самую ошибку, если вы пытаетесь

foo <- c(17, 23, 31) 
foo[3] <- 1:10 

Вы получаете 158 этих предупреждений, потому что вы итерацию.


Вы, скорее всего, нужно индексировать эти значения (вероятно, с N1[[t]] или N1[[t-1]] и т.д.)

+0

Думаю, я понял это сейчас.Я добавил N1 и N2 с N1 = rep() и N2 = rep(). И я переместил старые N1 и N2 с N [1] и N [2]. – Southard

0

Replace N1(t) с N1[t]. Сделайте то же самое для N2.

Примечание: Я думаю, что вы используете синтаксис для индексирования массива, который отличается от синтаксиса R.

+0

Я думаю, что получил эквивалент «более 9000» в сообщениях об ошибках R, когда я сделал это, у меня был слишком человек, чтобы просмотреть любой из них. Но спасибо за помощь. – Southard

+0

Вы заменили символы «N1()» и «N2()» на «N1 []» и 'N2 []' – Nishanth

+0

, а в R и Matlab – Nishanth