cholesky分解_java toarray方法

cholesky分解_java toarray方法接着LU分解继续往下,就会发展出很多相关但是并不完全一样的矩阵分解,最后对于对称正定矩阵,我们则可以给出非常有用的cholesky分解。这些分解的来源就在于矩阵本身存在的特殊的结构。对于矩阵A,如果没有任何的特殊结构,那么可以给出A=L*U分解,其中L是下三角矩阵且对角线全部为1,U是上三角矩阵但是对角线的值任意,将U正规化成对角线为1的矩阵,产生分解A=L*D*U,D为对角矩阵。如果A为对…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

接着LU分解继续往下,就会发展出很多相关但是并不完全一样的矩阵分解,最后对于对称正定矩阵,我们则可以给出非常有用的cholesky分解。这些分解的来源就在于矩阵本身存在的特殊的

结构。对于矩阵A,如果没有任何的特殊结构,那么可以给出A=L*U分解,其中L是下三角矩阵且对角线全部为1,U是上三角矩阵但是对角线的值任意,将U正规化成对角线为1的矩阵,产生分解A = L*D*U, D为对角矩阵。如果A为对称矩阵,那么会产生A=L*D*L分解。如果A为正定对称矩阵,那么就会产生A=G*G,可以这么理解G=L*sqrt(D)。

A=L*D*U分解对应的Matlab代码如下:

function[L, D, U] =zldu(A)

%LDU decomposition of square matrix A. The first step for Cholesky

%decomposition

[m, n] = size(A);

if m ~= n

error(‘support square matrix only’)

end

L = eye(n);

U = eye(n);

d = zeros(n,1);

for k=1:n

v = zeros(n, 1);

if k == 1

v(k:end) = A(k:end, k);

else

m = L(1:k-1, 1:k-1) \ A(1:k-1, k);

for j = 1:k-1

U(j, k) = m(j) / d(j);

end

v(k:end) = A(k:end, k) – L(k:end, 1:k-1)*m(:);

end

d(k) = v(k);

if k < n

L(k+1:end, k) = v(k+1:end)/v(k);

end

end

D = diag(d);

分解的稳定性和精度结果如下:

mean of my lu     : 9.0307e-15

variance of my lu : 4.17441e-27

mean of matlab lu     : 3.70519e-16

variance of matlab lu : 2.07393e-32

这里的计算是基于Gaxpy,所以稳定性和精确度相当之好。

A=L*D*L分解对应代码如下,这里要求A必须为对称矩阵:

function[D, L] =zldl(A)

%A = L*D*L’ another version of LU decomposition for matrix A

[m, n] = size(A);

if m ~= n

error(‘support square matrix only’)

end

L = eye(n);

d = zeros(n,1);

for k=1:n

v = zeros(n,1);

for j=1:k-1

v(j) = L(k, j)*d(j);

end

v(k) = A(k,k) – L(k, 1:k-1)*v(1:k-1);

d(k) = v(k);

L(k+1:end, k) = (A(k+1:end,k) – A(k+1:end, 1:k-1)*v(1:k-1)) / v(k);

end

D = diag(d);

对应分解的精确度和稳定度如下:

mean of my lu : 35.264

variance of my lu : 29011.2

mean of matlab lu : 5.88824e-16

variance of matlab lu : 8.40037e-32

使用如下的代码做测试:

n = 1500;

my_error = zeros(1, n);

sys_error = zeros(1, n);

for i = 1:n

test = gensys(5);

[zd, zl] = zldl(test);

[l, d] = ldl(test);

my_error(i) = norm(zl*zd*(zl’) – test, ‘fro’);

sys_error(i) = norm(l*d*(l’) – test, ‘fro’);

end

fprintf(‘mean of my lu     : %g\n’, mean(my_error));

fprintf(‘variance of my lu : %g\n’, var(my_error));

fprintf(‘mean of matlab lu     : %g\n’, mean(sys_error));

fprintf(‘variance of matlab lu : %g\n’, var(sys_error));

对于运算的精度如此之低的原因并不清楚

A=G*G’; cholesky分解对应的代码如下:

function[G] =zgaxpychol(A)

%cholesky decomposition for symmetric positive definite matrix

%the only requirement is matrix A: symmetric positive definite

[m, n] = size(A);

if m ~= n

error(‘support square matrix only’)

end

G = eye(n);

for k=1:n

v = A(:,k);

if k > 1

v(:) = v(:) – G(:,1:k-1)*G(k,1:k-1)’;

end

G(k:end, k) = v(k:end) / sqrt(v(k));

end

对应的测试结果如下

mean of my lu : 1.10711e-15

variance of my lu : 3.04741e-31

mean of matlab lu : 5.5205e-16

variance of matlab lu : 9.64928e-32

自己代码的精确度和稳定性可以媲美Matlab的代码,产生这种结果的原因应该是positive sysmetric definite matrix的原因,这段代码基于gaxpy的结果,下面给出另外一种基于外积的运算结果。

function[G] =zopchol(A)

%cholesky decomposition based on rank-1 matrix update

[m, n] = size(A);

