Хобрук: Ваш путь к мастерству в программировании

Как построить функцию, которая вычисляет PDF?

Итак, это PDF-файл, который вычисляет моя функция:

fx = 0,3, если (0‹=x‹1) 0,1, если (1‹=x‹2) 0,25, если (2‹=x‹3) 0,15, если (3‹=x‹4) 0,2, если (4‹=x‹ 5) 0 иначе


И это моя кодировка для него:

    fx = function(x)
    { 
    if ((0<=x) & (x<1)) 0.3
    else if ((1<=x) & (x<2)) 0.1
    else if ((2<=x) & (x<3)) 0.25
    else if ((3<=x) & (x<4)) 0.15
    else if ((4<=x) & (x<5)) 0.2
    else 0
    }


Как мне теперь построить график y=fx?
Я пробовал:

    x <- runif(n,0,5)
    y <- fx(x)
    plot(x, y, type='1', xlim=c(0,5), ylim=c(0,5))

Но я получаю сообщение об ошибке, что «x» и «y» имеют разную длину?

18.04.2013

Ответы:


1

Ваши проблемы сводятся к тому, что ваша функция неправильно векторизована (она плохо работает с вектором).

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

eg

# a solution that will work and be properly vectorized
fx <- function(x) c(0, 0.3,0.1,0.25,0.15,0.20, 0)[findInterval(x, c(-Inf, 0:5, Inf))]


 x <- runif(n,0,5)

plot(x, fx(x))

Если вы хотите построить ступенчатую функцию (что и представляет собой этот PDF-файл), вы можете использовать stepfun

eg

fx <- stepfun(x = 0:5, y = c(0,0.3,0.1,0.25,0.15,0.20,0))
plot(fx, ylim = c(0,0.4),xlim = c(0,5), main = 'f(x)')

введите здесь описание изображения

Если вы не хотите, чтобы баллы добавлялись, то

plot(fx, ylim = c(0,0.4),xlim = c(0,5), main = 'f(x)', do.points=FALSE)

Если вы хотите векторизовать ступенчатую функцию, используйте Vectorize

 vfx <- Vectorize(fx)
18.04.2013
  • Я знал, что должен быть изящный способ векторизации этой функции. 18.04.2013
  • @mnel: Спасибо за использование предыдущей функции. Мне нравится, как ты используешь stepfun. 18.04.2013

  • 2

    Ваш PDF не векторизован. Попробуй это:

    fx <- function(x) {
      ifelse((0<=x) & (x<1), 0.3,
      ifelse((1<=x) & (x<2), 0.1,
      ifelse((2<=x) & (x<3), 0.25,
      ifelse((3<=x) & (x<4), 0.15,
      ifelse((4<=x) & (x<5), 0.2,
      0)))))
    }
    
    x <- seq(0, 6, length.out=n)
    plot(x, fx(x))
    
    18.04.2013
  • if использует только первый элемент аргумента логического вектора, тогда как ifelse использует все элементы. См. ?ifelse. 18.04.2013
  • Новые материалы

    Я собираюсь научить вас Python шаг за шагом
    Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..

    Альтернатива шаблону исходящих сообщений для архитектуры микросервисов
    Познакомьтесь с двухэтапным сообщением В этой статье предлагается альтернативный шаблон для папки Исходящие : двухэтапное сообщение. Он основан не на очереди сообщений, а на..

    React on Rails
    Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

    Что такое гибкие методологии разработки программного обеспечения
    Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...

    Ториго  — революция в игре Го
    Наш следующий вызов против ИИ и для ИИ. Сможет ли он победить людей в обновленной игре Го? Обратите внимание, что в следующей статье AI означает искусственный интеллект, а Goban  —..

    Простое развертывание моделей с помощью Mlflow — Упаковка классификатора обзоров продуктов NLP от HuggingFace
    Как сохранить свои модели машинного обучения в формате с открытым исходным кодом с помощью MLFlow, чтобы позже получить возможность легкого развертывания. Сегодня модели упаковки имеют несколько..

    Математика и интуиция - Часть 1
    У каждой математической формулы есть доказательство. Часто эти доказательства слишком сложно понять, поскольку многие из них основаны на индукции, некоторые - на очень сложных наблюдениях, а..