【问题标题】:Evaluating polynomial with function用函数评估多项式
【发布时间】:2018-11-13 12:04:32
【问题描述】:

我正在尝试评估多项式 P(x):

但是我不认为我在我的函数中正确输入了多项式本身。 函数代码:

directpoly1 <- function(x, coef, seqcoef = seq(coef) - 1) {
  sum(coef*x^seqcoef)
}
directpoly <- function(x, coef) {
  seqcoef <- seq(coef) - 1
  sapply(x, directpoly1, coef, seqcoef)
}

函数使用代码:

directpoly(x=seq(-10,10, length=5000000), rep(c(2,-1),20))

关于如何正确输入的任何想法?

【问题讨论】:

  • 试试seqcoef = seq_along(coef)。这意味着您需要在向量coef 中包含零系数。
  • 谢谢!你能看看我是否正确使用了这个函数,所以当用我的函数评估 P(x) 时,P(x) 是否正确输入?

标签: r polynomials


【解决方案1】:

这里有两种编写函数的方法。

  1. 带有sapply 循环。使代码更具可读性,速度更快。
  2. 使用标准的for 循环。

无需在要使用x 值调用的函数之外编写单独的函数,我已将该函数放在主函数的主体中。
然后用较小的输入向量测试这两个函数。如您所见,for 循环函数更快。

directpoly <- function(x, n = 39, coef = NULL){
  f <- function(y) sum(coef * y^seqcoef)
  if(all(is.null(coef))) coef <- rep(c(2, -1), length.out = n + 1)
  seqcoef <- rev(seq_along(coef) - 1)
  sapply(x, f)
}

directpoly2 <- function(x, n = 39, coef = NULL){
  f <- function(y) sum(coef * y^seqcoef)
  if(all(is.null(coef))) coef <- rep(c(2, -1), length.out = n + 1)
  seqcoef <- rev(seq_along(coef) - 1)
  y <- numeric(length(x))
  for(i in seq_along(y))
    y[i] <- f(x[i])
  y
}

library(microbenchmark)
library(ggplot2)

x <- seq(-10, 10, length = 50000)
mb <- microbenchmark(
  Sapply = directpoly(x),
  Forloop = directpoly2(x)
)

autoplot(mb)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    相关资源
    最近更新 更多