if m ~= n

error(‘support square matrix only’)

end

G = zeros(n);

for k=1:n

G(k,k) = sqrt(A(k,k));

G(k+1:end, k) = A(k+1:end, k) / G(k,k);

%update matrix A

for j = (k+1):n

A(k+1:end,j) = A(k+1:end,j) – G(j,k)*G(k+1:end,k);

end

end

对应的测试结果如下:

mean of my lu : 9.33114e-16

variance of my lu : 1.71179e-31

mean of matlab lu : 9.92241e-16

variance of matlab lu : 1.60667e-31

对应的测试程序如下,这里使用系统自带的chol函数完成cholesky分解。

n = 1500;

my_error = zeros(1, n);

sys_error = zeros(1, n);

for i = 1:n

test = genpd(5);

[zg] = zopchol(test);

l = chol(test, ‘lower’);

my_error(i) = norm(zg*(zg’) – test, ‘fro’);

sys_error(i) = norm(l*(l’) – test, ‘fro’);

end

fprintf(‘mean of my lu     : %g\n’, mean(my_error));

fprintf(‘variance of my lu : %g\n’, var(my_error));

fprintf(‘mean of matlab lu     : %g\n’, mean(sys_error));

fprintf(‘variance of matlab lu : %g\n’, var(sys_error));

将两个结果想比较,可以发现两个版本的cholesky分解的精确度和稳定度差不多。

Cholesky分解的核心在于矩阵对称正定的结构,基于LU分解的再次扩展。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206724.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Win10 下报错 WerFault.exe -解决方法亲测有效

    Win10 下报错 WerFault.exe -解决方法亲测有效Win10WerFault.exe错误装了后经常出现WerFault.exe的应用程序错误提示。内存*****地址不能为read.解决方法两种:1.系统设置2.管理员运行cmd命令行模式我机器用的第二种方式。1.系统设置1.1本地组策略gpedit.msc用户配置-管理模块-Windows组件-Windows错误报告-禁用1.2…

    2022年6月29日
    20
  • UPX脱壳逐一跟踪分析

    UPX脱壳逐一跟踪分析UPX脱壳逐一跟踪分析写在前面OD跟踪命令先结合PE知识分析分析“新年快乐.exe”写在前面之前看到的UPX脱壳文章都只是教了方法,对UPX的原理少有提及。看了《逆核》的UPX脱壳一章后,俺尝试把UPX脱壳与PE文件结构的知识结合起来整理了一些(也可联系压缩器Paker的知识)。分析样本来自BUUCTF:Reverse题目“新年快乐”(本文将寻找样本的OEP)OD跟踪命令可能会用到的几个跟踪命令:命令快捷键作用AnimateIntoCtrl+F7反复执行StepIn

    2022年7月12日
    17
  • mysql 字符串取前缀_mysql截取字符串的函数总结

    mysql 字符串取前缀_mysql截取字符串的函数总结1、从左开始截取字符串left(str,length)说明:left(被截取字段,截取长度)例:selectleft(content,200)asabstractfrommy_content_t2、从右开始截取字符串right(str,length)说明:right(被截取字段,截取长度)例:selectright(content,200)asabstractfrommy_…

    2022年5月3日
    92
  • eagleget安卓_android startactivityforresult

    eagleget安卓_android startactivityforresult前言:AndroidEagleEye官方介绍在https://github.com/MindMac/AndroidEagleEye/blob/master/README-zh.md真的像老鹰样检测系统调用了哪些api,作者很厉害!作为笔记来说,是官方readme的补充,也是自己的备忘。笔记1,EagleEye源码能否修改再重新打包?能,修改代码后加上

    2022年8月16日
    3
  • 妈妈再也不用担心我的博客访问量了(一个可以刷博客访问量的小程序java)「建议收藏」

    妈妈再也不用担心我的博客访问量了(一个可以刷博客访问量的小程序java)「建议收藏」前言:相信很多写博客的朋友,会苦恼于博客访问量上不去的问题。博主最近工作比较新手动谢了个小程序,一个可以刷访问量的程序。当然主要是针对csdn博客。有了他就再也不必担心博客访问量上不去的问题了。注:博客最主要还是要自己做好seo优化,以及提高博客内容质量。本篇文章,仅供学习交流。大家如果有问题,可以留言。一,废话少说,看图:软件点击jar包直接运行:如下:稍后查看博客访问量会有变化哟,博主

    2022年6月17日
    20
  • linux 嵌入式 tts引擎_语音合成(TTS)的概念和分类[通俗易懂]

    linux 嵌入式 tts引擎_语音合成(TTS)的概念和分类[通俗易懂]智能音箱在ASR(语音识别)以及NLP自然语义处理常用框架-兔尔摩斯的文章-知乎https://zhuanlan.zhihu.com/p/55658291语音合成SpeechSynthesis或TexttoSpeech(TTS)语音合成(SpeechSynthesis)是人类语音的人工合成。用于此目的的计算机系统称为语音计算机或语音合成器,可以在软件或硬件产品中实…

    2022年4月19日
    276

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号