我正在尝试解决
$\sum_{j=1}^{180} x^{a_j} = 1$
我创建了两个函数:
f1 <- function(x){c(rep(x,180))}
f2 <- function(x){sum(f1(x)^vec) - 1}
vec
我的 a_j
向量在哪里。
uniroot
不起作用。我应该使用哪个功能?
有更好的语法吗?
我正在尝试解决
$\sum_{j=1}^{180} x^{a_j} = 1$
我创建了两个函数:
f1 <- function(x){c(rep(x,180))}
f2 <- function(x){sum(f1(x)^vec) - 1}
vec
我的 a_j
向量在哪里。
uniroot
不起作用。我应该使用哪个功能?
有更好的语法吗?
为什么uniroot
实际上不起作用?只要你正确定义你的函数和寻找它的间隔应该工作:
aj <- c(-4,-5,-3,-4,-2,-3,-1,-2,-7,-6,-5,-8,-7,-6,-6,-7,-5,-6,
-4,-5,-3,-4,-9,-8,-7,-10,-9,-8,-1,-2,rep(-1,150))
f <- function(x,vec){sum(x^vec)-1}
uniroot(f, interval=c(-100,100), vec=aj)
$root
[1] -0.518658
$f.root
[1] -0.009276057
$iter
[1] 21
$estim.prec
[1] 6.103516e-05
您可以使用polyroot
,例如
polyroot(c(-1,rep(1,180)))
这里
p(x) = -1 + 1 * x + … + 1 * x^180
编辑使用你的向量aj
目前尚不清楚你的向量是什么vec
,我想你想要这样的东西:
polyroot(c(-1,vec))
哪里 vec
vec = (a1,a2,..............,a180)
OP澄清后编辑:
OP希望找到具有负指数的多项式的根。解决方案是通过可以应用的指数的最大值来分解polyroot
。
vec <- c(-4,-5,-3,-4,-2,-3,-1,-2,-7,-6,-5,-8,-7,-6,-6,-7,-5,-6,
-4,-5,-3,-4,-9,-8,-7,-10,-9,-8,-1,-2,rep(-1,150))
ma <- max(abs(vec))
vec <- sort(ma+vec)
polyroot(as.data.frame(table(vec))$Freq)