柯列斯基分解的半正定矩阵的问题

39视图(30天)
大家好。我需要执行的柯列斯基分解半正定矩阵M = R或(M)。通常的胆固醇函数不为我工作,因为它仅适用于正定矩阵。
(柯列斯基分解代码删除。)
我还发现下面的代码,执行另一个矩阵分解,而是提供R矩阵在前款规定的,它让两个矩阵M = 低密度脂蛋白”。如果有人可以告诉我如何适应这个函数返回矩阵R L和D我将非常感激。
函数[L, DMC、P、D] = modchol_ldlt(一个δ)
% modchol_ldlt修改基于低密度脂蛋白的柯列斯基算法的分解。
% (L D P D0) = modchol_ldlt(一个δ)计算一个修改
%柯列斯基分解P * (+ E) * P = L * D * L ',
% P置换矩阵,L是单位下三角,
% D是块对角和正定1×1和2×2
%对角块。因此+ E是对称正定,但E
%没有明确计算。也就是这样一块对角D0返回
% P * * P = L * D0 * L。如果一个足够正定
% E = 0和D = D0。
% D算法集的最小特征值的宽容
%δ,它默认为sqrt (eps) *规范(A,“来回”)。
%的LDL分解计算使用对称形式的车
% Ashcraft提出的旋转,格兰姆斯和刘易斯。
%的参考:
% s h . Cheng和n·j·海厄姆。修改后的柯列斯基算法
%对称无限分解。暹罗j .矩阵肛门。达成。
% 19(4):1097 - 1110年,1998年。doi: 10.1137 / S0895479896302898,
程%作者:鲍比和尼克·海厄姆,1996;修订后的2015人。
如果~ ishermitian (A),错误(必须提供对称矩阵。),结束
如果输入参数个数< 2δ= sqrt (eps) *规范(,“摇来摇去”);结束
n = max(大小(A));
(L D p) =低密度脂蛋白(A,“向量”);
DMC =眼(n);
%修改后的柯列斯基扰动。
k = 1;
k < = n
如果k = = n | | D (k, k + 1) = = 0% 1×1块
如果D (k, k) < =δ
DMC (k, k) =三角洲;
其他的
DMC (k, k) = D (k, k);
结束
k = k + 1;
其他的% 2×2块
E = D (k, k + 1, k, k + 1);
[U, T] = eig (E);
2 = 1:2
如果T(2, 2) < =δ
T(2, 2) =三角洲;
结束
结束
temp = U * T *”;
DMC (k, k + 1, k: k + 1) =(温度+临时')/ 2;%保证对称。
k = k + 2;
结束
结束
如果nargout > = 3, P =眼睛(n);P = P (P:);结束
唯一的想法,我要做这自己是添加一个小值的对角矩阵M,然后使用胆固醇。我不喜欢这个,因为我不认为这很科学,我不知道如何改变结果,如果有人可以提供不同的选择我的问题涉及胆固醇,而不是添加一个微分价值对角线,我也会感激。
感谢你的阅读。
6个评论

登录置评。

答案(1)

布鲁诺陈德良
布鲁诺陈德良 2019年8月27日
编辑:布鲁诺陈德良 2019年8月28日
M =低密度脂蛋白”。如果有人可以告诉我如何适应这个函数返回矩阵R L和D我将非常感激。
不是简单的
R = L * sqrtm (D)
% M = R * R ' = L * D * L '
D 是1 2 x1和x2块对角积极建设,不是吗?
编辑 这是这个想法的代码
%生成对称但几乎积极
一个= randn (10);
一个= *”;
艾敏= min (eig (A));
= - 1.01 * emin *眼(大小(A))
%这将返回国旗R > 0,不完整的胆固醇分解
[R,国旗]=胆固醇(A)
%叫程和n·j·海厄姆近似
[L D P] = modchol_ldlt(一个);% https://github.com/higham/modified-cholesky
%计算“sqrtD D的柯列斯基(√)
n =大小(1);
d0 = D (1: n + 1:结束);%对角
d1 = D (2: n + 1:结束);%对角线
sqrtD =诊断接头(√d0);
我找= (d1);
j =我+(张)* n;%的线性指数分指数(我)
j - 1 = j + 1;% (i + 1,我)
k = j - 1 + n;%(我+ 1,+ 1)
sqrtD (j - 1) = D (j - 1) / sqrtD (j);
sqrtD (k =√(D (k) - D (j - 1)。^ 2. / D (j));%你可能双重保护√max (…, 0))
R = P ' * L * sqrtD;% L * sqrtD三角形低
apo = R * R '
%检查apo很接近
规范(Apos-A“摇来摇去”)/规范(,“摇来摇去”)
2的评论
布鲁诺陈德良
布鲁诺陈德良 2019年8月28日
编辑:布鲁诺陈德良 2019年8月28日
这里的目的是为了找到一个矩阵的spd 关闭 原来的矩阵。
有很多矩阵分解不是唯一的,EIG起动器。
我喜欢 程&海厄姆 近似,它似乎是一个不错的和快速的方法纠正社民党。

登录置评。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!