我正在尝试将一些MATLAB代码转换为R. MATLAB代码使用fzero(f,x0)
来查找x0
附近的根,但我不确定RI中的哪个命令可以用来做同样的事情。我知道R中有uniroot(f, c(a,b))
,但这需要在a
和b
之间的时间间隔内进行搜索。有谁知道R中是否有与MATLAB fzero(f,x0)
类似的东西?
谢谢!
编辑:我在R包fzero
中找到pracma
,会尝试并报告我的结果。
答案 0 :(得分:0)
fzero
包的 pracma
为我工作
答案 1 :(得分:0)
我知道有答案,但它与示例不同。
MatLab中的“fzero”(是的,我老了)具有可以将参数传递给用户自定义函数的功能。
例如,请考虑以下内容(来自MatLab中的fzero帮助):
myfun = @(x,c) cos(c*x); % The parameterized function.
c = 2; % The parameter.
X = fzero(@(x) myfun(x,c),0.1)
(旁白)我喜欢MatLab帮助文档。我认为这是价值主张的一个主要部分。它非常容易学习,并且是为自学而建的。
在这个规范的MatLab(或MATLAB)代码中,在找到附近的根之前,将参数“c”传递给“myfun”。 R中的规范答案必须至少做到这一点。 如何在R?
中获得相应的效果当然我们需要“pracma”库,以便我们拥有“fzero”功能。
#library with the fzero function
library(pracma)
这是声明的函数。请注意,“t”不是输入。这使得free variable没有本地范围。
#make a user-defined function
myfun <- function(x) {
temp <- t - (exp(-0.5*x)/(exp(0)+exp(-0.5*x)));
return(temp);
}
复制是完全不公平的,所以我做了一个新的。
以下是我如何找到附近值和函数的“目标”。
#y-values (weights) of interest
target <- c(0.999,0.99,0.95,0.9,0.8,0.75,0.66,0.5,
0.33,0.25,0.20,0.1,0.05,0.01,0.001)
#initialize for loop
xlist <- numeric()
#loop
for (i in 1:length(target)){
y <- target[i]
temp <- fzero(myfun,3)
xlist[i] <- temp$x
}
然后我可以绘制它并评估性能。
#plot it
plot(x=xlist,
y=target,
xlab = "AIC value",
ylab = "max Akaike weight",
type="p")
est <- smooth.spline(xlist,target)
x2 <- seq(from=min(xlist),to=max(xlist),length.out=100)
lines(x2,predict(est,x2)$y,col="green")
grid()
检查显示它完全符合要求。