使用qr.solve的简单线性方程给出了很大的标记结果

时间:2015-07-13 03:45:35

标签: r mathematical-optimization

我正在试图弄清楚如何求解近似的线性方程组(即解决方案中存在错误,我希望它最小化)。

为了理解/验证过程,我想出了一个简单的例子:我给出了一堆5x + 4x ^ 2 + 3x ^ 3,答案中有0-5%的错误。

div

当我尝试使用qr.solve解决此问题时,

> a
       [,1]  [,2]    [,3]
  [1,]    1     1       1
  [2,]    2     4       8
  [3,]    3     9      27
[...]
 [98,]   98  9604  941192
 [99,]   99  9801  970299
[100,]  100 10000 1000000

> b
  [1]      12.04      48.17     130.02     269.93     505.75     838.44
  [7]    1202.04    1911.69    2590.51    3381.00    4538.80    5846.19
...
 [97] 2824722.45 2826700.98 3012558.52 2920400.25

结果完全关闭(想要5,4,3)。我确定我错过了一些明显的东西。或许我对多项式的实验本来就很糟糕? (如果是的话,为什么?)

1 个答案:

答案 0 :(得分:1)

我无法通过附加错误重现此问题:

a <- cbind(1:100, (1:100)^2, (1:100)^3)
set.seed(42)
b <- a %*% (5:3) + rnorm(100, sd = 0.1)
qr.solve(a, b)
#         [,1]
#[1,] 4.998209
#[2,] 4.000056
#[3,] 3.000000

我可以用相对误差重现它,但这并不奇怪,因为错误由第三度加数的大小决定:

a <- cbind(1:100, (1:100)^2, (1:100)^3)
set.seed(42)
b <- a %*% (5:3) * rnorm(100, mean = 1, sd = 0.1)
qr.solve(a, b)
#             [,1]
#[1,] -1686.611970
#[2,]    68.693368
#[3,]     2.481742

请注意,第三个系数与您的预期相符(在您不可重复的示例中更是如此)。