使用 qr.solve 的简单线性方程给出了非常离谱的结果
Simple linear equation using qr.solve gives very off the mark results
我想弄清楚如何求解近似的线性方程组(即解中有错误,我希望它最小化)。
为了understand/verify这个过程,我想出了一个简单的例子:我给了一堆5x + 4x^2 + 3x^3,答案有0-5%的误差。
> 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
当我尝试使用 qr.solve、
解决这个问题时
> qr.solve(a,b)
[1] 85.2896286 -0.8924785 3.0482766
结果完全不对(想要 5、4、3)。我确定我遗漏了一些明显的东西。或者也许我的多项式实验本身就不好? (如果是,为什么?)
我无法通过附加错误重现此问题:
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
请注意,第三个系数与您的预期有关(在您不可重现的示例中更是如此)。
我想弄清楚如何求解近似的线性方程组(即解中有错误,我希望它最小化)。
为了understand/verify这个过程,我想出了一个简单的例子:我给了一堆5x + 4x^2 + 3x^3,答案有0-5%的误差。
> 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
当我尝试使用 qr.solve、
解决这个问题时> qr.solve(a,b)
[1] 85.2896286 -0.8924785 3.0482766
结果完全不对(想要 5、4、3)。我确定我遗漏了一些明显的东西。或者也许我的多项式实验本身就不好? (如果是,为什么?)
我无法通过附加错误重现此问题:
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
请注意,第三个系数与您的预期有关(在您不可重现的示例中更是如此)。