用函数计算多项式
Evaluating polynomial with function
我正在尝试计算多项式 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))
关于如何正确输入它有什么想法吗?
这里有两种编写函数的方法。
- 带有
sapply
循环。使代码更具可读性,有时速度更快。
- 使用标准
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)
我正在尝试计算多项式 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))
关于如何正确输入它有什么想法吗?
这里有两种编写函数的方法。
- 带有
sapply
循环。使代码更具可读性,有时速度更快。 - 使用标准
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)