矩阵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
    jt=jt+1;
    kt=kt+1;
    ii=U(i,i);
    if ii==0                    %主元为零,进行行变换
        for m=i:n
            if U(m,i)~=0
                tempU=U(i,:);
                U(i,:)=U(m,:);
                U(m,:)=tempU;
                ii=U(i,i);
                %%
                tempP=P(i,:);  %行变换结果存储在P中
                P(i,:)=P(m,:);
                P(m,:)=tempP;
                break;
            end
        end
        %disp(ii);
    end
    disp(ii);
    for j=jt:n                    %%两重循环,完成高斯消元
          perj=U(j,i)/ii;
          L(j,i)=perj;
          for k=kt:n
                U(j,k)=U(j,k)-perj*U(i,k);
          end
     end
 end

savefile=‘LUdapart‘;
save(savefile)

  

原文地址:https://www.cnblogs.com/liudianfengmang/p/11617068.html

时间: 2024-11-11 01:57:10

矩阵LU分解程序实现(Matlab)的相关文章

矩阵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 -

矩阵的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

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

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

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

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分解

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:

机器学习基础篇——矩阵特征值分解含义解析及应用

特征值与特征向量的几何意义: 矩阵的乘法是什么,别只告诉我只是"前一个矩阵的行乘以后一个矩阵的列",还会一点的可能还会说"前一个矩阵的列数等于后一个矩阵的行数才能相乘",然而,这里却会和你说--那都是表象. 矩阵乘法真正的含义是变换,我们学<线性代数>一开始就学行变换列变换,矩阵乘法就是线性变换,若以其中一个向量A为中心,则B的作用主要是使A发生如下变化: 伸缩 clf;     %用来清除图形的命令 A = [0, 1, 1, 0, 0;... 1, 

矩阵特征值分解与奇异值分解含义解析及应用

此文有一半转载自他出,主要在这进行个整理,具体内容文中都有相关的转载链接. 特征值与特征向量的几何意义 矩阵的乘法是什么,别只告诉我只是"前一个矩阵的行乘以后一个矩阵的列",还会一点的可能还会说"前一个矩阵的列数等于后一个矩阵的行数才能相乘",然而,这里却会和你说--那都是表象. 矩阵乘法真正的含义是变换,我们学<线性代数>一开始就学行变换列变换,那才是线代的核心--别会了点猫腻就忘了本--对,矩阵乘法 就是线性变换,若以其中一个向量A为中心,则B的作用

c语言:3*4的矩阵,编程序求出其中最大的那个元素的值,以及其所在的行号和列号。(打擂台算法)

有一个3*4的矩阵,要求编程序求出其中最大的那个元素的值,以及其所在的行号和列号.(打擂台算法) 解:程序: #include<stdio.h> int main() { int i, j, row = 0, colum = 0, max; int a[3][4] = { { 1,2,3,4 },{ 4,5,6,7 },{-1,3,-5,10} }; max = a[0][0]; printf("array a:\n"); for (i = 0; i <= 2; i+