r - R矩阵求逆的不一致乘积
问题描述
我有一个emat
通过对向量的外积求和生成的矩阵。它应该是对称的和正定的。我发现
solve(emat) %*% solve(emat)
产生不同的结果
bmat <- solve(emat)
bmat %*% t(bmat)
事实上,两者有很大的不同(打印输出emat
被 R 缩短)。
> emat
V1 V2 V3
1 170.2939 15.77391 110.75499
2 15.7739 444.57862 8.87082
3 110.7550 8.87082 72.03669
> solve(emat) %*% solve(emat) - bmat %*% t(bmat)
1 2 3
V1 -1024 48.00000 0
V2 8 -0.21875 0
V3 2048 -72.00000 0
但事实并非如此。
这是一个错误吗?还是精度问题?还是与 R 如何处理存储在内存中的矩阵有关?
解决方案
问题可能来自您的 emat 矩阵。我试过了,它对我有用。
emat <- matrix(c(2,-1,0,-1,2,-1,0,-1,2),3,3)
# check your matrix to see if it is positive definite matrix or not
library(matrixcalc)
is.positive.definite(emat)
bmat <- solve(emat)
# the result of the following is zero matrix
solve(emat) %*% solve(emat) - bmat %*% t(bmat)
如果您的矩阵不是对称的(因此不是正定的),则结果不会为零,因为 emat 不等于 t(emat)。
推荐阅读
- reactjs - ReactJS Mapbox-gl 无效类型:“容器”必须是字符串或 HTMLElement
- php - 运行 composer --no-dev 时出现望远镜错误
- java - Java 扫描器分隔符正则表达式
- apache-spark - 由于 PySpark 时间戳,将 Spark 数据帧保存到 Azure Synapse 时出现问题
- java - 保存父对象时,防止休眠自动删除@Transient子对象
- amazon-web-services - 如何允许 kubernetes 中的单个 serviceaccount 使用来自不同集群的角色?
- tensorflow - 在多个音频帧上训练 CNN
- vim - 是否可以将特定标签文件添加到 vim 中的特定窗口/缓冲区?
- django - 有没有办法在开发过程中在移动设备上加载 django 网站?
- azure-api-management - API Management + App Gateway 用于托管面向 Internet 的 API 的用例