我一直在编写这个问题的代码:https://sg.answers.yahoo.com/question/index?qid=20110127015240AA9RjyZ
我相信在某个地方有一个R函数来求解下列方程的根值:
(x+3)^2 + (y-50)^2 = 1681
(x-11)^2 + (y+2)^2 = 169
(x-13)^2 + (y-34)^2 = 625我试过使用“解”函数,但它们只适用于线性方程组(?)
也试过“nls”
dt = data.frame(a=c(-3,11,13), b = c(50, -2, 34), c = c(1681,169,625))
nls(c~(x-a)^2 + (y-b)^2, data = dt, start = list(x = 1, y = 1))但一直都有错误。(是的,我已经尝试过更改最大迭代)
nls(c ~ (x )^2+ (y - b)^2,data = dt,start = list(x =1))中的错误(x= 1,迭代次数超过最大值50
如何求解R中的根值?
发布于 2016-05-13 13:29:47
nls不适用于零剩余数据--请参见此处提到的?nls。nlmrt包中的nlxb在输入参数方面与nls很相似,并且确实支持零残留数据。从问题中使用dt只需将nls替换为nlxb
library(nlmrt)
nlxb(c~(x-a)^2 + (y-b)^2, data = dt, start = list(x = 1, y = 1))给予:
nlmrt class object: x
residual sumsquares = 2.6535e-20 on 3 observations
after 5 Jacobian and 6 function evaluations
name coeff SE tstat pval gradient JSingval
x 6 7.21e-12 8.322e+11 7.649e-13 -1.594e-09 96.93
y 10 1.864e-12 5.366e+12 1.186e-13 -1.05e-08 22.45 发布于 2016-05-13 13:48:19
不能总是为两个方程求解三个方程,variables.You可以为两个变量求解两个方程,并检验该解是否满足第三个方程。
使用包nleqslv如下所示。
library(nleqslv)
f1 <- function(z) {
f <- numeric(2)
x <- z[1]
y <- z[2]
f[1] <- (x+3)^2 + (y-50)^2 - 1681
f[2] <- (x-11)^2 + (y+2)^2 - 169
f
}
f2 <- function(z) {
x <- z[1]
y <- z[2]
(x-13)^2 + (y-34)^2 - 625
}
zstart <- c(0,0)
z1 <- nleqslv(zstart,f1)
z1
f2(z1$x)它提供了以下输出:
>z1
$x
[1] 6 10
$fvec
[1] 7.779818e-09 7.779505e-09
$termcd
[1] 1
$message
[1] "Function criterion near zero"
$scalex
[1] 1 1
$nfcnt
[1] 9
$njcnt
[1] 1
$iter
[1] 9
>f2(z1$x)
[1] 5.919242e-08因此,我们找到了一个解,这个解是从向量z$x中得到的。在函数f2中插入z$x也几乎为零。
所以我们找到了解决办法。
您也可以尝试包BB。
发布于 2016-05-13 13:27:49
只要浏览一下rootSolve包,您就可以完成:
https://cran.r-project.org/web/packages/rootSolve/vignettes/rootSolve.pdf
https://stackoverflow.com/questions/37211070
复制相似问题