首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中联立非线性方程组的根值

R中联立非线性方程组的根值
EN

Stack Overflow用户
提问于 2016-05-13 13:16:16
回答 3查看 989关注 0票数 1

我一直在编写这个问题的代码:https://sg.answers.yahoo.com/question/index?qid=20110127015240AA9RjyZ

我相信在某个地方有一个R函数来求解下列方程的根值:

代码语言:javascript
复制
(x+3)^2 + (y-50)^2 = 1681
(x-11)^2 + (y+2)^2 = 169
(x-13)^2 + (y-34)^2 = 625

我试过使用“解”函数,但它们只适用于线性方程组(?)

也试过“nls”

代码语言:javascript
复制
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中的根值?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-13 13:29:47

nls不适用于零剩余数据--请参见此处提到的?nls。nlmrt包中的nlxb在输入参数方面与nls很相似,并且确实支持零残留数据。从问题中使用dt只需将nls替换为nlxb

代码语言:javascript
复制
library(nlmrt)
nlxb(c~(x-a)^2 + (y-b)^2, data = dt, start = list(x = 1, y = 1))

给予:

代码语言:javascript
复制
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  
票数 3
EN

Stack Overflow用户

发布于 2016-05-13 13:48:19

不能总是为两个方程求解三个方程,variables.You可以为两个变量求解两个方程,并检验该解是否满足第三个方程。

使用包nleqslv如下所示。

代码语言:javascript
复制
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)

它提供了以下输出:

代码语言:javascript
复制
>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

票数 1
EN

Stack Overflow用户

发布于 2016-05-13 13:27:49

只要浏览一下rootSolve包,您就可以完成:

https://cran.r-project.org/web/packages/rootSolve/vignettes/rootSolve.pdf

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37211070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档