gpt4 book ai didi

r - 求解一个变量的非线性方程,但以求和形式编写,在 "R"中

转载 作者:行者123 更新时间:2023-12-03 04:18:06 25 4
gpt4 key购买 nike

This is the Non-Linear Equation in "mu" which I want to solve numerically using R. All of the paired (x, y) are known. So the only variable is "mu".

这是“mu”中的非线性方程,我想使用 R 对其进行数值求解。所有配对的 (x, y) 都是已知的。所以唯一的变量是“mu”

现在,我已经用 R 编写了该函数。然后,我尝试使用“rootSolve”包来获取根。但它给出了一个错误。

这是我的函数代码:

f = function(k){
sum(((2*exp(-x) - 1)*(2*exp(-y)- 1))/
(1 + k*(2*exp(-x) - 1)*(2*exp(-y)- 1)))
}

这是从“rootSolve”包运行“uniroot.all”后出现的错误:

> library(rootSolve)
> uniroot.all(f, interval = c(-1, 1))
numeric(0)
Warning message:
In k * (2 * exp(-x) - 1) :
longer object length is not a multiple of shorter object length

此外,我正在区间 (-1, 1) 中搜索我的根。

有人可以帮忙吗?我认为,我定义函数的方式是错误的。因此出现了这个错误。

谁能确认我定义图中函数的方式是否正确?

提前谢谢您!

让我添加更多内容:

我定义函数的方式(这种方式很可能是错误的)并给出我的数据 (x, y) ,我有f(-1) < f(1) and also f(-1) * f(1) < 0 。这些条件都满足。

另一个问题让我质疑我编写函数的方式:

我无法在 R 中运行曲线函数。例如,curve(f, from = -1, to = 1)但是,如果我绘制 Vectorize(f) ,然后 curve功能有效。

有人可以帮我纠正定义函数的方式吗?

非常感谢!

最佳答案

似乎 uniroot.all 想要一个向量化函数。我尝试使用它并得到与您相同的错误。我在 uniroot.all 的文档中找不到任何关于此的内容。

我已经尝试过包nleqslv并且可以获得解决方案。我将你的函数重写如下(我认为你在设置方程时犯了一些错误):

f <- function(k){
A <- 2*exp(-x)-1
B <- 2*exp(-y)-1
sum((A*B)/(1+k*A*B))
}

并使用这些数据运行该函数

set.seed(13)
x <- runif(10)*10
y <- runif(10)*5

解决你的函数如下:

library(nleqslv)
nleqslv(0,f)

输出如下:

$x
[1] 1.42992

$fvec
[1] 2.300633e-09

$termcd
[1] 1

$message
[1] "Function criterion near zero"

$scalex
[1] 1

$nfcnt
[1] 7

$njcnt
[1] 1

$iter
[1] 7

这可以用割线法求解。如果您想尝试其他方法,可以使用 testnslv 来探索。

** 添加 **

函数uniroot.all将在我的示例中工作,只要你这样做:

fvec <- Vectorize(f)

并将间隔更改为 c(-1,1.7)

关于r - 求解一个变量的非线性方程,但以求和形式编写,在 "R"中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44438646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com