求解方程R的函数

时间:2013-03-25 16:36:52

标签: r

我正在努力解决

 $\sum_{j=1}^{180} x^{a_j} = 1$

enter image description here

我创建了两个函数:

f1 <- function(x){c(rep(x,180))}
f2 <- function(x){sum(f1(x)^vec) - 1}

其中vec是我的$ a_j $ vector。

Uniroot不起作用。我应该使用哪种功能?

PS:有更好的语法吗?

由于

2 个答案:

答案 0 :(得分:3)

为什么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

答案 1 :(得分:2)

您可以使用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)