在解一般的非奇异矩阵线性方程组的时候,或者在迭代改善算法中,需要使用LU分解法。
对于一个一般的非奇异矩阵A=(a11, a12,…,a1n,a21,…ann),可分解为一个下三角矩阵L和一个上三角矩阵U。其中L的主对角线元素都是1.
希望得到一个M,最后在需要的时候将M拆分为L和U

M=[[u11 u12 u13 ...... u1nl21 u22 u23 ...... u2nl31 l32 u33 ...... u3n......                 ]]
L=[[1   0   0......l21 1   0......l31 l32 1............         ]]
U=[[u11 u12 u13......0   u22 u23......0   0   u33............         ]]

doolittle分解法分两步进行
首先,根据已知A直接做出一个基矩阵M,其中,矩阵的第一行就是A的第一行,矩阵的第一列为A的第一列除以矩阵M的第一列的第一个元。即
u1j=a1j j=1,2,…,n
li1=ai1/u11, i=1,2,…,n
接着,从第二行开始,从第二列到最后一列一次求解M的元素,列数大于等于行数则属于U,否则属于L,有公式
ukj=akj-sum(lkmumj)(m∈(1, k-1)), j=1,2,…,n
lik=(aik-sum(lim
umk)(m∈(1, k-1)))/ukk, i=1,2,…,n
可以发现lik与ukj公式的区别只有lik多除以了一个ukk即这一列的对角线元
下面给出一个例子

A=[[1  2  -32  -1  33  -2  2]]

将A进行doolittle分解

代码如下

# -*- coding: utf-8 -*-
"""
Created on Tue Feb 12 11:27:19 2019@author: 鹰皇
"""#Doolittle分解法
import numpy as np
A=[[1.0,2.0,-3.0],[2.0,-1.0,3.0],[3.0,-2.0,2.0]]def get_base(A):base=list(np.zeros((len(A),len(A))))D=[]for i in base:D.append(list(i))return Ddef U_initiate(A):u=get_base(A)for i in range(0,len(A)):u[0][i]=A[0][i]return udef L_initiate(A, u):l=get_base(A)for i in range(0,len(A)):l[i][i]=1.0if i==0:passelse:l[i][0]=A[i][0]/u[0][0]return ldef get_u(A,L,U,k,j):sum1=0.0for m in range(0,k):sum1=sum1+L[k][m]*U[m][j]U[k][j]=A[k][j]-sum1return Udef get_l(A,L,U,i,k):sum1=0.0for m in range(0,k):sum1=sum1+L[i][m]*U[m][k]L[i][k]=(A[i][k]-sum1)/U[k][k]return Ldef main(A):U=U_initiate(A)L=L_initiate(A,U)n=1while n<len(A):t=1while t<len(A):if t>=n:U=get_u(A,L,U,n,t)else:L=get_l(A,L,U,n,t)t=t+1print tn=n+1return U,Lprint main(A)

算得L,U,解答完毕

