MATLAB pascal(n,1)的R等价实现:如何匹配列符号?
解决R中生成与MATLAB
pascal(n,1) 符号匹配的下三角Cholesky因子问题 要在R中得到和MATLAB pascal(4,1) 完全一致的下三角矩阵,关键是调整Cholesky分解结果的列符号——MATLAB的实现对偶数索引的列使用了负号,而R的chol默认输出正符号列。
具体步骤:
- 首先加载
pracma包(R基础库没有内置帕斯卡矩阵生成函数):library(pracma) - 生成原始下三角Cholesky因子:
L <- t(chol(pascal(4))) - 创建符号调整对角矩阵,对偶数列应用负号:
sign_adjust <- diag(rep(c(1, -1), length.out = ncol(L))) - 调整列符号得到目标矩阵:
target_matrix <- L %*% sign_adjust
运行上述代码后,target_matrix的输出将与MATLAB pascal(4,1) 完全一致:
[,1] [,2] [,3] [,4] [1,] 1 0 0 0 [2,] 1 -1 0 0 [3,] 1 -2 1 0 [4,] 1 -3 3 -1
原理说明:
Cholesky分解的下三角因子列符号并非唯一,MATLAB的pascal(n,1)选择了交替列符号(奇数列为正,偶数列为负)的规范,而R的chol函数默认输出所有列符号为正的结果。通过构造对角矩阵对偶数列取反,就能对齐MATLAB的输出格式。
内容的提问来源于stack exchange,提问作者Dylan Hettinger
相关产品推荐
相关产品推荐

