gpt4 book ai didi

r - 如何在R中绘制用户定义的函数?

转载 作者:行者123 更新时间:2023-12-04 08:09:14 26 4
gpt4 key购买 nike

我应该为第二种斯特林数写一个函数,由公式给出:

enter image description here

为此,我在R中编写了以下函数:

stirling <- function(n, k)
{
sum = 0
for (i in 0:k)
{
sum = sum + (-1)^(k - i) * choose(k, i) * i^n
}
sum = sum / factorial(k)
return(sum)
}

问题的下一部分是“为n = 20,k = 1,2,...,10创建一个图”。我做了一些研究,我认为 curveplot方法可能对我有帮助。但是,我猜想当 y的形式为 f(x)(即单个参数)时会使用这些方法。但是在这里,我的函数 n中有两个参数( kstirling),因此我不确定如何处理此问题。

另外,我尝试将 k(0,1,2 ...,10)的值转换为向量,然后将它们传递给 stirling,但是 stirling不会接受向量作为输入。我不确定如何修改代码以使 stirling接受向量。

有什么建议么?

最佳答案

向量化

如注释中所指出的,您可以vectorize来做到这一点:

Vectorize creates a function wrapper that vectorizes the action of its argument FUN. Vectorize(FUN, vectorize.args = arg.names, SIMPLIFY = TRUE,
USE.NAMES = TRUE)


(vstirling <- Vectorize(stirling))
# function (n, k)
# {
# args <- lapply(as.list(match.call())[-1L], eval, parent.frame())
# names <- if (is.null(names(args)))
# character(length(args))
# else names(args)
# dovec <- names %in% vectorize.args
# do.call("mapply", c(FUN = FUN, args[dovec], MoreArgs = list(args[!dovec]),
# SIMPLIFY = SIMPLIFY, USE.NAMES = USE.NAMES))
# }

因此 vstirling()stirling()的向量化版本。
vstirling(20, 1:10)
# [1] 1.000000e+00 5.242870e+05 5.806064e+08 4.523212e+10 7.492061e+11 4.306079e+12 1.114355e+13 1.517093e+13
# [9] 1.201128e+13 5.917585e+12

现在剩下的就是创建一个绘图:
plot(x = 1:10, y = vstirling(20, 1:10), ylab = "S(20, x)", xlab = "x")

关于r - 如何在R中绘制用户定义的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39303069/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com