Doolittle分解法(LU分解法)的Python实现相关推荐

  1. 紧凑存储的杜利特尔分解法Doolittle(LU分解法)_解线性方程组的直接解法

    紧凑存储的杜利特尔分解法Doolittle(LU分解法)_解线性方程组的直接解法 标签:计算方法实验 /* 紧凑存储的杜利特尔分解法Doolittle:如果初始矩阵不要求保留的话,可以紧凑存储.因为每 ...

  2. 计算机数值方法——LU分解法(C++\Python代码实现)

    算法流程 首先,LU分解法就是在高斯消元法的基础上,把矩阵AAA分解为一个上三角矩阵UUU与一个单位下三角矩阵LLL的乘积. 懒得敲LaTeX公式了,书上由具体的推导过程,这里我们重点介绍代码吧 主要 ...

  3. Matlab | Lab4——用LU 分解法、 Jacobi 迭代、 Gauss-Seidel 迭代 解线性病态方程组(系数矩阵为Hilbert矩阵)

    1.要求 考虑线性方程组Hx=b,其中H为n阶Hilbert矩阵,即 通过先给定解(例如取x的各个分量为1),再计算出右端向量b的办法给出一个精确解已知的问题. (1)分别编写Doolittle LU ...

  4. Python02 雅克比迭代法 Gauss-Seidel迭代法 列选主元法 LU分解法(附代码)

    1. 实验结果 (1)在定义的矩阵类中设置需要求解的方程为: (2)在 test.py 中选择雅克比迭代法求解: 输入:最大容许迭代次数和精度要求: 输出:根据谱半径判断方法是否收敛,收敛时得到满足精 ...

  5. 计算方法:列主元消去法,LU分解法, 雅可比迭代法,高斯塞德尔迭代法 解线性方程(C++)

    Matrix.h包括矩阵类Matrix的定义,Matrix.cpp包括该类成员函数的实现,LinearEqu.h包括线性方程类LinearEqu的定义,继承自Matrix类,其中solve()方法为列 ...

  6. LU分解法 | matlab

    % LU分解法 % M为输入的增广矩阵 % precision为输入的精度要求,如不输入或输入有误,则默认为10位if nargin == 2trydigits(precision);catchdis ...

  7. 解线性方程组的直接方法:LU分解法及其C语言算法实现

    在上一篇博客里面,笔者介绍了解线性方程组的列主元Guass消元法,这篇将介绍LU分解法及其算法实现. 什么是LU分解? 对于一个线性方程组Ax=b,其中A是非奇异系数矩阵,b是线性方程组右端项,在列主 ...

  8. 数值分析3-解线性方程组的高斯消去法、LU分解法及列主元消去法的matlab程序和调试方法

    对于形如Ax=b的线性方程组,在线性代数中是通过求逆的方式求解的,即x=A-1b,而在数值分析中,解线性方程组的方法是通过直接法或者迭代法来实现的,今天写的三个程序都属于直接法,分别为高斯消去法.LU ...

  9. matlab lu解线性方程,MATLAB报告用LU分解法求解线性方程组.doc

    MATLAB报告用LU分解法求解线性方程组 <MATLAB>期末大报告 报告内容:用LU分解法求解线性方程组 学院(系): 专 业: 班 级: 学 号: 学生姓名: 2014 年 6 月 ...

最新文章

  1. PE文件结构详解(三)
  2. 图解易经:一部终于可以读懂的易经 祖行 扫描版 陕西师范大学出版社
  3. iOS RunLoop简介
  4. リアルタイム3Dニャンニャン 汉化补丁
  5. 利用ionic3进行上一行和左一行不动,中间移动的功能
  6. 2015c语言9月答案,2015年9月计算机二级C语言预测题答案
  7. Cocos2d-x动作CCAction
  8. 【备忘】加入L2范数正则化后的正规方程求解参数推导过程
  9. 70道经典Android面试题加答案--重要知识点几乎都涉及到了
  10. java三国策略手游_策略三国下载-策略三国手游官网版下载-Minecraft中文分享站
  11. 利用JS代码完成动态生成表格案例及解析
  12. c语言读取广播星历程序,GPS广播星历计算卫星位置和速度.doc
  13. 上传doc,pdf,ppt,png,jpg,html文件并解析内容
  14. 通过Python爬虫技术获取小说信息
  15. redis连接异常 redis.clients.jedis.exceptions.JedisClusterException CLUSTERDOWN The cluster is down
  16. html入门怎么换字体颜色,html怎么改字体颜色
  17. GTSAM 学习(一)
  18. 安装win8的坎坷经历
  19. HTML5字母为30px用h几,HTML 中 1pt 等于多少 px?
  20. 【NOIP2016普及组】复赛——海港

热门文章

  1. 当下知识付费行业趋势
  2. stb_image图像库处理tga转png
  3. java中怎样用post、get、put请求
  4. 静态路由配置(不会配静态路由,看这里就够了!)
  5. java中json数据_Java中json的使用 解析json数据
  6. 英语语法:定语从句讲解
  7. mysql 尽量不要使用 联合主键_MySQL 使用规范
  8. minio断点续传方案
  9. DUMN : Deep User Match Network for Click-Through Rate Prediction
  10. 行业前研|人工智能在作战仿真中的应用