如何求解R中的非线性方程

时间:2016-02-15 11:43:22

标签: r

如何求解方程,y中的y = x ^ a,以便我们得到' a'的优化值。 这里y和x是(n×1)矩阵和' a'是未知参数。 如何在R ??

中解决这个问题

1 个答案:

答案 0 :(得分:2)

使用数值非线性最小化函数nlm()非常容易。您定义了应该最小化的损失函数。在你的例子中,例如

f <- function(a) mean((y - x^a)^2)

这是一个简单的平方和损失函数。您必须确定yx^a之间的差异,否则最小值为-Inf

现在您可以使用nlm()找到最低要求:

x <- runif(1000)
y <- x^(0.8) + rnorm(1000,0,0.1)

nlm(f, p=1)

给出:

$minimum
[1] 0.01004981

$estimate
[1] 0.8033611

$gradient
[1] 6.322894e-08

$code
[1] 1

$iterations
[1] 6

所以这个估计正是你的想法。

其他可能性包括optimize()用于一维拟合,但为此您必须指定搜索的间隔:

> optimize(f, interval =c(-100,100))
$minimum
[1] 0.8033645

$objective
[1] 0.01004981

更通用的方法是使用允许您最小化多个参数的函数optim()

> optim( 0, f)
$par
[1] 0.8035156

$value
[1] 0.01004981
...

请注意,这会导致警告。此功能未针对一维优化进行优化。您可以指定method = "Brent,但是您需要设置下限和上限。

R中有很多可能来做到这一点:)