matlab基于household变换的QR分解

matlab基于household变换的QR分解,第1张

% by dynamic of Matlab技术论坛

% see also http://www.matlabsky.com

% contact me matlabsky@gmail.com

% 2010-02-28 13:28:30

%

哈哈 这个程序我真好前段时间写好的,原创的并有详细注释

http://www.matlabsky.net/viewthread.php?tid=4851&highlight=household

下面的程序需要调用一个household的子程序,你可以到上面的连接下载

function [Q,R]=qrhs(A)

% 基于Householder变换,将方阵A分解为A=QR,其中Q为正交改物猜矩阵,R为上三角阵

%

% 参数说明

% A:需要进行QR分解的方阵

% Q:分解得到的正交矩阵

% R:分解得到的上三角阵

%

% 实例说明

% A=[-12 3 33 1 -23 -2 7]

% [Q,R]=qr(A) % 调用MATLAB自带的QR分解函数进核型行验证

% [q,r]=qrhs(A) % 调用本函数进行QR分解

% q*r-A % 验证 A=QR

% q'*q % 验证q的正交性

% norm(q) % 验证q的标准化,即二范数等于1

%

% 线性代数基础知识

% 1.B=P*A*inv(P),称A与B相似,相似矩阵具有相同的特征值

% 2.Q*Q'=I,称Q为正交矩阵,正交矩阵的乘积仍为正交矩阵

%

% 注意:我蚂数们也可以基于Givens变换,对方阵A进行QR分解,但是相对繁琐些,参见http://www.matlabsky.com/thread-4850-1-1.html

%

% by dynamic of Matlab技术论坛

% see also http://www.matlabsky.com

% contact me matlabsky@gmail.com

% 2010-01-17 22:49:51

%

n=size(A,1)

R=A

Q=eye(n)

for i=1:n-1

x=R(i:n,i)

y=[1zeros(n-i,1)]

Ht=householder(x,y)

H=blkdiag(eye(i-1),Ht)

Q=Q*H

R=H*R

end

function l = rqrtz(A,M)

%QR算法求举衡升矩阵全部特征值正老

%已拦脊知矩阵:A

%迭代步数:M

%求得的矩阵特征值:l

A = hess(A)

for i=1:M

N = size(A)

n = N(1,1)

u = A(n,n)

[q,r]=qr(A-u*eye(n,n))

A = r*q+u*eye(n,n)

l = diag(A)

end

------------------------------------

A=[0 5 0 0 0 01 0 4 0 0 00 1 0 3 0 00 0 1 0 2 00 0 0 1 0 10 0 0 0 1 0]

A =

0 5 0 0 0 0

1 0 4 0 0 0

0 1 0 3 0 0

0 0 1 0 2 0

0 0 0 1 0 1

0 0 0 0 1 0

>>rqrtz(A,50)

ans =

-3.2030

3.2030

-1.8837

1.8837

-0.6167

0.6167

>>eig(A)

ans =

-3.3243

3.3243

-1.8892

-0.6167

1.8892

0.6167


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8284005.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存