householder变换qr分解matlab_matlab实现消去变换及选主元法求逆算法

消去变换的定义

消去变换实际上是Gauss-Jordan消去变换(G-J消去变换)的一种紧凑写法,它可以由两步完成,一步是G-J消去变换,另一步是替换,具体更多内容可见高慧璇著的《统计计算》,它的一个更贴近于代码实现的定义如下图所示。

ce7d85b46ab682a3486f98b801889de2.png

可以看到,这个变换很容易实现,只需要就4中不同情况分别定义好相应取值即可,下面是matlab中消去变换的实现

function B = Tij(A,i,j)[m,n] = size(A);B = zeros(m,n);% case 1B(i,j) = 1/A(i,j);% case 2for k = [1:i-1 i+1:m]    B(k,j) = -1*A(k,j)/A(i,j);end% case 3for k = [1:j-1 j+1:n]    B(i,k) = A(i,k)/A(i,j);end% case 4for k = [1:i-1 i+1:m]    for s = [1:j-1 j+1:n]        B(k,s) = A(k,s) - A(k,j)*A(i,s)/A(i,j);    endendend

选主元法求逆算法

按行选主元法求逆算法具体流程如下图所示,它的证明可以通过置换(可以分解为对换的乘积:

42fac2f44e6d9b315c08cde5d191ecdf.png

,从右往左的置换)以及消去变换的性质得到

72a42fb4a1196a2ea44cc77ad9944ec6.png

下面是matlab中的实现

function B = inv_by_Tij(A)[~,n] = size(A);B = zeros(n);C = 1:n;L = zeros(1,n);for i = 1:n    [~,j] = max(A(i,C));    A = Tij(A,i,C(j));    L(i) = C(j);    C(C==C(j)) = [];endfor i = 1:n    for j = 1:n        B(L(i),j) = A(i,L(j));    endendend

总结

消去变换是一种非常有用的方法,其本质仍然是高斯消去变换,不过这种紧凑的“原地求逆”变换一方面节省了存储空间,另一方面也使得它在处理某些问题时会显得非常方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值