1

我是矩阵世界的新手,很抱歉这个我无法弄清楚的基本问题:

我有四个矩阵(一个未知)。

矩阵 X

x <- c(44.412, 0.238, -0.027, 93.128, 0.238, 0.427, -0.193, 0.673, 0.027, 
     -0.193, 0.094, -0.428, 93.128, 0.673, -0.428, 224.099)

X <- matrix(x, ncol = 4 )

矩阵 B:需要求解,1 X 4(列 x nrows),具有 b1、b2、b3、b4 值

矩阵 G

g <- c(33.575, 0.080, -0.006, 68.123, 0.080, 0.238, -0.033, 0.468, -0.006, 
-0.033, 0.084, -0.764, 68.123, 0.468, -0.764, 205.144)

G <- matrix(g, ncol = 4)

矩阵 A

a <- c(1, 1, 1, 1) # one this case but can be any value 
A <- matrix(a, ncol = 1)

解决方案:

B = inv(X) G A  # inv(X) is inverse of the X matrix multiplied by G and A 

我不知道如何正确解决这个问题,尤其是矩阵的逆。感谢你的帮助。

4

2 回答 2

4

我猜 Nick 和 Ben 都是老师,并且比我对做别人的功课有更大的顾忌,但通往完整解决方案的道路真的如此明显,以至于不这样做没有多大意义下一步:

B = solve(X) %*% G %*% A 
> B
             [,1]
[1,] -2.622000509
[2,]  7.566857261
[3,] 17.691911600
[4,]  2.318762273

可以通过提供单位矩阵作为第二个参数来调用 QR 求逆方法:

> qr.solve(G, diag(1,4))
                [,1]             [,2]          [,3]             [,4]
[1,]  0.098084556856 -0.0087200426695 -0.3027373205 -0.0336789016478
[2,] -0.008720042669  4.4473233701790  1.7395207242 -0.0007717410073
[3,] -0.302737320546  1.7395207241703 13.9161591761  0.1483895429511
[4,] -0.033678901648 -0.0007717410073  0.1483895430  0.0166129089935
于 2011-11-09T13:07:50.207 回答
3

一个计算更稳定的解决方案是使用qr而不是solve.

method1 <- solve(X) %*% G %*% A
method2 <- qr.coef(qr(X), G) %*% A
stopifnot(isTRUE(all.equal(method1, method2)))

请参阅 中的示例?qr

于 2011-11-09T15:24:06.400 回答