r - 用函数评估多项式
问题描述
但是我不认为我在我的函数中正确输入了多项式本身。功能代码:
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)
推荐阅读
- python - 有没有办法为 pyqt5 滚动条的单步设置浮动?
- sql - 无论如何要检查一个字段是否存在于不同的表中?
- ruby-on-rails - Rails 从数据库中转换变量名称和值
- php - 如果 URL 包含资源 ID 的字母数字,为什么资源路由仍然有效?拉拉维尔
- python - Python, FastAPI : 多线程/处理 - 使用 API 端点启动/停止进程
- android-studio - 单击 ImageButton 时如何将图像添加/插入数据库
- php - Laravel 在与 Git 的共享主机中未显示图标
- python-3.x - 使用 Seaborn 的箱线图融合并显示多个类
- python - 我无法通过 USB 连接树莓派和传感器
- python-3.x - 无法执行“gcc”:在 IBM i 7.3 上安装 apache 超集时没有这样的文件或目录