matlab基于household变换的QR分解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab基于household变换的QR分解相关的知识,希望对你有一定的参考价值。
希望有程序及解释说明。
对,最好有程序和说明
% 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 3;3 1 -2;3 -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=[1;zeros(n-i,1)];
Ht=householder(x,y);
H=blkdiag(eye(i-1),Ht);
Q=Q*H;
R=H*R;
end 参考技术A 你说的是用来解方程的那个程序吗?
matlab的QR分解函数QR()
这个函数的输入矩阵不可以是double类型吗?事实上处理的矩阵大多是这种类型呀,要对一个double类型的矩阵做QR分解,matlab里面有现成的函数吗?
完全可以,是一样的调用QR。>> A=rand(5)
A =
0.5828 0.2259 0.2091 0.5678 0.4154
0.4235 0.5798 0.3798 0.7942 0.3050
0.5155 0.7604 0.7833 0.0592 0.8744
0.3340 0.5298 0.6808 0.6029 0.0150
0.4329 0.6405 0.4611 0.0503 0.7680
>> [Q,R]=qr(A)
Q =
-0.5598 0.8235 -0.0747 0.0193 0.0492
-0.4068 -0.1939 0.5250 -0.6391 -0.3359
-0.4952 -0.3400 -0.2889 0.4805 -0.5699
-0.3208 -0.2913 -0.6630 -0.4618 0.3993
-0.4159 -0.2894 0.4425 0.3833 0.6329
R =
-1.0410 -1.1752 -1.0696 -0.8846 -1.1138
0 -0.5246 -0.4996 0.1034 -0.2410
0 0 -0.2899 -0.0200 0.2063
0 0 0 -0.7274 0.5207
0 0 0 0 -0.0882追问
刚刚写成了QR(A)于是就不行了,QR()和qr()是什么区别呢?
追答Matlab 对系统保留字,大小写没有区别。
追问同样的程序改成QR大写就显示:
Undefined function or method 'QR' for input arguments of type 'double'
这是为什么呢?
不好意思,搞错,必须小写。
参考技术A lu分解牵涉到选主元,符号本身不带大小,所以lu就不行了,除非你自己知道某些未知量的性质然后自己写一个。qr分解的计算当中倒是没有比较,不过我估计直接调qr还是不行的,如果不能直接用的话就自己写一段代码,反正块运算对符号也没用。
我不知道你为什么有这些需求,我估计你本身的问题可能有别的办法来解决,符号计算大多数时候是没用的。
以上是关于matlab基于household变换的QR分解的主要内容,如果未能解决你的问题,请参考以下文章