在R中解决函数问题

3

I have following function:

2.3366*x^1+(-3.2684)*x^2+3.6513*x^3+(-2.2608)*x^5+2.1501*x^13+(-2.7412)*x^21+1.8876*x^34 = 0.8232711

我需要解决x。
在MATLAB中,我会使用以下内容:
fsolve(function1=15/18.22,x)

我该如何在R中完成这项任务?我可以使用solve或uniroot还是其他方法?


尝试使用 optim 函数。 - Fernando
1
fsolve {pracma} - 解决非线性方程组 - zx8754
2个回答

8
使用 polyroot 命令:
xx = c(-0.8232711,2.3366,-3.2684,3.6513,0,-2.2608,rep(0,13-6),
    2.1501,rep(0,21-14),-2.7412,rep(0,34-22),1.8876)
polyroot(xx)

round(polyroot(xx),2)
 [1]  0.58+0.00i  0.12+0.63i  0.12-0.63i  0.83-0.21i  0.21+1.02i -0.97+0.35i -0.18-0.99i  0.97-0.06i
 [9]  0.60+0.81i -1.03+0.00i  0.21-1.02i  0.83+0.21i -0.18+0.99i -1.03-0.23i  0.05-1.02i  0.97+0.06i
[17]  0.05+1.02i -1.03+0.23i  0.60-0.81i  0.75+0.63i -0.58+0.85i -0.76-0.74i  0.75-0.63i  0.52+0.88i
[25] -0.87+0.60i -0.58-0.85i  0.95-0.48i -0.40+1.01i -0.40-1.01i  0.95+0.48i -0.76+0.74i -0.97-0.35i
[33]  0.52-0.88i -0.87-0.60i

您可以使用以下方法检查您是否使用了正确的多项式:
library(polynom)
as.polynomial(xx)
-0.8232711 + 2.3366*x - 3.2684*x^2 + 3.6513*x^3 - 2.2608*x^5 + 2.1501*x^13 - 2.7412*x^21 +  
1.8876*x^34 

2
谢谢回答。我自己解决了。f1<-function(z) {(2.3366*z^1+(-3.2684)z^2+3.6513z^3+(-2.2608)z^5+2.1501z^13+(-2.7412)z^21+1.8876z^34)-0.8232711} Z <- uniroot(f1,c(0,1)) Z1 <-Z$root Z1 - user3190577
2
@user3190577 应该将您的评论放在答案中并接受它。在stackoverflow上回答自己的问题是受鼓励的。 - agstudy
2
请注意,agstudy的解决方案提供了所有根,而您的答案仅为该函数提供单个根。 - Dason
如果你只想要0到1之间的实根,可以使用 p <- polyroot(...); Re(p[abs(Im(p))<1e-8 & 0<Re(p) & Re(p) < 1]) - Ben Bolker

2
感谢您的回答。我自己弄清楚了。
f1<-function(z) {(2.3366*z^1+(-3.2684)*z^2+3.6513*z^3+(-2.2608)*z^5+2.1501*z^13+(-2.7412)*z^21+1.8876*z^34)-0.8232711}
Z <- uniroot(f1,c(0,1))
Z1 <-Z$root
Z1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接