R中的求解函数与逆计算不匹配

vulvrdjw  于 2023-03-10  发布在  其他
关注(0)|答案(1)|浏览(121)

关于反函数似乎有很多问题,但它们不是我想要的(matrix-inverse标签中的许多结果也不是)。我试图使用一个函数来获得矩阵的逆。作为一个例子,这是我正在使用的矩阵:

#### Create Matrix ####
mat <- matrix(
  c(4,2,7,6),
  nrow=2
)
mat

如下所示:

[,1] [,2]
[1,]    4    7
[2,]    2    6

当我手工计算行列式并使用det函数时,我对逆矩阵的每个解都得到了相同的答案:

1/((4*6)-(7*2))*mat # 1/det
(1/det(mat))*mat # same

如下所示:

[,1] [,2]
[1,]  0.6 -0.7
[2,] -0.2  0.4

但是,如果我使用假定的函数,solve(mat)会给出以下解决方案:

[,1] [,2]
[1,]  0.4  0.7
[2,]  0.2  0.6

为什么结果不同?我需要使用替代函数吗?

编辑

我重新启动了R,运行了相同的代码,没有任何变化。下面是我的会话信息:

R version 4.2.1 (2022-06-23 ucrt)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 22621)

Matrix products: default

locale:
[1] LC_COLLATE=Chinese (Simplified)_China.utf8 
[2] LC_CTYPE=Chinese (Simplified)_China.utf8   
[3] LC_MONETARY=Chinese (Simplified)_China.utf8
[4] LC_NUMERIC=C                               
[5] LC_TIME=Chinese (Simplified)_China.utf8    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] compiler_4.2.1  tools_4.2.1     rstudioapi_0.14

由于某种原因,它说我安装了4.2.1,但我很确定我使用的是4.2.2,所以不确定这是否重要。运行solve(mat) %*% mat会得到以下矩阵:

[,1]         [,2]
[1,]    1 8.881784e-16
[2,]    0 1.000000e+00
n6lpvg4x

n6lpvg4x1#

我们中至少有一个人很困惑。

mat <- matrix(c(4,2,7,6),2)

正确答案

x一个一个一个一个x一个一个二个一个x一个一个三个一个

错误答案

inv3 <- mat/det(mat)
all.equal(mat %*% inv3, diag(2))
## [1] "Mean relative difference: 0.8823529"
inv3
     [,1] [,2]
[1,]  0.4  0.7
[2,]  0.2  0.6
mat %*% inv3
     [,1] [,2]
[1,]    3    7
[2,]    2    5

会话信息

R Under development (unstable) (2023-02-25 r83903)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Pop!_OS 22.04 LTS

Matrix products: default
BLAS:   /usr/local/lib/R/lib/libRblas.so 
LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/liblapack.so.3;  LAPACK version 3.10.0

locale:
 [1] LC_CTYPE=en_CA.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=en_CA.UTF-8        LC_COLLATE=en_CA.UTF-8    
 [5] LC_MONETARY=en_CA.UTF-8    LC_MESSAGES=en_CA.UTF-8   
 [7] LC_PAPER=en_CA.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_CA.UTF-8 LC_IDENTIFICATION=C       

time zone: America/Toronto
tzcode source: system (glibc)

attached base packages:
[1] stats     graphics  grDevices datasets  utils     methods   base     

loaded via a namespace (and not attached):
[1] compiler_4.3.0 bspm_0.3.10

相关问题