当前位置: 首页 > 知识库问答 >
问题:

利用LDL分解更新cholrank1

苏乐
2023-03-14

我有关于对称正定(SPD)矩阵的cholrank1更新程序(维基百科)。

function [L] = cholupdate(L,x)
    p = length(x);
    for k=1:p
        r = sqrt(L(k,k)^2 + x(k)^2);
        c = r / L(k, k);
        s = x(k) / L(k, k);
        L(k, k) = r;
        L(k+1:p,k) = (L(k+1:p,k) + s*x(k+1:p)) / c;
        x(k+1:p) = c*x(k+1:p) - s*L(k+1:p,k);
    end
end

它与LL分解一起工作。我尝试像下面这样修复过程,以便与LDL分解一起工作(即不调用sqrt):

function [L] = cholupdate_ldl(L,x)
    p = length(x);
    for k=1:p
        r = L(k,k) + x(k)^2;
        c = r / L(k, k);
        s = x(k) / L(k, k);
        L(k, k) = r;
        L(k+1:p,k) = (L(k+1:p,k) + s*x(k+1:p)) / c;
        x(k+1:p) = sqrt(c)*(x(k+1:p) - x(k)*L(k+1:p,k));
    end
end

它运行良好,但我被迫使用SQRT。我怎样才能在完全不使用sqrt的情况下更新LDL分解呢?

共有1个答案

洪越泽
2023-03-14

有很多种方法。参见Gill,Golub,Murray和Saunders(1974):《计算数学中修正矩阵分解的方法》。为了正式地总结你的问题,我引用文件中的内容:

最后我们讨论算法:

下面是我在MATLAB中的实现:

function [L1,D1] = ldlt_update(L0,D0,z)

n = size(L0,1) ;
D1 = zeros(n,n) ;
L1 = zeros(n,n) ;

a = 1 ;
w = z ;
for jj = 1:n
    p = w(jj) ;
    D1(jj,jj) = D0(jj,jj) + a*p^2 ;
    b = p*a/D1(jj,jj) ;
    a = D0(jj,jj)*a/D1(jj,jj) ;
    for r = jj+1:n
        w(r) = w(r) - p*L0(r,jj) ;
        L1(r,jj) = L0(r,jj) + b*w(r) ;
    end
end
end

在上面引用的论文和Gill,Murray和Wright(1982):《实用最优化》中有一种替代算法。Brian Borchers有一套完整的MATLAB代码,用于处理实对称正定LDLT分解,如Golub和Van Loan(2013):Matrix Computations和他的网站上所定义的那样。

 类似资料:
  • 问题内容: 我正在使用进度条(以条形式)。我希望使用插值器使小节平滑地增加和减少,但是它不起作用。这是我目前所拥有的: 我做错什么了吗? 问题答案: 插值器必须附加到动画上,并且仅适用于Honeycomb或更高版本: 如果您的最低SDK为Gingerbread或更低版本,请添加: 到您的功能/类。 我使用了DecelerateInterpolator,但这是可选的,还有其他可能性。

  • 本文向大家介绍Android利用Intent读取和更新通讯录,包括了Android利用Intent读取和更新通讯录的使用技巧和注意事项,需要的朋友参考一下 一、简介 本节演示如何在安卓系统中通过用户配置文件(user profile)读取和更新该手机的所有联系人信息,以及如何导航到用户配置文件中的这些联系人。 二、基本概念  1、什么是 User Profile 用户配置文件(user profi

  • 本文向大家介绍利用AJAX实现无刷新数据分页,包括了利用AJAX实现无刷新数据分页的使用技巧和注意事项,需要的朋友参考一下 以前在使用Asp.Net的时候用过GridView这个控件,这个控件自带分页的功能,虽然很丑,但是功能还是很强大的。这里呢,给大家展示一下更加给力的方式——利用AJAX无刷新直接从服务器获取数据分页。 一、实现过程 注意:一下的内容都是在服务器内使用的。 首先要在服务器的路径

  • 使用指南 - 数据报告 - 访问分析 - 利用入口页面做新访客分析 访客都是通过入口页进入到网站,尤其对于新访客来说,入口页面网站的第一印象,新访客最多的入口页面值得重点分析。怎么分析访问入口报告里的新访客数据呢? 让我们先看下和新访客相关的指标有哪些: 访客数(UV):一天之内从该入口进入您网站的独立访客数(以Cookie为依据),一天内同一访客多次访问只计算1个。 新访客数:从该入口进入的独立

  • 我有一个非常简单的mysql记录如下: 这是它的冬眠实体;没什么特别的 为了方便起见,我使用Gson从前端传入的json字符串解析实体 记录的json字符串如下所示: 然后将从json字符串中解析userEntity: 我可以使用和。 如果每个字段都包含在json字符串中,那么事情看起来就像预期的那样。但当某些字段(如被省略时: 这表明我应该进行部分更新,并保留省略的字段不进行修改,但出现了问题。

  • 本文向大家介绍如何利用pycharm进行代码更新比较,包括了如何利用pycharm进行代码更新比较的使用技巧和注意事项,需要的朋友参考一下 pycharm自带对两个文件比对更新模块,方便查找不同,进行修改替换。方法如下:   1.选择目标文件,右键选择compare with   2.选择对比文件   3.查看对比修改如图: 到此这篇关于如何利用pycharm进行代码更新比较的文章就介绍到这了,更

  • 本文向大家介绍利用jquery实现实时更新歌词的方法,包括了利用jquery实现实时更新歌词的方法的使用技巧和注意事项,需要的朋友参考一下 前言 最近自己写了个移动端音乐播放器,用了很多框架,也踩了很多坑,感觉比较复杂的就是计算歌词实时播放了,所以想着大概给整理了一下,分享出来,有问题的话朋友们可以指出,有需要的朋友们也可以学习学习。 布局 (歌词都是后台数据获取,方便理解我把所有歌词都一一列出来

  • 本文向大家介绍强制更新组件的方法有哪些?分别有何利弊?相关面试题,主要包含被问及强制更新组件的方法有哪些?分别有何利弊?时的应答技巧和注意事项,需要的朋友参考一下 强制更新组件的方法有哪些?分别有何利弊? 作者:jackchoumine