Я пытаюсь подогнать нелинейную функцию к заданному набору данных (x и y во фрагменте кода), функция определяется как
f(x) = a/((sin((x-b)/2))^4)
x <- c(0, 5, -5, 10, -10, 15, -15, 20, -20, 25, -25, 30, -30)
y <- c(4.21, 3.73, 2.08, 1.1, 0.61, 0.42, 0.13, 0.1, 0.04, 0.036667, 0.016667, 0.007778, 0.007778)
plot(x,y, log="y")
Вот так выглядит исходный график, на который я должен уместить ранее упомянутую функцию.
Но когда я пытаюсь подобрать с помощью nls и построить кривую, график выглядит не совсем правильно
f <- function(x,a,b) { a/((sin((x-b)/2))^4) }
fitmodel <- nls (y ~ f(x,a,b), start=list(a=1,b=1))
lines(x, predict(fitmodel))
Вот что я вижу:
Я почти уверен, что делаю что-то не так, и буду признателен за любую помощь от вас.
plot(x,y, log="y", type="l")
, чтобы понять, почему это происходит. А потом сравнитеplot(x[order(x)],y[order(x)], log="y", type="l")
- person thelatemail   schedule 04.11.2016y <- y[order(x)]; x[order(x)]
- person Berry Boessenkool   schedule 04.11.2016lines(sort(x), predict(fitmodel)[order(x)])
- person alistaire   schedule 04.11.2016