我想用給定的系數繪制高次多項式函式。我創建該函式f_erzeuger()是為了撰寫一個多項式函式f,以便能夠使用 ggplot2 和stat_function(fun = f). coef是多項式函式的系數向量。
f_erzeuger <- function(coef) {
f <- function(x) {
x_vec <- c(1, x, x^2, x^3, x^4, x^5, x^6, x^7, x^8, x^9, x^10)
d <- length(coef) - 1 # degree of the polynomial
sum(coef * x_vec[1:(d 1)])
}
f
}
但是 ggplot2 無法繪制此曲線,可能是因為該函式實際上并未計算函式項。
f <- f_erzeuger(c(4, 5, 2))
ggplot(data.frame(x = c(-50, 50)), aes(x = x))
stat_function(fun = f, color = "blue")
stat_function(fun = function(x){3 5*x 2*x^2}, color = "red")
f 即使它應該是多項式,也顯示為一條恒定線。

uj5u.com熱心網友回復:
問題是你的函式沒有向量化。運行?stat_function并查看以下檔案fun:
fun: 使用的功能。1) 基本或 rlang 公式語法中的匿名函式(請參閱rlang::as_function())或 2) 參考函式的參考名稱或字符名稱;參見示例。必須矢量化。
為了使函式矢量化,我們需要確保,例如,f(c(0, 1))將回傳c(f(0), f(1))。請注意,您的函式中的一個問題是您定義的行x_vec = c(1, x, ...)。如果x是一個包含多個元素的向量,這將不起作用。
有很多方法可以矢量化您的函式。我將使用 tidyverse(主要是purrr::map())來做到這一點。
f_erzeuger = function(coef) {
function(xvals) {
d = length(coef)
map_dbl(xvals, function(x) {
x_vec = x ^ (0:(d - 1))
sum(coef * x_vec)
})
}
}
對此功能所做的更改:
- 最重要的是,該函式現在已矢量化。
x_vec我們可以利用^R 中的矢量化(因此x^(0:2)與 相同c(1, x, x^2))這一事實,而不是明確定義為 10階。- 我們可以直接在內部回傳函式,
f_erzeuger()而不是定義f然后回傳它。
現在事情將按預期作業:
f <- f_erzeuger(c(4, 5, 2))
ggplot(data.frame(x = c(-50, 50)), aes(x = x))
stat_function(fun = f, color = "blue")
stat_function(fun = function(x){3 5*x 2*x^2}, color = "red")

uj5u.com熱心網友回復:
試試curve。
f <- f_erzeuger(c(4, 5, 2))
curve(Vectorize(f)(x), -50, 50, col='#c55d0d')

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/403329.html
標籤:
上一篇:在每個方面將軸日期擴展到整月
下一篇:將箱線圖分組在一起
