精华内容
下载资源
问答
  • LU分解矩阵LU分解矩阵LU分解矩阵LU分解矩阵LU分解矩阵
  • 矩阵分解-LU分解

    2020-10-09 15:06:09
    矩阵分解-LU分解矩阵分解一、程序 矩阵分解 矩阵分解 矩阵分解是将矩阵拆解为数个矩阵的乘积,可分为三角分解、满秩分解、QR分解、Jordan分解和SVD(奇异值)分解等。 三角分解法是将原正方矩阵分解成一个上三角形...

    矩阵分解-LU分解

    矩阵分解

    矩阵分解
    矩阵分解是将矩阵拆解为数个矩阵的乘积,可分为三角分解、满秩分解、QR分解、Jordan分解和SVD(奇异值)分解等。

    三角分解法是将原正方矩阵分解成一个上三角形矩阵或是排列 的上三角形矩阵和一个 下三角形矩阵,这样的分解法又称为LU分解法。它的用途主要在简化一个大矩阵的行列式值的计算过程,求逆矩阵,和求解联立方程组。不过要注意这种分解法所得到的上下三角形矩阵并非唯一,还可找到数个不同 的一对上下三角形矩阵,此两三角形矩阵相乘也会得到原矩阵。

    一、程序

    可采用如下命令:
    MATLAB内置lu分解法, 其语法为[L,U]=lu(A)。
    [L,U]=lu(A):产生一个上三角阵U和一个变换形式的下三角阵L(行交换),使之满足A=LU。注意,这里的矩阵A必须是方阵。
    [L,U,P]=lu(A):产生一个上三角阵U和一个下三角阵L以及一个置换矩阵P,使之满足PA=LU。当然矩阵A同样必须是方阵。
    (设P 是一个 m×n 的(0,1) 矩阵,如 m≤n且P*P′=E,则称 P为一个m×n的置换矩阵。)
    实现LU分解后,线性方程组Ax=b的解x=U(Lb)或x=U(LPb)。

    也可采用如下程序:
    function x=DecomLU(A,b)
    flag=isexist(A,b);
    if flag==0
    disp(‘该方程组无解!’);
    x=[];
    return;
    else
    r=rank(A);
    [m,n]=size(A);
    [L,U,P]=lu(A);
    y(1)=b(1);
    if m>1
    for i=2:m
    y(i)=b(i)-L(i,1:i-1)*y(1:i-1)’;
    end
    end
    y=y’;
    x0®=y®/U(r,r);
    if r>1
    for i=r-1: -1:1
    x0(i)=(y(i)-U(i,i+1:r)*x0(i+1:r)’)/U(i,i);
    end
    end
    x0=x0’;
    if flag ==1
    x=x0;
    return;
    else
    format rat;
    Z=null(A,‘r’);
    [mZ,nZ]=size(Z);
    x0(r+1:n)=0;
    for i=1:nZ
    t=sym(char([107 48+i]));
    k(i)=t;
    end
    x=x0;
    for i=1:nZ
    x=x+k(i)*Z(:,i);
    end
    end

    展开全文
  • 矩阵分析之LU分解

    千次阅读 2016-10-02 14:40:36
    矩阵分解之LU分解问题:对于n-by-n矩阵A,对A进行分解,使得A=LU,L为下上角矩阵,U为上三角矩阵。实现过程如下:

    矩阵分析之LU分解


    问题:对于n-by-n矩阵A,对A进行分解,使得A=LU,L为下上角矩阵,U为上三角矩阵。实现过程如下:

    /*******************************************************
    程序功能:进行矩阵LU分解
    运行环境:Dev C++5.11
    author:Robert.Tianyi
    日期:2016.10.4 
    ****************************************************/
    #include<stdio.h>
    #include<stdlib.h>
    void Matrix_LU_Factorization(float *B,int n);
    void main(){
        int i,j;
        int n;//  矩阵n-by-n
        printf("请输入n-by-n矩阵A的大小n:\n");
        scanf("%d",&n); 
        float *A;
        A=(float *)malloc(sizeof(float)*n*n);
        printf("请输入%d-by-%d矩阵A,一次性输入%d个元素,元素之间用空格隔开:\n",n,n,n*n);
        for(i=0;i<n*n;i++){
            scanf("%f",&A[i]);
        }
        Matrix_LU_Factorization(A,n);
    }
    void Matrix_LU_Factorization(float *B,int n){
        int i,j,k,p;
        float (*L)[n],(*U)[n],(*test)[n],(*A)[n];
        float temp=0;
        A=(float (*)[n])malloc(sizeof(float)*n*n);
        for(i=0;i<n;i++){
            for(j=0;j<n;j++){
                A[i][j]=B[i*n+j];
            }
        }
        printf("输入的矩阵A:%d by %d\n",n,n);
        for(i=0;i<n;i++){
            for(j=0;j<n;j++){
                printf("%8.3f",A[i][j]);
            }
            printf("\n");
        }   
        L=(float (*)[n])malloc(sizeof(float)*n*n);
        U=(float (*)[n])malloc(sizeof(float)*n*n);
        test=(float (*)[n])malloc(sizeof(float)*n*n);
        for(i=0;i<n;i++)
            for(j=0;j<n;j++){
                L[i][j]=0;
                U[i][j]=0;
                if(i==j)
                    L[i][j]=1;
            }
        //进行LU分解 
        for(i=0;i<n;i++){
            if(i==0){
                L[0][0]=1;
                for(j=0;j<n;j++)
                    U[i][j]=A[i][j];
            }
            else{
                for(j=0;j<i;j++){//计算l[i][j] 
                    temp=A[i][j];
                    p=0;
                    while(j>=1&& p<j){      
                        temp=temp-L[i][p]*U[p][j];
                        p++; 
                        }
                        L[i][j]=temp/U[j][j];
                    }
                    for(j=i;j<n;j++){   //计算U[i][j] 
                        temp=A[i][j];
                        p=0;
                        while(p<j){     
                          temp=temp-L[i][p]*U[p][j];
                          p++;  
                        }
                        U[i][j]=temp;       
                    }
                }
        }
        printf("L矩阵:\n");   
        for(i=0;i<n;i++){
            for(j=0;j<n;j++){
                printf("%10.3f",L[i][j]);
            }
            printf("\n");   
        }
        printf("U矩阵:\n");   
        for(i=0;i<n;i++){
            for(j=0;j<n;j++){
                printf("%10.3f",U[i][j]);
            }
            printf("\n");   
        }
        printf("还原矩阵A,计算L*U,存放到新矩阵test中,并输出\n");
        for(i=0;i<n;i++){
            for(j=0;j<n;j++){
                test[i][j]=0;
                for(p=0;p<n;p++){
                    test[i][j]+=L[i][p]*U[p][j];
                }
                printf("%10.3f",test[i][j]);
            }
            printf("\n");
        }       
    }
    

    程序运行结果如下:
    这里写图片描述

    展开全文
  • 矩阵分解(1)-- 矩阵分解之LU分解

    千次阅读 2020-03-02 12:13:50
    2. LU分解 2.1 定义 2.2 存在性和唯一性 2.3 实例 2.4 应用 1. 分类 矩阵分解(decomposition,factorization)是多半将矩阵拆解为数个三角形矩阵(triangular matrix),依使用目的的不同,可分为几类。 与...

    目录

    1. 分类

    2. LU分解

    2.1 定义

    2.2 存在性和唯一性

    2.3 实例

    2.4 应用


    1. 分类

    矩阵分解decompositionfactorization)是多半将矩阵拆解为数个三角形矩阵(triangular matrix),依使用目的的不同,可分为几类。

    与线性方程解法相关的矩阵分解


    2. LU分解

    线性代数数值分析中,LU分解矩阵分解的一种,将一个矩阵分解为一个下三角矩阵和一个上三角矩阵的乘积,有时需要再乘上一个置换矩阵。LU分解可以被视为高斯消元法的矩阵形式。在数值计算上,LU分解经常被用来解线性方程组、且在求反矩阵和计算行列式中都是一个关键的步骤。

    2.1 定义


    2.2 存在性和唯一性

    2.3 实例


    2.4 应用

     

     

     

     

    展开全文
  • 矩阵分解(LU分解)C语言实现

    千次阅读 2019-12-27 14:53:28
    基于C代码实现的矩阵LU分解。网上找的其他代码都存在一些问题,例如角元素存在0的处理。 我在某个C++版本上修改而成,经测试没问题,需要用的自取。 #define N 36//矩阵大小 #define DEBUG 1 //debug label,0即不...

    矩阵分解(LU分解)C语言实现


    基于C代码实现的矩阵LU分解。网上找的其他代码都存在一些问题,例如对角元素存在0的处理。
    我在某个C++版本上修改而成,经测试没问题,需要用的自取。

    #define N 4//矩阵大小
    #define DEBUG 1         //debug label,0即不打印相关结果,非0打印相关输出结果
     
     int main (void)
        {
        double a[4][4] = {
        {0.0, 2.0, 0.0, 1.0},
        {2.0, 2.0, 3.0, 2.0},
        {4.0, -3.0, 0.0, 1.0},
        {6.0, 1.0, -6.0, -5.0}    
        };
        double inva[4][4];
    
    	matrix_inverse_LU(a,inva);
            
        }
    
    void matrix_inverse_LU(double (*a)[N], double (*y)[N])
    {
    		double b[N];
    		int indx[N];
    		printf("Origin matrix:");
    	  output(a);
    	  lucmp(a,indx);
    	  int i,j;
    	  for (i = 0; i < N; i++)
    	  {
    		for (j = 0; j < N; j++) 
    		b[j] = 0;
    		b[i] = 1.0;
    		lubksb(a,b,indx);
    		for (j = 0; j < N; j++) 
    					y[j][i] = b[j];
    	       }    
    		printf("Its inverse matrix:\n");
    		output(y);    
    }
    
    void lucmp(double (*a)[N],int *indx) {
    		int imax = 0;
    		double vv[N];
    		int i,j,k;
    		for (i = 0; i < N; i++) {
    			double big = 0.0;
    			for (j = 0; j < N; j++) {
    				double temp = abs(a[i][j]);
    				if (temp > big) big = temp;
    			}
    			vv[i] = 1.0 / big;
    		}
    		for (j = 0; j < N; j++) {
    			for (i = 0; i < j; i++) {
    				double sum = a[i][j];
    				for (k = 0; k < i; k++) sum -= a[i][k] * a[k][j];
    				a[i][j] = sum;
    			}
    			double big = 0.0;
    			for (i = j; i < N; i++) {
    				double sum = a[i][j];
    				for (k = 0; k < j; k++) sum -= a[i][k] * a[k][j];
    				a[i][j] = sum;
    				double dum = vv[i] * abs(sum);
    				if (dum >= big) {
    					big = dum;
    					imax = i;
    				}
    			}
    			if (j != imax) {
    				for (i = 0; i < N; i++) {
    					double mid = a[imax][i];
    					a[imax][i] = a[j][i];
    					a[j][i] = mid;
    				}
    				double mid = vv[j];
    				vv[j] = vv[imax];
    				vv[imax] = mid;
    			}
    			indx[j] = imax;
    			if (j != N - 1) {
    				double dum = 1.0/a[j][j];
    				for (i = j + 1; i < N; i++) a[i][j] *= dum;
    			}
    		}
    	}
     
    void lubksb(double (*a)[N],double *b,int *indx) {
    		int ii = 0;
    		int i,j;
    		for (i = 0; i < N; i++) {
    			int ip = indx[i];
    			double sum = b[ip];
    			b[ip] = b[i];
    			if (ii != 0)
    			 for (j = ii - 1; j < i; j++) 
    				 sum -= a[i][j] * b[j]; 
    			else
    			 ii = i + 1;
    			b[i] = sum;
    		}
    		// x
    		for (i = N - 1; i >= 0; i--) {
    			double sum = b[i];
    			for (j = i + 1; j < N; j++) 
    				sum -= a[i][j]*b[j];
    			b[i] = sum / a[i][i];
    		}
    	}
    
    
    void output(double (*a)[N]) {
    #ifdef DEBUG
    	int i;
    	for (i = 0; i < N; i++) 
    	{
    		printf(" [%d]| ",i+1);
    		int j;
    		for (j=0;j<N;j++)
    			printf("%.4f",a[i][j]);
    		printf(" |\n ");
    	}
    	printf("-----------------------------------------------\n");
    #endif
    	}
    

    C++版本源码:
    https://blog.csdn.net/BoyMgl/article/details/1914288

    展开全文
  • 研究生所学矩阵分解,里边的内容主要是关于矩阵的分解,QR分解,LU分解。 希望大家有所帮助 矩阵论课程
  • 矩阵LU分解是指非奇异矩阵A能够分解成单位下三角矩阵L和上三角矩阵U的乘的形式,这部分内容是高斯消元法章节讲解的内容,因为最近开始复习数值分析这门功课,所以又回头来开始学习,于是就碰到了矩阵ALU分解,...
  • 矩阵的直接LU分解

    万次阅读 多人点赞 2018-07-06 23:46:00
    上篇博文由高斯消去法的矩阵形式推出了矩阵LU分解矩阵的三角分解法;实际上,可以直接处理矩阵,得到矩阵LU分解,这就是矩阵的直接LU分解;直接通过矩阵的元素得到计算LU元素的递推公式,不需要任何中间步骤。...
  • 矩阵系列:LU分解

    2021-07-10 11:30:46
    1矩阵LU分解模块 1.1 LU分解数学表达 首先要明确的是,矩阵的LU分解是有局限性的,即LU分解只针对非奇异矩阵。那么什么是非奇异矩阵呢?即各阶顺序主子式不为零。 (1)高斯消去法 LU分解的思想来源于高斯消去法,拿...
  • MIT线性代数:4.矩阵ALU分解

    千次阅读 2018-07-10 19:30:44
    2.1A=LU先是由E初等矩阵消元从A变化到U。L与E是什么关系呢?答案是互为逆矩阵。2.2A=LDU有时候我们也可以把主元单独分离出来,得到D。2.3L的求解求逆的顺序要反过来,则L是这些逆的积。为什么要...
  • 矩阵LU分解

    2015-03-29 00:20:36
    这个ppt中介绍了数学中的矩阵LU分解以及矩阵LU分解的c语言实现代码和结果,已经很简洁的做成ppt形式,语言简洁,思路清晰,内容详细。供大家分享和学习。
  • 矩阵分析——LU分解

    万次阅读 多人点赞 2015-05-17 23:52:21
    LU分解定义  在使用初等行变换法求解线性方程组的过程中,系数矩阵的变化情况如下:
  • 矩阵 LU 分解 源程序

    2011-03-18 14:55:45
    矩阵 LU 分解 矩阵 LU 分解 矩阵 LU 分解 矩阵 LU 分解 矩阵 LU 分解 矩阵 LU 分解 矩阵 LU 分解
  • 矩阵lu分解

    2014-03-08 18:33:05
    矩阵LU分解,一般的例子及c语言编程实验
  • 矩阵分解 三角分解(LU分解)

    万次阅读 多人点赞 2017-11-17 11:32:17
    三角分解(LU分解) 在线性代数中, LU分解(LU Decomposition)是矩阵分解的一种,可以将一个矩阵分解为一个单位下三角矩阵和一个上...首先,对矩阵A通过初等行变换将其变为一个上三角矩阵。对于学习过线性代数的同学来说
  • 文章目录L U​ 分解用LU 分解解线性方程组消元法的计算量LU分解的存在性和唯一性对称矩阵的 LDLTL D L^{T}LDLT 分解置换矩阵PA=LUP A=L UPA=LU 分解参考 L U​ 分解 回忆消元法的过程:方阵 AAA 经过初等行变换 ⟶\...
  • LU分解矩阵分解的一种,将系数矩阵A转为等价的两个矩阵L、U的乘积,L为单位下三角,U为上三角,是高斯消元法的一种表达式。 在线性代数中已经证明,如果方阵是非奇异的,即的行列式不为0,LU分解总是存在的。 作用...
  • 对矩阵分解的粗浅理解之LU分解

    千次阅读 2016-12-24 10:33:13
    本图文从行列式计算出发引出了对矩阵LU分解的粗浅理解,希望正在学习线性代数的同学有所帮助。
  • 这个是大型矩阵LU分解,可以将excel表中的数据直接复制粘贴到相应的txt文件中,可实现大型矩阵LU分解。 程序语言C++,编译环境VS2017,其实挺简单的,只是用了嵌套vector,如果自己掌握的较好的,我建议用map...
  • 矩阵LU分解

    千次阅读 2014-10-03 11:15:03
    最近学习了矩阵LU分解
  • LU矩阵分解代码

    2018-08-28 09:16:49
    根据LU矩阵分解来解方程。先对矩阵进行LU分解,然后根据分解结果求解方程。
  • 矩阵LU分解

    2015-04-25 13:24:07
    解线性方程组的直接三角分解法(LU分解
  • 矩阵lu分解

    2012-06-05 11:57:45
    矩阵lu分解,包含有具体的解,算法简单,运行成功
  • 矩阵LU分解是常见的矩阵分解形式,主要用于解线性方程组。分解原理虽然简单,但是对于初学者还是有一定的难度,因此在此分享自己的一点学习心得。 对于很多初学者,最难理解是参数的求解顺序以及如何累加,其实...
  • 一、ALU分解A=LU  我们之前探讨过矩阵消元,当时我们通过EA=U将A消元得到了U,这一节,我们从另一个角度分析A与U的关系  假设A是非奇异矩阵且消元过程中没有行交换,我们便可以将矩阵消元的EA=U形式改写成A=...
  • MPI实现矩阵LU分解

    2014-12-14 15:43:54
    对于一个n阶的非奇异矩阵A,其LU分解是求一个主角元素全为1的下三角矩阵L与上三角矩阵U,使A=LU。
  • 实现了矩阵LU分解,也称三角分解,输入为n阶方阵A,输出为L和U,同时会自动进行矩阵是否可以进行LU分解的判断,注释翔实,有一定基础的一定可以轻松看懂。
  • 矩阵与复矩阵LU分解,与教程计算验证无误,运行高效

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,083
精华内容 2,033
关键字:

对矩阵a进行lu分解