求解R中的超越方程

求解R中的超越方程,r,R,在R中有解超越方程的函数吗 例如,我想解下面的方程 x = 1/tan(x) 有什么建议吗?我知道解有多个根,所以我还希望能够恢复给定区间的所有答案您可以使用uniroot查找给定范围内任何一维方程的根。然而,获得多个根一般来说似乎是一个非常困难的问题(例如,有关一些背景信息,请参阅数字配方的相关章节:第9章)。当存在多个根时,很难预测找到哪个根。如果你对这个问题有足够的了解,可以将空间细分为零根或一根的子区域,或者如果你愿意将它划分为许多区域,并希望找到所有的根,那么你可以做到。否则我期待其

在R中有解超越方程的函数吗

例如,我想解下面的方程

x = 1/tan(x)

有什么建议吗?我知道解有多个根,所以我还希望能够恢复给定区间的所有答案

您可以使用
uniroot
查找给定范围内任何一维方程的根。然而,获得多个根一般来说似乎是一个非常困难的问题(例如,有关一些背景信息,请参阅数字配方的相关章节:第9章)。当存在多个根时,很难预测找到哪个根。如果你对这个问题有足够的了解,可以将空间细分为零根或一根的子区域,或者如果你愿意将它划分为许多区域,并希望找到所有的根,那么你可以做到。否则我期待其他人的解决方案

在这种特殊情况下,如@liuminzhao的解决方案所示,
n*pi
(n+1)*pi

y = function(x) x-1/tan(x)
curve(y,xlim=c(-10,10),n=501,ylim=c(-5,5))
abline(v=(-3:3)*pi,col="gray")
abline(h=0,col=2)

这是一个小技巧,但它会找到方程的根(前提是它们不太接近pi的倍数:如果您愿意,您可以减少
eps
)。然而,如果你想解一个不同的多根超越方程,你可能需要另一个(专门的)策略

f <- function(n,eps=1e-6) uniroot(y,c(n*pi+eps,(n+1)*pi-eps))$root
sapply(0:3,f)
## [1] 0.8603337 3.4256204 6.4372755 9.5293334

f我将绘制函数曲线,并查看它的外观:

R > y = function(x) { x - 1/tan(x) }
R > curve(y, xlim = c(-10, 10))
R > abline(h = 0, color = 'red')

然后我看到在0和3之间有一个根,我会使用
uniroot
来获得我想要的根:

R > uniroot(y, interval = c(0, 3))
$root
[1] 0.8603

$f.root
[1] 6.612e-06

$iter
[1] 7

$estim.prec
[1] 6.104e-05