Как исправить использование функции splinefun?

У меня есть код, который работает нормально:

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, поэтому я прошу помощи на форуме.

Пожалуйста, дайте мне несколько советов относительно моей проблемы? Я что-то не так делаю в коде?

user20561514 02.12.2022 14:41

Пожалуйста, может кто-нибудь сказать мне, есть ли ошибка в моем коде или моих предположениях? Это чрезвычайно важно для меня.

user20561514 02.12.2022 16:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Похоже, вы вызвали 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 в моем коде, что решит мою проблему?

user20561514 03.12.2022 12:34

Нет. Я говорил, что это ошибка в вашем коде - не обязательно единственная, но легко тестируемая и исправляемая. Если это решает проблему, прекрасно, если ваш код по-прежнему не дает ожидаемого результата, вы устранили по крайней мере одну ошибку и можете разобраться с остальными по частям.

I_O 03.12.2022 12:48

Другие вопросы по теме

Похожие вопросы