2013-03-25 89 views
0

我试图解决函数解方程[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 $向量。

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

PS:有更好的语法吗?

感谢

+0

请编辑您的问题,以保持与答案的一致性。 – agstudy 2013-03-26 11:56:02

回答

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 
+0

那很简单。谢谢。 – user1627466 2013-03-26 12:47:43

+0

我刚刚意识到有一个解决方案之外的区间c(-100,100),但我似乎无法得到它与uniroot,因为“f()值在终点不符号相反” – user1627466 2013-03-26 13:36:18

+0

这就是我的意思“只要你正确定义了寻找的时间间隔”。我只用c(-100,100)作为例子。如果有几种解决方案,则不会阻止您以不同的时间间隔多次运行该功能。 – plannapus 2013-03-26 13:38:11

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希望找到负指数polynome的根。解决方法是将指数的最大值因式分解以适用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) 
+0

但是,如果他实际上有一堆'a_j'指数,他必须列出它们。他的'f1'功能与他发布的图片不一致。 – 2013-03-25 17:13:00

+0

polyroot(c(-1,vec))不能解决我的问题。我已经用vec = 2试过了,我得到0.5而不是1. vec是无序指数的列表 – user1627466 2013-03-26 10:32:03

+0

这根本就不是我想要的。在这个例子中,我想解决-1 + x^2 = 0 – user1627466 2013-03-26 10:48:43