LU分解、矩阵求逆与解线性方程组(matlab代码)

本文详细介绍了LUP分解的MATLAB实现,包括LUP分解的代码以及使用LUP分解求解线性方程组的算法。修复了一个可能导致错误的BUG,并提供了矩阵求逆和求解线性方程组的测试例子。

一、前言

  参考知乎文章:LU分解、LUP分解、Cholesky分解中的LUP分解,LUP分解相比LU分解更加稳定,在矩阵求逆、求解解线性方程组有广泛运用。笔者修复了文章所述LUP算法一个BUG,当待分解的矩阵某一列均为0时,例如矩阵[0 1;0 1],无法进行LUP分解。增加基于LUP分解求解线性方程组代码、在矩阵方程AX=B中,当B为单位阵时,利用LUP分解可以快速稳定地求解矩阵的逆。

二、LUP分解MATLAB代码

function [L, U, P] = lup(A)
if size(A, 1) ~= size(A, 2)
    error('矩阵行数与列数不等')
end

U = A;
L = eye(size(A));
P = eye(size(A));
n = size(A, 2);
for j = 1 : n - 1
    
    %Select i(>=j) that maximizes |U(i,j)|
    index = -1;
    maxValue = 0.0;
    for i = j : n
        temp = abs(U(i,j));
        if temp > maxValue
            maxValue = temp;
            index = i;
        end
    end
    
    if index == -1
        continue;
    end
    
    %Interchange rows of U: U(j, j : n) <-> U(i, j : n)
    for k = j : n
        temp = U(j, k);
        U(j, k) = U(index, k);
        U(index, k) = temp;
    end
    
    %Int
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值