У меня есть код, который работает нормально:
C <- c(0, 0.3, 1.5, 3.5, 19.5)
v1 <- c(0.00, 0.00, 0.00, 0.26, 0.91)
H <- 1
n <- 1
V <- function(C, H, n) {
1/(1 + (C/H)^n)
}
y_spa1 <- V(C, H, n)
x_dense1 <- seq(0, 10, by=0.1)
y_dense1 <- splinefun(y_spa1, C, )(x_dense1)
y_dense <- approx(C, y_spa1, xout=x_dense1)$y
which(y_dense1 <= 0.5)
which(y_dense1 <= 0.5)[1]
x_dense1[which(y_dense1 <= 0.5)[1]]
Мне кажется, что когда я пытаюсь сделать то же самое для v1, это не дает мне правильного результата, может быть, потому, что некоторые значения равны 0?
y_spa1 <- V(C, H, n)
x_dense1 <- seq(0, 10, by=0.1)
y_dense1 <- splinefun(y_spa1, v1, )(x_dense1)
y_dense <- approx(v1, y_spa1, xout=x_dense1)$y
which(y_dense1 <= 0.5)
which(y_dense1 <= 0.5)[1]
x_dense1[which(y_dense1 <= 0.5)[1]]
which(y_dense1 <= 0.5)[1]
# [1] 3
x_dense1[which(y_dense1 <= 0.5)[1]]
# [1] 0.2
Я думаю, что результаты слишком низкие. У меня нет опыта в этой области в R, поэтому я прошу помощи на форуме.
Пожалуйста, может кто-нибудь сказать мне, есть ли ошибка в моем коде или моих предположениях? Это чрезвычайно важно для меня.





Похоже, вы вызвали splinefun с непреднамеренно переставленными аргументами x и y, таким образом предсказав x из y: y_dense1 <- splinefun(y_spa1, C, )(x_dense1).
Сведение вашего кода к минимальному воспроизводимому примеру и построение результатов выявило бы это (и упростило бы вам помощь). По сути:
xs = .1 * 1:100
ys = 1 / (1 + xs)
plot(xs, ys)
## overlay thick blue interpolated curve from splinefun:
curve(splinefun(xs, ys)(x), lwd = 4, col = 'blue', add = TRUE)
## overlay thin red interpolated curve from approxfun:
curve(approxfun(xs, ys)(x), lwd = 1, col = 'red', add = TRUE)
Теперь и splinefun, и approx (через approxfun для подачи функции в curve) совпадают с данными (график не показан).
Спасибо за ответ I_O. Извините за поздний ответ, но у меня есть доступ к хорошему интернету только сейчас. Вы хотите сказать, что все, что мне нужно сделать, это поменять порядок аргументов x и y в моем коде, что решит мою проблему?
Нет. Я говорил, что это ошибка в вашем коде - не обязательно единственная, но легко тестируемая и исправляемая. Если это решает проблему, прекрасно, если ваш код по-прежнему не дает ожидаемого результата, вы устранили по крайней мере одну ошибку и можете разобраться с остальными по частям.
Пожалуйста, дайте мне несколько советов относительно моей проблемы? Я что-то не так делаю в коде?