矩阵的LU分解

矩阵的LU分解function [x,L,U,index]=LU_Factorization(A,b)
tic
%A为要分解的矩阵
%b为方程组的右端常数项
%x为方程组的解
%L为单位下三角阵
%U为上三角阵
%index为指标变量,index=0表示计算失败,index=1表示计算成功
[n,m]=size(A);
nb=length(b);
%当方程行与列的维数不相等时,停止计算,并输出出错信息
if n~=m
    error(‘the rows and columns of matrix A must be equal‘);
    return;
end
%当方程组与右端项的维数不匹配时,停止计算,并输出出错信息
if m~=nb
    error(‘the columns of A must be equal the length of b‘);
    return;
end
L=eye(n);U=zeros(n);index=1;x=zeros(n,1);y=zeros(n,1);
%矩阵的三角分解过程
for k=1:n
    for j=k:n
        z=0;
        for q=1:k-1
            z=z+L(k,q)*U(q,j);
        end
        U(k,j)=A(k,j)-z;
    end
    if abs(U(k,k))<1e-16
        index=0;return;
    end
    for i=k+1:n
        z=0;
        for q=1:k-1
            z=z+L(i,q)*U(q,k);
        end
        L(i,k)=(A(i,k)-z)/U(k,k);
    end
end
%求解两个三角方程组的过程
y(1)=b(1);
for k=2:n
    z=0;
    for j=1:k-1
        z=z+L(k,j)*y(j);
    end
    y(k)=b(k)-z;
end
x(n)=y(n)/U(n,n);
for k=n-1:-1:1
    z=0;
    for j=k+1:n
        z=z+U(k,j)*x(j);
    end
    x(k)=(y(k)-z)/U(k,k);
end
toc
时间: 2024-11-10 04:26:57

矩阵的LU分解的相关文章

矩阵分解---QR正交分解,LU分解

相关概念: 正交矩阵:若一个方阵其行与列皆为正交的单位向量,则该矩阵为正交矩阵,且该矩阵的转置和其逆相等.两个向量正交的意思是两个向量的内积为 0 正定矩阵:如果对于所有的非零实系数向量x ,都有 x'Ax>0,则称矩阵A 是正定的.正定矩阵的行列式必然大于 0, 所有特征值也必然 > 0.相对应的,半正定矩阵的行列式必然 ≥ 0. QR分解 矩阵的正交分解又称为QR分解,是将矩阵分解为一个正交矩阵Q和一个上三角矩阵的乘积的形式. 任意实数方阵A,都能被分解为A=QR.这里的Q为正交单位阵,即

矩阵LU分解程序实现(Matlab)

n=4;%确定需要LU分解的矩阵维数 %A=zeros(n,n); L=eye(n,n);P=eye(n,n);U=zeros(n,n);%初始化矩阵 tempU=zeros(1,n);tempP=zeros(1,n);%初始化中间变量矩阵 A=[1 2 -3 4;4 8 12 -8;2 3 2 1;-3 -1 1 -4];%需要LU分解矩阵赋值 for p=1:n %将A矩阵赋值给U for q=1:n U(p,q)=A(p,q); end end jt=1;kt=0; for i=1:n-1

LU分解,Javascript代码

///A 为矩阵,这里写成一维数组,如 [1],[1,2,3,4] function GetLU(a) { var n = a.length;//矩阵的总数据数目 var s = Math.sqrt(n);//矩阵的阶数 var L = new Array(n); var U = new Array(n); if (GetDet(a) != 0) { var allOrderNotEqulesZero = true; for (var i = 0; i < s; i++) { if (GetDe

LU分解(2)

接着上次LU分解的讲解,这次给出使用不同的计算LU分解的方法,这种方法称为基于GaxPy的计算方法.这里需要了解lapapck中的一些函数.lapack中有一个函数名为gaxpy,所对应的矩阵计算公式是:x = Gx + y; 对应的Matlab代码如下: function[L, U] =zgaxpylu(A) %calculate LU decomposition based on Gaxpy operation %the same way as zlu.m but differnt appr

矩阵的SVD分解

转自 http://blog.csdn.net/zhongkejingwang/article/details/43053513(实在受不了CSDN的广告) 在网上看到有很多文章介绍SVD的,讲的也都不错,但是感觉还是有需要补充的,特别是关于矩阵和映射之间的对应关系.前段时间看了国外的一篇文章,叫A Singularly Valuable Decomposition The SVD of a Matrix,觉得分析的特别好,把矩阵和空间关系对应了起来.本文就参考了该文并结合矩阵的相关知识把SVD

LU分解

function [L,U,p] = lutxloops(A) %LU Triangular factorization %   [L,U,p] = lup(A) produces a unit lower triangular matrix L, %   an upper triangular matrix U and a permutation vector p, %   so that L*U = A(p,:) [n,n] = size(A); p = (1:n)'; for k = 1:

矩阵的特征值分解

引入问题:给定一个对角线非零的上三角矩阵\(M\),求\(M^k\),满足\(M\)的阶\(\le 500\),\(k\le 10^9\). 对998244353取模. 一个显而易见的算法是矩阵快速幂,然而是\(O(N^3\log k)\)的,无法通过本题. 一开始我想,既然是上三角矩阵,那么特征多项式一定不难求,那么是用CH定理+FFT多项式取模啥搞搞? 然而我naive了. 这题我们可以把\(M\)特征值分解为\(Q^{-1}AQ\)形式,其中\(A\)是一个对角矩阵. 那么\(M^k=(Q

矩阵LU分解的高斯消元法

A=[1,-1,1,-4;5,-4,3,12;2,1,1,11;2,-1,7,-1] L=eye(length(A)) %开始消元过程 for k=1:(length(A)) a=A(k,k) for i=k+1:(length(A)) c=-A(i,k) L(i,k)=-c./a for j=1: (length(A)) A(i,j)=A(i,j)+c.*A(k,j)./ a end end end L U=A A = 1 -1 1 -4 5 -4 3 12 2 1 1 11 2 -1 7 -

矩阵乘法的分解

对于z*n的矩阵a1, a2, b1, b2有: Q=(a1, a2)*(b1, b2)^T= a1*b1+ a2*b2. 其中,Q是n*n的矩阵. 论证: 1. 矩阵符合分解.分配律:A*B= A*(B1+ B2)= A*B1+ A*B2, 其中B=B1+B2, 且B, B1, B2是维度相同的矩阵. 2. (a1, a2)*(b1, 0)^T= (a1, 0)*(b1, 0)^T+ (0, a2)*(b1, 0)^T= a1*b1^T+ 0= a1*b1^T. 3. (a1, a2)*(b1